Atak botów na sklep internetowy – jak zabezpieczyłem 10 sklepów
Ponad milion zapytań na dobę, strony ładujące się po 19 sekund i błędy przy zamówieniach. Tak boty atakują sklepy internetowe i tak zatrzymałem je w 10 sklepach.
Od kilku tygodni dostaję bardzo podobne wiadomości. Sklep nagle zwalnia, w panelu wyskakują błędy, hosting przysyła ostrzeżenia o przekroczonych limitach, a w statystykach nie przybywa ani jednego klienta. Za każdym razem winowajca jest ten sam: boty. Do dziś zabezpieczyłem przed nimi 10 sklepów internetowych. Opowiem, co się dzieje i co robię. Bez zdradzania dokładnego przepisu, bo ten przydałby się głównie samym botom.
Co się właściwie dzieje
Boty uderzają w filtry produktów, czyli w to, czego klient używa, gdy zawęża listę po marce, cenie czy kolorze. Dla sklepu to najcięższa operacja: przy każdym kliknięciu musi od nowa przeliczyć listę produktów. Gdy takich „kliknięć” są setki na sekundę, serwer przestaje nadążać.
Skala bywa ogromna. W jednym ze sklepów naliczyłem ponad milion zapytań na dobę z kilkuset tysięcy różnych adresów IP. Prawie 99% całego ruchu to były boty. Każdy adres wchodzi tylko kilkadziesiąt razy i udaje zwykłą przeglądarkę, więc klasyczne blokowanie adresów IP nic tu nie daje.
Skutki widzi już właściciel sklepu:
- strona kategorii z filtrem ładowała się nawet 19 sekund,
- baza danych odmawiała połączeń, więc błędy dostawali też prawdziwi klienci,
- synchronizacja zamówień z zewnętrznymi systemami gubiła się i działała z opóźnieniem,
- logi serwera rosły o setki megabajtów dziennie.
Boty, które szukają dziur
Część botów nie tylko obciąża sklep, ale też sprawdza, czy przez dziurawe moduły da się wejść do środka. W kilku sklepach znalazłem ślady takich prób, a w niektórych także zostawione tylne furtki. Posprzątałem je, zaktualizowałem dziurawy moduł, zmieniłem hasła i zamknąłem drogę, którą weszli. O podobnym przypadku pisałem już w tekście o wirusie z fałszywym formularzem karty.
Co robię, żeby to zatrzymać
- Najpierw diagnoza, nie zgadywanie. Przeglądam logi serwera: kto wchodzi, ile razy, skąd i na jakie adresy. Dopiero na tej podstawie dobieram zabezpieczenie.
- Odcinam ruch, który nie zachowuje się jak klient. Prawdziwy klient zanim kliknie filtr, ogląda sklep. Bot od razu strzela w filtry. Takie wejścia zatrzymuję, zanim w ogóle dotrą do sklepu, a odpowiedź kosztuje serwer kilka bajtów zamiast setek kilobajtów.
- Porządkuję adresy dla Google. Strony filtrów wyłączam z indeksowania, żeby wyszukiwarka nie marnowała na nie czasu.
- Łatam dziury. Aktualizuję moduły, przez które boty próbowały się dostać, usuwam furtki i sprawdzam konta w panelu.
- Zabezpieczam cały serwer naraz. Gdy na jednym hostingu stoi kilka sklepów i stron, boty z jednej strony spowalniają pozostałe. Wtedy chronię wszystkie jednocześnie, a ruch z regionów, z których klienci tych sklepów nie przychodzą, zatrzymuję wcześniej.
- Dbam o formularze. Na spam w formularzach kontaktowych przygotowałem własne zabezpieczenie: puzzle do przeciągnięcia i niewidoczne pułapki na boty. Bez zewnętrznych usług i bez wysyłania danych klientów do Google.
Żeby nie wylać dziecka z kąpielą
Najłatwiej zablokować wszystko. Tylko że wtedy razem z botami odcina się klientów i Google. W hurtowni elektrycznej zastałem blokadę „tylko polskie adresy”, którą ktoś założył wcześniej. Zatrzymywała boty, ale też robota Google, który przychodzi głównie z USA. Przez około trzy miesiące wyszukiwarka praktycznie nie mogła indeksować sklepu. Zdjąłem ją i oparłem ochronę na zabezpieczeniach serwera.
Dlatego każde zabezpieczenie sprawdzam z perspektywy nowego klienta, który wchodzi do sklepu pierwszy raz, i z perspektywy Google. W jednym sklepie po włączeniu przyspieszania stron wyszło, że nowy klient nie mógł skorzystać z filtrów. Wyłapałem to następnego dnia i poprawiłem.
Efekty
- bot dostaje odpowiedź w 0,04 sekundy i nie dociera do sklepu,
- strona z filtrem zamiast 19 sekund ładuje się w około 3 sekundy, a z pamięci podręcznej jeszcze szybciej,
- błędy bazy danych spadły do zera kilka minut po wdrożeniu,
- zamiast około 1,4 GB odpowiedzi na dobę serwer wysyła botom niecałe 5 MB,
- klienci i Google nie widzą żadnej różnicy, poza tym, że sklep znowu działa szybko.
Komu już pomogłem
Do dziś zabezpieczyłem przed botami 10 sklepów z różnych branż:
- perfumeria internetowa,
- sklep z biżuterią,
- sklep z obrusami i tekstyliami domowymi,
- sklep z dekoracjami wnętrz,
- sklep z rękodziełem,
- hurtownia elektryczna,
- sklep z nożami,
- sklep zoologiczny,
- sklep z drzwiami zewnętrznymi,
- sklep z częściami samochodowymi.
Większość z nich działa na PrestaShop, ale ten sam rodzaj ataku dotyka każdego sklepu z filtrami produktów.
Jak rozpoznać, że boty atakują Twój sklep
- sklep zwalnia, choć liczba zamówień się nie zmieniła,
- w panelu pojawia się błąd 500 albo komunikat o zbyt wielu połączeniach z bazą,
- hosting pisze o przekroczonych limitach,
- integracje gubią zamówienia albo pobierają je z opóźnieniem,
- w statystykach serwera widać tysiące wejść na adresy filtrów.
Widzisz u siebie te objawy? Napisz do mnie. Zacznę od przejrzenia logów i powiem, co się dzieje, zanim cokolwiek zmienię.
Najczęstsze pytania
Czy blokowanie botów nie zaszkodzi pozycjom w Google?
Nie, jeśli zrobi się to z głową. Google ma dalej pełny dostęp do sklepu. Z indeksu wypadają tylko adresy filtrów, których i tak nie powinno tam być.
Czy klienci odczują zabezpieczenie?
Nie. Klient przegląda sklep i korzysta z filtrów jak wcześniej. Zatrzymywane są tylko wejścia, które nie zachowują się jak człowiek.
Czy nie wystarczy zablokować adresów IP?
Przy tych atakach nie. Boty korzystają z setek tysięcy adresów, a każdy wchodzi tylko kilkadziesiąt razy. Lista blokad rosłaby szybciej, niż da się ją prowadzić.
Czy zabezpieczenie zostaje na stałe?
Tak, ale sprawdzam je po każdej większej zmianie w sklepie, na przykład po włączeniu pamięci podręcznej. Jedna zmiana potrafi niechcący odciąć klientów, dlatego testuję sklep oczami nowego klienta.
Get notified about new articles
Subscribe by e-mail or turn on browser notifications — we only send new blog posts, nothing else.


Komentarze
Brak komentarzy
Napisz komentarz