Autor Zpráva
Sylar
Profil
Zdravím,
pro detekci robotů mám na stránce tabulku s jejich jmény a při přístupu kohokoliv na stránku kontroluji v USER_AGENTovi zda-li neobsahuje jméno nějakého robota z databázové tabulky, to funguje. Problém je když mi přijde robot, který se ohlásí takto
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
Protože tento uživatel za 1 minutu navštíví všechny stránky na webu, je mi jasné, že to není běžný uživatel ale robot.
Je ale možné tyto roboty vůbec detekovat? Jak?
Chro
Profil
Jedině provedením analýzy ze záznamů. Když user agent vázaný na určitou IP navštíví rychle po sobě několik různých stránek a doba setrvání na každé konkrétní stránce bude menší jak 2 (3?) sekundy, může to být robot.
Jenicek
Profil
co udělat zpětnou vazbu na IP?
například ping IP + port 3306 (mysql)...

zapsáním do tabulek a regulaci bych udělal podobně jak píše Chro...
Sylar
Profil
Chro:
jj takové řešení už mě také napadlo, ale nepřijde mi úplně efektivní. Zase bych nerad aby kontrola robota/uživatele trvala déle než načtení celé stránky.
Jenicek
Profil
ping port trvá sotva sekundu :)
a ip by sis mohl zapisovat do statistik tak by se ping prováděl jen 1x a pouze pokud by se pohyboval "rychle" po webu :)


$pinkam = fsockopen("$ip", 3306, $errno, $errstr, 1);
if (!$pinkam)echo"nejsem robot, hurá :D";
samotná operace neexistujícího portu i neexistující IP trvá cca 0.3s ale můžeš to ještě omezit timeoutem... :-)
had
Profil *
co když by někdo zobrazil Váš web ze serveru s veřejnou IP adresou...? Nebo poskytovatel internetu bude provozovat mysql databázi na hlavním serveru, přes který dostanu přidělenou IP když jdu na internet??? odradíte zbytečně návštěvníka... jestli vám jde o ochranu formulářů před spamem, máme tu zaručené kalibry...
Sylar
Profil
tak i web lze načíst za sekundu :) ale rozumím. Ještě tedy zůstává otázkou co znamená "procházet web rychle", protože když nyní koukám do statistik, naražím na roboty, kteří se po stránce pohybují 5 sec./stránka, což už není zase tak krátký interval a může to být i uživatel. Nicméně vychází mi, že je asi lepší spíše uživatele do statistik nezapočítat v domění, že jde o robota, než-li započítat robota, protože vzhledem k tomu, že sleduji i pohyb uživatele/robota po stránce, tak robot (většinou) navšítí více stránek a tím pádem udělá ve statistice i větší nepořádek.

had:
odradíte zbytečně návštěvníka...
já ale přeci neplánuji bránit robotovi či návštěvníkovi přístup na web nebo komukoliv znepříjemňovat pobyt, pouze chci zjistit o koho se jedná, abych mohl vést co nejpřesnější statistiky.
Ohledně IP adres je pravda co říkáte, i s IP adresami může být kříž, proto mne také zajímá jestli jsou ještě nějaké další, lepší možnosti.
ShiraNai7
Profil
Sylar:
Můžeš zaznamenávat IP adresu a User-Agenta. Základní detekci provedeš pomocí User-Agenta. Pokud se nejedná o známého robota (User-Agent se nechytne), můžeš robota detekovat na základě počtu požadavků za určitý čas. 100% to samozřejmě není. Udělat robota co bude procházet více stránek najednou napřeskáčku není vůbec problém.. potom by požadavky nebyly dost časté na spolehlivou detekci.


Jenicek:
$pinkam = fsockopen("$ip", 3306, $errno, $errstr, 1);
if (!$pinkam)echo"nejsem robot, hurá :D";

Proč by robot na své IP provozoval MySQL server přístupný z internetu a ještě na výchozím portu? Nesmysl.
Marek88
Profil
Další možnost je pomocí javascriptu. Roboti ho snad všichni nemají a uživatelé naopak ano. Po načtení stránky JS odešle požadavek na server, kde se zaznamená, že daný návštěvník není robot.
Jenicek
Profil
ShiraNai7:
Proč by robot na své IP provozoval MySQL
to byl jen příklad... klidně může sledovat jiný port... :)
(21, 22, 443, 990... atd)

napadá mě ještě, monitorovat stažení robots.txt
ShiraNai7
Profil
Jenicek:
Robot nemá důvod mít otevřený žádný port na své IP. Proč by to někdo dělal? Na základě tohodle nic nepoznáš. I kdyby tam něco bylo tak to nepoukazuje na robota. Můžou tam být nějaké služby routeru, forwardnuté porty, atd.

napadá mě ještě, monitorovat stažení robots.txt
No "oficialni" roboti ho snad stahovat budou. Ostatni - napr. spamboti ani omylem :)
Sylar
Profil
Marek88:
spíše než kontrolovat dostupnost JS, mne napadá na začátek stránky umístit skrytý odkaz, který by viděli pouze roboti a po kliknutí na něj by se infrormace o robotovi zapsala do databáze. Pouze nevím jak přesně se chová robot když vejde na stránku, začne klikat na všechny odkazy od prvního po poslední nebo jak se mu zachce? Dále by mne zajímalo jak je to s indexací stránky, pokud bude stránka /test/ automaticky přesměrovávat na /home/ zaindexuje si robot /test/ nebo rovnou až /home/ ? Pokud by si totiž zaindexoval /test/ mohli by na tuto stránku, která by na naší stránce byla přístupná pouze robotům a detekovala by je, přes vyhledávače vstoupit i reální uživatelé a vše by přišlo vniveč.

napadá mě ještě, monitorovat stažení robots.txt
... napadlo mne to samé jak píše ShiraNai7. Seznam, google, ostatní na robots.txt dle mého bohužel kašlou
Marek88
Profil
Sylar:
mne napadá na začátek stránky umístit skrytý odkaz, který by viděli pouze roboti a po kliknutí na něj by se infrormace o robotovi zapsala do databáze
Možné to je, ale připadá mi, že se spoléháš na to, že každý robot je vyhledávač, který chce zaindexovat celý tvůj web a navíc pěkně postupně. Co když se na tu stránku robot jednou podívá, zjistí, že tam nic není a příště už tam nepůjde (přijde z jiné IP a ty ho nepoznáš).

Nebo to bude robot se speciální funkcí. Třeba kamarád psal robota na zakázku pro jeden eshop. Ten robot obcházel konkurenční eshopy a hledal nové zboží a změny cen (a možná ještě něco dalšího). Přitom procházel adresy, které měl uložené a "klikal" jen na odkazy, které odpovídaly novým produktům. Takového robota bys taky nepoznal.

Ten JS se mi jeví jako nejspolehlivější.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0