Pondělí ráno. E-shop v neděli dvakrát spadl, přístupový log ukazuje tři adresy, z nichž každá si vyžádala osmdesát tisíc stránek, a vy je na serveru zablokujete. Klid. V úterý je tu čtyřicet nových adres, které dělají přesně totéž.
Blokovat podle adresy je první reakce každého a ta, která vydrží nejkratší dobu. Ne proto, že by to byl špatný nápad, ale protože problém není v tom, kdo se ptá, ale kolik se ptá. A to se měří, ne hádá.
Proč blokování adres nikdy nekončí?
Robot, který prochází váš katalog, nepřichází z jedné adresy: přichází ze sítě, nebo z několika, a střídá je. Když jednu odříznete, bez zaváhání pokračuje z další. Se jmény je to stejné: tváří se jako běžný prohlížeč, každý týden mění identitu a každý měsíc se objeví tři noví. Seznam blokací roste a zátěž neklesá.
Co zamaskovat nedokážou, je tempo. Člověk, který nakupuje, otevře kategorii, zaškrtne dva filtry, otočí jednu stránku a jde na detail produktu: tři čtyři drahá hledání za celou návštěvu. Robot jich udělá tři čtyři za sekundu, z každé adresy, kterou používá. Když spočítáte, kolik drahých hledání udělá každý zdroj za minutu, obojí rozlišíte, aniž byste potřebovali znát jména.
Co je omezení počtu požadavků na IP a proč i na síť?
Omezit na IP znamená nastavit strop: kolik požadavků e-shop přijme ze stejné adresy během časového okna – obvykle šedesáti sekund. Pod stropem projde všechno; nad ním dostane požadavek „vraťte se za chvíli“, jehož obsloužení nic nestojí.
Jen s tímhle zůstane robot, který si práci rozdělí mezi dvě stě adres stejné sítě, pod stropem u každé z nich. Proto je druhý limit na síť: adresy, které sdílejí první tři bloky (technik by řekl /24), se počítají dohromady. Mobilní operátor může vypadat podobně, takže tento strop je výš než strop na adresu, ale střídání přestane být zadarmo. A třetí brzda, na celý e-shop, funguje jako nouzový limit: když celkový počet hledání za minutu překročí, co váš server pohodlně zvládne, projdou jen návštěvníci, kteří už prokázali, že jsou lidé.
Kam limit patří: na server, nebo do e-shopu?
Počítat se dá na třech místech a každé vidí něco jiného.
- V CDN (například pravidla rate limiting v Cloudflare). Počítá podle adresy a vzoru URL. Neví, který požadavek je drahý a který je obrázek, neví, jestli je návštěvník přihlášený, a s Googlebotem zachází jako s kýmkoli jiným. Na odpolední špičku to funguje; žít se tak ale nedá, buď přibrzdíte zákazníky víc, než je potřeba, nebo boty méně.
- Na webovém serveru (moduly pro omezení požadavků v Apache nebo nginx, nebo fail2ban, který čte log). Počítá všechno, co přijde, včetně CSS a fotek, takže strop musí být tak vysoko, že skoro nebrzdí. A abyste na něj mohli sáhnout, musíte umět spravovat server, což na sdíleném hostingu ani nejde.
- Přímo v e-shopu, dřív, než PrestaShop začne hledat. Je to jediné místo, které ví, co je drahé: filtrované hledání, vyhledávací pole, stránka výpisu, změna řazení. Jen to se do limitu počítá. Ví, jestli je návštěvník přihlášený – a pak ho neomezuje –, a umí ověřit, jestli ten, kdo tvrdí, že je Googlebot, jím opravdu je. Právě tam ho dává Ochrana proti botům pro PrestaShop, a proto může být limit nízký, aniž by obtěžoval kohokoli, kdo nakupuje.
Jak pustit dovnitř Google?
Tohle je obava, která většinu lidí brzdí, a oprávněně: špatně nastavený limit vás z Googlu vymaže sám. Odpovědí není seznam jmen, protože za Googlebota se může vydávat kdokoli: je to dotaz na síť. Každý požadavek, který tvrdí, že přichází od Googlu, se ověří zpětným dotazem DNS, a pokud adresa Googlu nepatří, požadavek od Googlu není, ať tvrdí cokoli.
Ověřené vyhledávače přicházejí s vlastní kvótou, oddělenou od návštěvníků, a stránky filtrů dostávají označené jako neindexovatelné. Přesně to Google doporučuje pro fasetovou navigaci: kombinace filtrů se nemají měnit v tisíce opakovaných stránek. Jakmile na ně přestanete plýtvat jeho časem, začne lépe procházet ty, na kterých vám záleží.
Co se stane, když někdo limit překročí?
Skript dostane „příliš mnoho požadavků“ s časem, kdy se smí vrátit, a vaši databázi to nic nestojí. Limit na adresu má ale jeden nepříjemný případ: kancelář se třiceti lidmi za jedním připojením, nebo zákazník, který filtruje hodně rychle. Ty není potřeba vyhazovat: je potřeba ověřit, že jsou to lidé.
Ověření, které funguje, je to, které nikdo nevidí. Proof of work – malý výpočet, který prohlížeč sám vyřeší za milisekundy, bez hádanek a zaškrtávacích políček – a propustka na jednu hodinu. Propustka neosvobozuje úplně, protože vyřešit ten výpočet je levné i pro skript: kdo ji má, má pořád strop na adresu, jen desetkrát vyšší.
Čísla na začátek
S oknem šedesáti sekund pokryje třicet drahých hledání na adresu, devadesát na síť a šest set na celý e-shop drtivou většinu e-shopů, aniž by si kterýkoli zákazník čehokoli všiml. Rychlý zákazník jich udělá dvacet za minutu; třicet už je někdo, kdo se nedívá, co filtruje.
Pokud tomu ještě nevěříte, existuje režim pozorování: limit sleduje a zaznamenává, co by zastavil, ale pustí všechno. Týden takhle a panel vám řekne, kolik požadavků by zůstalo za dveřmi a odkud přišly, a vy rozhodnete na základě dat.
Jak poznat, že je limit nastavený správně?
Limit, který se neměří, je limit, který jednoho dne obtěžuje zákazníka, aniž byste o tom věděli. Každý týden se vyplatí sledovat tři věci: kolik drahých hledání se obsloužilo a kolik zastavilo, které zdroje se zastavovaly nejčastěji a proč, a jestli mezi nimi není někdo váš – monitoring dostupnosti, feed pro srovnávač cen, zákazník, který si stěžoval. Ten dostane kliknutím důvěru a už se nikdy nepočítá.
A na pochybnosti je tu kontrola: vložíte adresu a prohlížeč z logu a stránku, o kterou žádal, a ona vám přesně řekne, co by s tím požadavkem teď udělala a proč. Tak se dá na limit sáhnout, aniž byste na něj sahali naslepo.
To vše – tři stropy, odraz přes cookie, Google ověřený přes DNS, neviditelné ověření, režim pozorování a panel s kontrolou – dělá Ochrana proti botům pro PrestaShop od minuty, kdy ji nainstalujete, na PrestaShopu 1.7.6 až 9 i za Cloudflare. A pokud chcete nejdřív vědět, jestli je to váš problém, pošlete nám přístupový log ze špatného dne přes kontaktní formulář: zdarma vám řekneme, kolik z těch požadavků jsou lidé a kolik šum.