Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]bezobrazkowa captcha
Forum PHP.pl > Forum > Przedszkole
acidm
Czy można zabezpieczyć się przed spambootami bez obrazków ?
Np. generuje klucz ,zapisuje go sesji do przeglądarki wysyłam formularz z ukrytym inputem poczym ajaxem pobieram klucz i dolaczam js-em do inputa. Po wysłanie formularza sprawdzam czy ukryty input ma pożądaną wartość jeśli tak to przepuszczam dalej jak nie to exit...

Czy takie podejście będzie skuteczne?


  1. <?php
  2. if (!isset($_SESSION['captcha'])) {
  3. $znaki = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890_+{}|:<>~?';
  4. $znaki = str_split($znaki);
  5. $ile = 6;
  6. $str = '';
  7. while ($ile) {
  8. --$ile;
  9. $str .= $znaki[array_rand($znaki)];
  10. }
  11. $str = sha1($str);
  12. $_SESSION['captcha'] = $str;
  13. }
  14.  
  15.  
  16. if (isset($_POST['sendme']) && $_POST['sendme'] === '1') {
  17. die($_SESSION['captcha']);
  18. }
  19.  
  20. if (!empty($_POST['captcha']) && $_POST['captcha'] === $_SESSION['captcha'] && !empty($_POST['a']) && !empty($_POST['b'])) {
  21. unset($_SESSION['captcha']);
  22. //wykonanie dowolego kodu jeśli nie jesteś bootem
  23. //np:
  24. print_r($_POST);
  25. }
  26.  
  27.  
  28. ?>
  29. <!DOCTYPE HTML>
  30. <html>
  31. <head>
  32. <meta charset="utf-8">
  33. <title>locale</title>
  34. <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
  35. </script>
  36. <script type="text/javascript">
  37. $(document).ready(function(){
  38. $.post('<?php
  39. echo $_SERVER['PHP_SELF'];
  40. ?>',{sendme:1},function(data){$('input[name="captcha"]').val(data);
  41. })
  42.  
  43. })
  44. </script>
  45. </head>
  46. <body>
  47. <form action="" method="post" enctype="application/x-www-form-urlencoded">
  48. <input name="a" type="text">
  49. <input name="b" type="text">
  50. <input name="captcha" type="hidden">
  51. <input type="submit">
  52. </form>
  53. </body>
  54. </html>
  55.  

b4rt3kk
Jak ktoś ma przepisać tę captchę jak nigdzie jej nie wyświetlasz?
acidm
Nie ma jej pisać.
Ma to zrobić js.
Spambooty nie interpretują js a przeglądarka usera tak. (poprawić jeśli się mylę)
rzymek01
Nie sądzę, aby js był jakimkolwiek problemem dla spambotów
acidm
Nawet jeśli kod klucza nie jest umieszczony bezpośrednio w kodzie tylko pobierany w tle ajaxem i ładowany do inputa?

Dobra , skoro generowanie treści ajaxem i wstawianie automatyczne odpada to pozostaje :
1.filtrowanie popularnych ip spambotów
2.zbudowanie lub użycie gotowej catptchy w js np.z obsługą drag&drop - przykład ajax fancy captcha

Co myślicie o tych rozwiązaniach?
Znacie inne skuteczne?
!*!
Cytat
Czy takie podejście będzie skuteczne?

Nie.
Cytat
Spambooty nie interpretują js a przeglądarka usera tak. (poprawić jeśli się mylę)

Jakiś czas temu jeszcze tego nie robiły (zwyczajnie nie było takiej potrzeby), ale nie sądzę, aby było to wielką przeszkodą, skoro jest to możliwe.

Nie kombinuj, poszukaj na forum, szczególnie w dziale PHP, było już wiele tematów odnośnie captchy. Twój sposób jest do obejścia i stwierdzenie bezpieczeństwa siedzi przy nim tylko w Twojej głowie, nigdzie więcej.

Już nie wspominając o tym że ludzie bez JS, zwyczajnie tego nie przejdą.
acidm
Zgadza się ,nie można zabezpieczyć sie przed botami w js w 100%.
Można tylko utrudnić spawę botowi przez js ale dla dedykowanego rozwiązania jest zawsze dedykowane obejście.
W sumie im więcej czytam o sposobach obrony przed bootami tym bardziej mam wrażenie że nie ma jednego w 100% działającego rozwiązania :|,można próbować utrudnić dostęp botom, lub co chyba lepsze skorzystać z paru rozwiązań naraz.
!*!
Cytat
lub co chyba lepsze skorzystać z paru rozwiązań naraz

Masz utrudniać botowi dostęp do serwisu, a nie użytkownikowi. Stosuj reCaptche i po kłopocie, skoro pytasz o takie rzeczy na forum, to Twój serwis i tak nie będzie na tyle atrakcyjny, aby zaprzęgać pod niego jakiegokolwiek bota, chyba że automatycznego.
acidm
Cytat(!*! @ 3.09.2012, 13:29:03 ) *
Masz utrudniać botowi dostęp do serwisu, a nie użytkownikowi. Stosuj reCaptche

Doprawdy?
No jak dla mnie to właśnie obrazkowe captche są najbardziej utrudniające życie użytkownikowi.
Po za tym im bardziej są bezpieczniesze tym bardziej trudniejsze do odczytu .
Pora zapoznać sie z sblam! smile.gif
!*!
Cytat
No jak dla mnie to właśnie obrazkowe captche są najbardziej utrudniające życie użytkownikowi.

