Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] prosty licznik, zabezpieczyć przed botami
Lejto
post
Post #1





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

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


Mam kod prostego licznika opartego na txt. Ostatnio dziwiły mnie statystyki wiedz postanowiłem napisać prosty skrypt który powie mi jaki jest host danego gościa itp. I taki hosty mam:
crawl-66-249-73-20.googlebot.com, mail.explodelink.com itp mam jakieś zabezpieczenie w moim skrypcie licznika ale to nie skutkuje.
  1. <?
  2. $Bots = array(
  3.  'Alexa'  => 'ia_archiver',
  4.  'Ask Jeeves' => 'ask jeeves',
  5.  'Teoma'  => 'teoma',
  6.  'Baidu Spider'  => 'baiduspider',
  7.  'cURL'  => 'curl',
  8.  'GameSpy' => 'gamespyhttp',
  9.  'Googlebot-Image' => 'googlebot-image',
  10.  'Gigabot' => 'gigabot',
  11.  'Googlebot'  => 'googlebot',
  12.  'Grub'  => 'grub',
  13.  'Inktomi Slurp'  => 'slurp',
  14.  'msnbot' => 'msnbot',
  15.  'AltaVista'  => 'scooter',
  16.  'Yahoo!' => 'yahoo!',
  17.  'Lycos'  => 'lycos',
  18.  'Whatuseek' => 'whatuseek',
  19.  );
  20. foreach($Bots as $bot => $designation)
  21. {
  22.  if(eregi($designation, $_SERVER['HTTP_USER_AGENT']))
  23.  $b0t = $b0t . 1;
  24. }
  25. if($b0t=='' or $bot=='0')
  26. {
  27. $foo = file('licznik.txt');
  28. $ex = @explode('|', $foo[0]);
  29.  
  30. if(!isset($_COOKIE['licz_x']))
  31. {
  32. ((date('n') == @$ex[2])) ?
  33. $ex[3]++ :
  34. $ex[3] = 1;
  35. $ex[2] = date('n');
  36.  
  37. ((date('d') == @$ex[0])) ?
  38. $ex[1]++ :
  39. $ex[1] = 1;
  40. $ex[0] = date('d');
  41.  
  42. }
  43.  
  44. if(!isset($_COOKIE['licz_xO']))
  45. {
  46. (empty($ex[4])) ? $ex[4] = 1 : $ex[4]++;
  47. }
  48.  
  49. $write = fopen('licznik.txt', 'w');
  50. flock($write, LOCK_EX);
  51. fwrite($write, join('|',$ex));
  52. flock($write, LOCK_UN);
  53. fclose($write);
  54.  
  55.  
  56. $hours = date('G');
  57. $minutes = date('i');
  58. $hoursleft = 23 - $hours;
  59. $minutesleft = 59 - $minutes;
  60. $hs = $hoursleft * 3600;
  61. $ms = $minutesleft * 60;
  62. $timeleft = $hs + $ms;
  63. if(!isset($_COOKIE['licz_x']) || !isset($_COOKIE['licz_x0']))
  64. {
  65. setcookie('licz_x','x',time()+$timeleft);
  66. setcookie('licz_xO','x',time()+$timeleft);
  67. }
  68.  
  69. print '<table border="0" cellpadding="0" width="" cellspacing="0" bordercolor="#9CACAD" ><tr><td>';
  70. print '<font size=2px>Dzisiaj: ' . $ex[1]; ?> <br><?
  71. print ' Ten miesiąc: ' . $ex[3];?> <br><?
  72. print ' Wszystkich odsłon: ' . $ex[4]; ?> <br><?
  73. }
  74. print ' Gości: '.$ile2;
  75. print ' </font></td></tr></table>';

Czy w tablicy z botami dodać adresy url czy co/?

Ten post edytował Lejto 4.05.2008, 19:31:33
Go to the top of the page
+Quote Post
marcio
post
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Nie rozumiem zabardzo co chcesz robic (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) jesli chodzi o cos anty dodawanie sie do licznika czy cos zapisuj host i ip i potem sprawdzaj (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Pilsener
post
Post #3





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Bez sensu jest używanie eregi do sprawdzenia, czy useragent nie zawiera jakiś tam ciągów - ktoś tak zrobił w czasach Matuzalema a teraz każdy powiela. Po pierwsze jest to mało wydajne, a po drugie - daremne, bo to, co widzimy w user-agencie nie jest gwarancją absolutnie niczego. Kolejna sprawa to wykorzystanie cookies - otóż trudno, aby każdy (a bot w szczególności) akceptował ciastka (a nawet nie sprawdzasz, czy ktoś akceptuje ciastka czy nie).

Praktycznie nie da się zrobić funkcjonalnego i wydajnego licznika na plikach tekstowych. Użyj bazy danych, choćby coś w stylu:
http://forum.php.pl/index.php?showtopic=90582

Jeśli masz problemy z botami to polecam filtry oraz cachowanie.
Go to the top of the page
+Quote Post
Lejto
post
Post #4





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

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


ok, dzięki za link, no ale chce go zabezpieczyć tylko prze botami np. tymi które podałem, mam na początku kodu tablice przeciwko botom ale widocznie wszystkiego nie blokuje
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: 24.08.2025 - 09:48