Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] głosowanie przez przekierowanie na stronę
Forum PHP.pl > Forum > Przedszkole
pionas
Witam,

mam problem.
Otóż zrobiłem głosowanie na zdjęcia za pomocą kliknięcia w przycisk, przycisk ten przekierowuje na kolejną podstronę gdzie jest weryfikowana poprawność oddania głosu.
Tzn. na stronie A, generuję kod do linku na oddanie głosu wygląda on mniej więcej tak:
  1. $hash1 = "http://adres_strony.pl/".$_SERVER['REQUEST_URI'];
  2. $hash1 = sha1($hash1.SALT1);
  3. $hash2 = sha1(SALT2.$id.SALT3.$_SERVER['REMOTE_ADDR']);
  4.  


Link do oddania głosu wygląda tak: b.php?act=vote&id=[ID]&h1=[hash1]&h2=[hash2]

Kod sprawdzający to wygląda mniej więcej tak:
  1. //...
  2. $ref = str_replace('www.','',$_SERVER['HTTP_REFERER']);
  3. $hash22 = sha1($ref.SALT1);
  4. $hash11 = sha1(SALT2.$id.SALT3.$_SERVER['REMOTE_ADDR']);
  5.  
  6. if ($hash22==$h2&& $hash11==$h1) {
  7. // zalicz głos
  8. } else {
  9. // poinformuj o probie oszustwa...
  10. }


Czy da się to jakoś oszukać? Jakie Wy macie próby na nieuczciwych graczy?

Dziękuję i pozdrawiam
buliq
post numer #2

Poza tym zdefiniuj sobie 1 salt, koduj przy pomocy md5 - nie do rozkodowania. DO linku dodaj znacznik czasowy zakodowany base64_encode i to z niego korzystaj. Ten sam znacznik czasowy może być użyty tylko raz - dodawaj go do bazy żeby 2 razy nie użyto lub sprawdzaj jak długi czas upłyną - większy jak x sek. to pewnie oszustwo. Możesz też nadawać unikalny ID dla każdego głosującego i go też wrzucić do bazy i przypisać znacznikowi. Jest wiele możliwości natomiast twoje rozwiązanie nie sprawdzi się dla każdego twojego użytkownika.
pionas
A dlaczego nie sprawdzi się dla każdego użytkownika?
A co jakbym dał znacznik czasowy w zmiennej sesji? Dodał go do hashu i potem sprawdził czy wygenerowany hash jest zgodny?
buliq
na dwóch różnych serwerach? znacznik sesji będzie różny.

Ty chyba byłeś zbyt leniwy aby spojrzeć na ten link co podałem? Nie sprawdzi się bo nie każdy user agent przesyła wartość http_referer czyli dla tych co nie przesyłają będzie sypał cały czas próba oszustwa.
pionas
Jak to wszystko jest na jednym serwerze, to jest jeden serwis....

Chodzi mi o coś takiego:
http://twoja_strona.pl/a.php:
  1. $_SESSION['znacznik'] = microtime();
  2.  
  3.  
  4. $hash1 = "http://adres_strony.pl/".$_SERVER['REQUEST_URI'];
  5. $hash1 = md5(sha1($hash1.SALT));
  6. $hash2 = md5(sha1(SALT.$id.$_SERVER['REMOTE_ADDR'].$_SESSION['znacznik']));
  7.  


b.php?act=vote&id=[ID]&h1=[hash1]&h2=[hash2]

http://twoja_strona.pl/b.php:
  1. //...
  2. $ref = str_replace('www.','',$_SERVER['HTTP_REFERER']);
  3. $h1 = md5(sha1($ref.SALT));
  4. $h2 = md5(sha1(SALT.$id.$_SERVER['REMOTE_ADDR'].$_SESSION['znacznik']));
  5.  
  6. if ($hash22==$h2&& $hash11==$h1) {
  7. // zalicz głos
  8. } else {
  9. // poinformuj o probie oszustwa...
  10. }



[EDIT]
O to właśnie chodzi aby http_referer był adresem strony a.php?id=[ID], zasady są takie, że trzeba wejść na stronę ze zdjęciem i dopiero na niej kliknąć w link "Oddaję głos" a nie że bezpośrednio skopiuję sobie link do oddawania głosu i porozsyłam znajomym i każdy zagłosuje...
Fifi209
Cytat(buliq @ 3.08.2011, 11:17:39 ) *
Poza tym zdefiniuj sobie 1 salt, koduj przy pomocy md5 - nie do rozkodowania.

Funkcje sha1 czy md5 generują hash, więc podaj jakiś konkretniejszy argument dlaczego ma używać md5 wink.gif
Co do rozkodowywania - jak można rozkodowywać coś co nie jest zakodowane? Oba z algorytmów tworzą skróty, nic nie kodują.
buliq
@up złapałeś mnie za słówko smile.gif dlaczego md5? nie słyszałem o zastrzeżeniach odnośnie tego algorytmu tymczasem sha1 ponoć jest do złamania. Zdaję sobie sprawę że w przypadku ankiet nie ma to znaczenia ponieważ szkoda zachodu ale lepiej dmuchać na zimne ? smile.gif

w temacie: to po co ci dwa skrypty ? nie można tego w jednym rozwiązać? Skoro już muszą być dwa to session id w zupełności wystarczy.
pionas
Przecież to jest jeden skrypt...
Jeden plik służy do wyświetlania obrazka i generowania linku do zagłosowania, a drugi plik weryfikuje poprawność linku i czy osoba która kliknęła w link to osoba która faktycznie zobaczyła zdjęcie i sama z siebie oddała na nie głos...
Fifi209
Cytat(buliq @ 3.08.2011, 12:15:00 ) *
@up złapałeś mnie za słówko smile.gif dlaczego md5? nie słyszałem o zastrzeżeniach odnośnie tego algorytmu tymczasem sha1 ponoć jest do złamania

Oba algorytmy jak wspomniałem tworzą skróty, nie chce mi się teraz szukać który ma większe prawdopodobieństwo kolizji, jednak do ankiet może używać czego chce właściwie.

Poza tym "łamanie" tych algorytmów tak naprawdę to odszukanie w tęczowych tablicach odpowiedniego odpowiednika (ciągu), który wygeneruje identyczny hash.
Wiadomo, jeżeli chodzi o hasła to zwykle wystarczy metoda słownikowa, bo ludzie dają głupie hasła typu: password, haslo, imie, etc.
Ci bardziej łebscy i tak polegną na prostym ataku BF, a tych ostatnich z silnymi hasłami (po wykradnięciu hasha) najłatwiej załatwić tęczowymi tablicami. smile.gif
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.