Przejdź do treści

Shoper: „Zostałeś zablokowany”. Blokada IP sklepu i panelu po serii zapytań

Zamiast sklepu i panelu krótka strona z napisem „Zostałeś zablokowany”, tylko z jednego adresu IP. W dwóch sklepach na Shoperze blokadę wywołały serie zapytań: odpytanie kilkunastu adresów panelu, z których większość nie istniała, i szybkie pobieranie stron listingu. Opisuję zaobserwowany zasięg blokad, co zrobić od razu i zasady pracy z panelem i stronami sklepu, które od tej pory stosujemy, żeby ryzyko blokady zmniejszyć.

W skrócie

Web API ma jawne limity i kod 429 z informacją, kiedy ponowić. Panel i strony sklepu takich limitów nie podają, a w obu opisanych przypadkach seria zapytań, która wyglądała na skanowanie albo masowe pobieranie, skończyła się blokadą adresu IP na kilka godzin. Skrypty, które muszą korzystać z panelu albo stron, warto pisać tak, żeby obchodziły się z nimi jak człowiek.

Dwie zaobserwowane blokady IP w sklepach na Shoperze
Sklep ASklep B
Wyzwalacz17 zgadywanych adresów w panelu w krótkim czasie, większość z odpowiedzią 404około 270 pobrań stron listingu jedno po drugim
Zablokowanepanel i sklep z tego adresu IPpanel i sklep z tego adresu IP
Web APIdziałało (odczyt z kodem 200)według notatek przestało działać
Czasokoło 4 godzindwie blokady w jednej sesji, druga około 4 godzin
01

Objaw: „Zostałeś zablokowany” tylko z jednego adresu

Tę samą krótką odpowiedź dostaje przeglądarka i skrypt. W jednym ze sklepów odpowiedź miała 84 bajty, w drugim przychodziła z kodem 200, więc skrypt, który patrzy tylko na kod odpowiedzi, uzna ją za poprawną stronę. Zmiana nagłówka User-Agent nic nie daje, bo blokada dotyczy adresu IP, a nie tego, jak przedstawia się klient.

Z innego adresu sklep może działać normalnie. W sklepie A sprawdzenie z innej sieci zaplanowaliśmy, ale go nie wykonaliśmy; notatki mówią tylko, że sklep działał dla klientów. Tego, czy blokada obejmuje innych odwiedzających, nie da się więc stwierdzić z zablokowanej maszyny.

02

Co wywołało blokadę w dwóch sklepach

W sklepie A skrypt szukał w panelu miejsca na własny kod w nagłówku strony i w krótkim czasie odpytał 17 adresów panelu zgadywanych z nazw. Większość zwróciła 404. Dla zabezpieczenia to dokładnie wzorzec skanowania w poszukiwaniu luk, więc adres został zablokowany.

W sklepie B przyczyną była liczba pobrań: około 270 stron listingu, po kilkaset kilobajtów każda, jedna po drugiej. Zapisy przez Web API w tym samym sklepie nigdy blokady nie wywołały.

Shoper nie publikuje progów tego zabezpieczenia, a infolinia nie potrafiła ich podać ani sprawdzić stanu blokady. Z dwóch przypadków wynika tylko tyle, że blokadę wywołuje zarówno wzorzec (zgadywanie adresów z wieloma błędami 404), jak i sama liczba szybkich pobrań stron.

03

Panel i strony a Web API: zaobserwowany zasięg blokad

Web API ma jawne limity. Odpowiedzi niosą nagłówki z limitem i bieżącym zużyciem, a po przekroczeniu przychodzi kod 429 z informacją, po ilu sekundach ponowić. Opisuje to tabela na stronie o integracjach przez Shoper API. Odpowiedzi panelu i stron sklepu, które widzieliśmy, nie miały nagłówków limitu ani informacji o ponowieniu, więc o przekroczeniu dowiadywaliśmy się dopiero z blokady.

