Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] głosowanie przez przekierowanie na stronę, jak zabezpieczyć
pionas
post
Post #1





Grupa: Zarejestrowani
Postów: 70
Pomógł: 2
Dołączył: 25.03.2009
Skąd: Pionki

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
buliq
post
Post #2





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


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.

Ten post edytował buliq 3.08.2011, 11:18:14
Go to the top of the page
+Quote Post
pionas
post
Post #3





Grupa: Zarejestrowani
Postów: 70
Pomógł: 2
Dołączył: 25.03.2009
Skąd: Pionki

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


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?
Go to the top of the page
+Quote Post
buliq
post
Post #4





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


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.
Go to the top of the page
+Quote Post
pionas
post
Post #5





Grupa: Zarejestrowani
Postów: 70
Pomógł: 2
Dołączył: 25.03.2009
Skąd: Pionki

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


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...

Ten post edytował pionas 3.08.2011, 12:09:05
Go to the top of the page
+Quote Post
Fifi209
post
Post #6





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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 (IMG:style_emoticons/default/wink.gif)
Co do rozkodowywania - jak można rozkodowywać coś co nie jest zakodowane? Oba z algorytmów tworzą skróty, nic nie kodują.
Go to the top of the page
+Quote Post
buliq
post
Post #7





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


@up złapałeś mnie za słówko (IMG:style_emoticons/default/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 ? (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
pionas
post
Post #8





Grupa: Zarejestrowani
Postów: 70
Pomógł: 2
Dołączył: 25.03.2009
Skąd: Pionki

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


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...
Go to the top of the page
+Quote Post
Fifi209
post
Post #9





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Cytat(buliq @ 3.08.2011, 12:15:00 ) *
@up złapałeś mnie za słówko (IMG:style_emoticons/default/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. (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 18:20