Lepszego sposobu nie ma i nie będzie przez najbliższe 10-15lat, aż kamery nie staną się standardem i nie będzie bezpośredniej weryfikacji mordy przed monitorem, czy przypadkiem nie loguje się pies... ale do standardu który na to pozwala na razie w nowszych przeglądarkach, jeszcze daleko.

Kazde inne rozwiązanie, które nie jest "przepisaniem tekstu z obrazka" jest zwyczajnie marnej jakości i ma za dużo wad aby mogło przyjąć się w czymś większym.
rzymek01
Są inne sposoby, mianowicie captche niezawierające literek do przepisania tylko obrazki z kontekstem, które dla człowieka są trywialne, dla bota już nie.

Gdzieś widziałem captchę typu był sobie parking, 3 samochody, kilka wolnych miejsc parkingowych i tekst "przeciągnij sportowy samochód na wolne miejsce do zaparkowania". Oczywiście parafrazuję, ale chodzi o ideę. Problem jest taki, że takich captch nie można automatycznie tworzyć, ale mogą powstać (może już istnieje) serwis, który udostepnia dużą gamę takich captch.

Jak na razie całkiem dobra alternatywą jest KeyCaptcha.
Użytkownik ma za zadanie ułożyć obrazek. Działa we wszystkich przeglądarkach (na starszych potrzebny jest flash).
acidm
Ciekawe rozwiązanie tylko ma mały szkopuł , user wykonuje polecenie po czym funkcja w js podbindowana do odpowiednich zdarzeń sprawdza efekt, jeśli test wykonany poprawnie to wykonuje akcje (np. dodanie inputa z odpowiednią wartością do formy).
Skoro robot może wykonywać kod js to odpowiednio zaprogramowany robot może wykonać samą akcję omijając cały proces sprawdzania poczynań usera. Można by kod js odpowiedzialny z akcje skompresować czy pobierać ajaxem i wykonywać (brzydkim) evalem ale to żadne zabezpieczenie tylko chwilowe utrudnienie.

Więc jest to fajne rozwiązanie ale tylko do czasu aż ktoś napisze dedykowanego bota lub dane rozwiązanie będzie na tyle powszechne że obejście doczeka się implementacji w zautomatyzowanych botach.

Rowiązanie z obrazkowo-literkowymi captcha jest też nie wystarczające :
-mocno zniekształcony tekst (a tylko w ten sposób captcha może być w miarę skuteczna) utrudnia odczyt użytkownikowi
-w raz z rozwojem OCR-ów takie captche będą (jeśli nie są już) coraz słabszym rozwiązaniem


Są jeszcze jakieś propozycje?
CuteOne
Widziałem kiedyś captche typu "przeciągnij i upuść" zrobiona pod ajaxem:
- user podczas rejestracji wpisywał swoje dane, akceptował regulamin itp.
- na szarym końcu captcha, która po przeciągnięciu kółka do kosza i kwadratu do pudełka, generowała ajaxem unikalny klucz, który był podpinany do action formularza.
- jeżeli użytkownik pomylił się 3 razy blok na 15min.

Jak dla mnie fajna alternatywa dla standardowej captchy - z coraz bardziej powykręcanymi literami sleep.gif. Tym bardziej, że prawdopodobieństwo trafienia jest niewielkie i zmniejsza się wykładniczo z ilością elementów do przeciągnięcia
erix
Cytat
Spambooty nie interpretują js a przeglądarka usera tak. (poprawić jeśli się mylę)

A o WSH słyszałeś?

Cytat
Już nie wspominając o tym że ludzie bez JS, zwyczajnie tego nie przejdą.

Jeszcze 2 lata temu zwróciłbym na to uwagę. Teraz przestaje mieć to sens; nawet Opera Mini na Javę ma prowizoryczną obsługę JS, pod konsolą jest elinks. tongue.gif

Cytat
Stosuj reCaptche i po kłopocie, skoro pytasz o takie rzeczy na forum, to Twój serwis i tak nie będzie na tyle atrakcyjny, aby zaprzęgać pod niego jakiegokolwiek bota, chyba że automatycznego.

Nic mnie tak nie denerwuje, jak reCaptcha... tongue.gif

Cytat
Pora zapoznać sie z sblam!

Słusznie. [; Wg mnie skuteczne.

rzymek01
Cytat(acidm @ 5.09.2012, 11:13:17 ) *
Ciekawe rozwiązanie tylko ma mały szkopuł , user wykonuje polecenie po czym funkcja w js podbindowana do odpowiednich zdarzeń sprawdza efekt, jeśli test wykonany poprawnie to wykonuje akcje (np. dodanie inputa z odpowiednią wartością do formy).

hehe, może najpierw zapoznasz się z działaniem, a dopiero potem będziesz pisać takie bzdury? smile.gif

Walidacja wywoływana jest po stronie serwera, jeśli znasz sposób na obejście takiej captchy, pisz śmiało smile.gif
acidm
A tak na marginesie to czy bot będzie potrafił tylko zinterpretować js który do niego dotrze czy może
także dowolnie dołączyć własny kod js do strony ? Pytam bo już jestem zdezorientowany...
erix
Cytat
także dowolnie dołączyć własny kod js do strony

Może. Może wszystko, co jesteś w stanie zrobić ze stroną w przeglądarce.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.