Atak botów na sklep internetowy – jak zabezpieczyłem 10 sklepów

person list Dziennik pracy Czas czytania: 5 min
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

Captcha
Niedziela Poniedziałek Wtorek Środa Czwartek Piątek Sobota Styczeń Luty Marzec Kwiecień Maj Czerwiec Lipiec Sierpień Wrzesień Październik Listopad Grudzień