Witam wszystkich.

Zainstalowałem na serwerze skrypt ankiety CodeCanyon - Smooth Ajax Poll v1.6, dostępny do pobrania TUTAJ.

Skypt rzekomo posiada podwójnę ochronę przed głosowaniem w określonym czasie:
Double security layer (IP and COOKIES) which Limits users to vote once per poll.

Niestety, kiedy wyłączyłem w przeglądarce ciasteczka mogłem głosować w nieskończoność, a więc ochrona IP nie działa sad.gif Popatrzyłem do bazy danych i okazało się, że numery IP w ogóle nie są zapisywane do tabeli (więc logiczne, że ochrona IP nie działa).

Popatrzyłem więc w plik pollfns.php:

Fragment pliku pollfns.php:

  1. //checking if the ip has voted already !
  2. if($_COOKIE["poll".$q_id]!='yes'){ //if didn't vote yet
  3. //see if the ip has voted on this poll
  4. $q="SELECT `ip`,`q_id`,`voteDate` from `votes` where ip='{$ip}' and q_id='{$q_id}' order by voteDate desc limit 1";
  5. $res=query($connect,$q);
  6. if($res){
  7. $nbr=$res->num_rows;
  8. if($nbr>0){
  9. $d=retrieve_data($res);
  10. $voteTime=strtotime($d[0]['voteDate']); //the timestamp of the vote time
  11. $now=strtotime(gmdate('Y-m-d H:'.strftime('%M').':s')); //now timestamp
  12. $vt=$voteTime+$expire*60; //when we can vote again time ( after expiration )
  13. if($now>=$vt){ //if the current time is bigger than the expiration date than we can vote again
  14. $votedIp=false;
  15. }else{
  16. $votedIp=true;
  17. }
  18. }else{$votedIp=false;}
  19. }else{
  20. echo $error3;
  21. close($connect);
  22. }
  23. $votedIp=false; // Disable the IP check
  24. }else if($_COOKIE["poll".$q_id]=='yes'){
  25. $votedIp=true;
  26. }


Zwróciłem uwagę na linię 489 pliku:

  1. $votedIp=false; // Disable the IP check


Zmieniłem wartość zmiennej na true, rekordy IP zaczęły zapisywać się do bazy danych, ale nadal po wyczyszczeniu cookies lub ich wyłączeniu mogę głosować w nieskończoność sad.gif , mimo, że zmienna $expire (czas po którym można głosować ponownie) jest ustawiona na 10 minut sad.gif


Bardzo proszę o pomoc wink.gif