Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][PHP]Walidacja użytkowników - uproszczona Captcha, Zabezpieczenie przed obchodzeniem blokady nałożonej przez cookies.
Galakar
post 25.01.2012, 12:04:40
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 29.05.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Witam wszystkich.

Dzięki wcześniejszym poradom i pomocy użytkowników tego zacnego forum, udało mi się uruchomić stronę internetową, która działa tak jak pragnąłem (mniej więcej). Przez kilka miesięcy wszystko było w porządku, aż w zeszłym tygodniu użyto skryptu który pozwolił na automatyczne oddawanie głosów w ankiecie. Cała ankieta składała się tylko z pól "radio" (nie wiem czy jest to istotne). Od tygodnia staram się temu zaradzić i niestety powoli opuszcza mnie nadzieja, że sam cokolwiek wykombinuję.

Do tej pory zabezpieczałem się przed wielokrotnym głosowaniem poprzez ciasteczka. Przez ostatni tydzień próbowałem innych metod, ale były one określane jako "niewystarczające". Pomysły wyglądały następująco:
- wraz z oddaniem głosu uruchamiała się sesja. Jeśli sesja lub ciasteczka są aktywne pojawiał się komunikat, że dany użytkownik już głosował;
- przycisk submit pojawiał się dopiero po naciśnięciu buttona "Jestem człowiekiem";
- dodanie okienka alert.

Jako że powyższe zabezpieczenia były określane jako słabe, postanowiłem napisać kod, który najpierw generuje losowe słowo które użytkownik musi przepisać. Jeśli to się powiedzie, pojawi się przycisk "Głosuj" i będzie można normalnie oddać głos. Na stronie http://www.w3schools.com/ jest pokazany tutorial jak napisać prostą walidację w JS. Niestety na JS się nie znam. Spróbowałem napisać to w PHP ale utknąłem tuż po funkcji która miałaby generować takie zapytanie. Wygląda ona tak:

  1. <?php
  2. function pobierz_slowo($min, $max)
  3. //pobranie losowego słowa ze słownika
  4. {
  5. // generowanie losowego słowa
  6. $slowo = '';
  7. // ścieżka do słowa
  8. $slownik = '../slowa/pl.txt'; // słownik
  9. $wp = @fopen($slownik, 'r'); //otwarcie pliku tylko do odczytu
  10. if(!$wp) //co jeśli nie udało się otworzyć pliku
  11. return false;
  12. $wielkosc = filesize($slownik);
  13.  
  14. // przejście do losowej pozycji w słowniku
  15. srand ((double) microtime() * 1000000);
  16. $losowa_pozycja = rand(0, $wielkosc);
  17. fseek($wp, $losowa_pozycja);
  18.  
  19. // pobranie ze słownika następnego pełnego słowa o właściwej długości
  20. while (strlen($slowo)< $min || strlen($slowo)>$max || strstr($slowo, "'"))
  21. {
  22. if (feof($wp))
  23. fseek($wp, 0); // jeżeli koniec pliku, przeskocz na początek
  24. $slowo = fgets($wp, 80); // przeskoczenie pierwszego słowa bo może być niepełne
  25. $slowo = fgets($wp, 80); // potencjalne hasło
  26. };
  27. $slowo=trim($slowo); // obcięcie początkowego \n z funkcji fgets
  28. return $slowo;
  29. }
  30. ?>


Zapoznałem się już z tematem http://forum.php.pl/index.php?showtopic=30...t=0&start=0 Niestety niewiele mi on mówi. Ma ktoś może jakąś radę, jak rozwiązać ten problem?

Z wyrazami szacunku

Galakar
Go to the top of the page
+Quote Post
Sephirus
post 25.01.2012, 12:55:26
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Pytanie numer 1:

Te ankiety - dostępne są dla każdego czy zalogowanego użytkownika?

Pytanie numer 2:

Czemu nie użyć reCaptcha?


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Galakar
post 25.01.2012, 13:55:25
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 29.05.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Witam.

Co do pierwszego pytania, to jest ona dostępna dla każdego użytkownika. Ze względu na tematykę, gdy wprowadziłem na próbę możliwość głosowania tylko dla zarejestrowanych użytkowników, liczba głosów spadła zaledwie do 5 (z kilkudziesięciu normalnie). Dlatego ten pomysł porzuciłem.

Co do drugiego, to wydaje mi się że odczytanie reCaptchy jest uciążliwe (gdy pojawiają się na przykład słowa pochodzenia chińskiego czy japońskiego). Eksperymentowałem z Simple Captcha od Google, ale nie znalazłem możliwości aby sprawdzało poprawność przed wysłaniem formularza. Jeśli mylę się co do reCaptcha to przepraszam, ale nigdy nie miałem okazji z niej korzystać.

Próbowałem samemu eksperymentować dlatego, że uważam to za najlepszą metodę nauki.

Z wyrazami szacunku
Galakar
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 15:01