Zasięg blokad był różny: w sklepie A blokada objęła panel i strony, a API z tego samego adresu działało; w sklepie B według notatek zatrzymało się też API. Dwa przypadki nie wystarczą, żeby opisać, jak zabezpieczenie Shopera jest zbudowane, więc nie warto zakładać, że API zawsze zostaje dostępne.

04

Co zrobić, gdy blokada już jest

  • zatrzymaj wszystkie zapytania do panelu i stron sklepu z tego adresu, łącznie ze sprawdzaniem, czy blokada już minęła; w sklepie A przerwaliśmy je od razu jako środek ostrożności, bez dowodu, że kolejne zapytania przedłużają blokadę
  • sprawdź sklep z innej sieci, żeby wiedzieć, czy problem dotyczy klientów
  • jeśli Web API działa, pilne prace rób przez API
  • w obu sklepach blokada trwała około czterech godzin; w jednym z przypadków pracę można było wznowić po zmianie sieci
05

Jak pracować, żeby blokady nie dostać

  • w panelu nie odpytuj adresów, których istnienia nie znasz: przechodź po linkach z samego panelu, a adresy potrzebne skryptowi bierz z ruchu sieciowego przeglądarki
  • strony sklepu pobieraj wolno: w sklepie B przyjęliśmy najwyżej około 60 pobrań na sesję z przerwą 2–3 s
  • dane do analizy pobieraj raz do pliku i pracuj na pliku, zamiast odpytywać sklep ponownie
  • dane katalogu bierz z Web API, a nie ze stron: w sklepie A po wcześniejszej blokadzie API odpytujemy w tempie 3 zapytań na sekundę, mimo że nagłówek limitu pozwala na więcej
  • w skrypcie traktuj odpowiedź z napisem „Zostałeś zablokowany” jako błąd i zatrzymuj pracę, nawet jeśli kod odpowiedzi to 200
06

Kiedy poradzisz sobie sam, a kiedy z kimś

Sam

Jednorazowe pobranie danych przez Web API z przestrzeganiem limitów i krótka praca w panelu przez przeglądarkę. Przy blokadzie: przerwa, sprawdzenie z innej sieci i praca przez API, jeśli działa.

Z kimś, kto to robił

Regularne automaty, które pobierają strony sklepu albo działają w panelu, masowe analizy katalogu i procesy, które muszą działać w nocy bez nadzoru.

Gdy zlecasz nam automatyzację w Shoperze, dostajesz proces oparty na Web API z kontrolą limitów, pobieranie stron tylko tam, gdzie API nie wystarcza, w ograniczonym tempie, oraz zatrzymanie pracy przy pierwszym sygnale blokady. To zmniejsza ryzyko blokady, ale go nie wyklucza. Więcej o pracy przez Shoper API i w przeglądzie najczęstszych błędów Shoper API.

FAQ: blokada IP w Shoperze

Że zabezpieczenie platformy zablokowało Twój adres IP po serii zapytań, które wyglądały na skanowanie albo masowe pobieranie. Blokada dotyczy adresu, nie przeglądarki, więc zmiana User-Agent nie pomaga. Z innej sieci sklep zwykle działa.
W naszych przypadkach: szybkie odpytanie kilkunastu adresów panelu, z których większość zwróciła 404, oraz około 270 pobrań stron listingu jedno po drugim. Shoper nie publikuje progów tego zabezpieczenia.
W jednym sklepie Web API z tego samego adresu działało normalnie, w drugim według notatek przestało. Nie warto zakładać, że API zawsze zostaje dostępne.
W naszych przypadkach około czterech godzin. Zatrzymanie skryptów i niesprawdzanie co chwilę, czy blokada minęła, to rozsądna ostrożność; nie mamy dowodu, że kolejne zapytania ją przedłużają.
Dane katalogu pobieraj przez Web API z kontrolą limitów, w panelu przechodź tylko po linkach, bez odpytywania nieznanych adresów, a strony sklepu pobieraj wolno, z przerwą kilku sekund, i raz do pliku. Odpowiedź z napisem o blokadzie traktuj jako błąd, nawet z kodem 200.