• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zabezpieczenie przed obciążaniem strony zapytaniami.

Object Storage Arubacloud
+1 głos
180 wizyt
pytanie zadane 19 września 2020 w PHP przez Paweł Barszcz Użytkownik (950 p.)
Cześć,

mam stronę, na której jest dośc mocno obciążający formularz - po jego wysłaniu zwraca duży blok danych - są to ułamki sekund, bo około 30-50ms na zapytanie, lecz wymuszając kliknięcie przycisku wysyłania np. przez jquery x razy - nagle zapytanie wysyłane jest już w sekundach, a czasem powoduję "wywalenie" serwera.

 

Jak się przed takimi "atakami" zabezpieczyć?

Aktualnie mam funkcję, która zapisuje ostatni request przez klienta ( jego IP i czas w time`stampie), następnie przed wykonaniem operacji w PHP sprawdzam, czy różnica między timestampem w bazie a pobranym w momencie zapytania jest mniejsza niż 3 sekundy - jeśli tak - wykonuję akcję.

Czy takie rozwiązanie ma sens? Czy są już istniejące funkcję na ograniczenie requestów przez niechcianych gości?

6 odpowiedzi

+2 głosów
odpowiedź 19 września 2020 przez dayvu Obywatel (1,470 p.)
Jeśli chodzi o IP to też nie zawsze jest stałe, więc może lepiej użyć po prostu sesji?

Osobiście dodałbym blokowanie możliwości klikania na froncie - po wysłaniu formularza przycisk jest wyłączony przez określony czas. Do tego również CSRF token dodawany do formularza. Dobrym przykładem jest implementacja takiego tokenu w Symfony. Jeśli to możliwe to również autoryzacja użytkownika.
+1 głos
odpowiedź 19 września 2020 przez jankustosz1 Nałogowiec (35,880 p.)
Token csrf jest zabezpieczeniem przed bezpośrednim prostackim wysyłaniem reaquestow. Ale to co robisz ma jak najbardziej sens, bo mógłby ktoś w bocie pierwsze wysyłać jakiegoś geta żeby ten token dostać. Minus tylko taki że gdyby wiele komputerów z jednej podsieci korzystało z twojej apki mogliby mieć problem.
+1 głos
odpowiedź 19 września 2020 przez Artek Stary wyjadacz (11,800 p.)
Tyle co wiem to to, że laravel ma takie zabezpieczenia - z danego IP można ustalić aby pozwalał np. tylko 5 razy na minutę strzelać. Ponadto jest też csrf token(w Laravel'u) - co skutkuje tym, że na jedno załadowanie się strony dopuszczalny jest jeden strzał. ewentualnie możesz obczaić lżejszą wersję laravel'a - lumen'a. Co do tego wymuszania - nie do końca rozumiem jak to działa u Ciebie. Masz input type="submit i da się submitować formularz np. 10 razy od razu pod rząd przy pojedynczym załadowaniu strony z formularzem?
+1 głos
odpowiedź 19 września 2020 przez Comandeer Guru (600,810 p.)
A ja bym oprócz zabezpieczenia tego, spróbował ugryźć problem z drugiej strony: jeśli zwracasz jakieś dane, to warto sprawdzić, czy muszą być za każdym razem generowane na nowo. Jeśli nie, to można by zastosować cache, co dodatkowo powinno przyśpieszyć całość.
komentarz 20 września 2020 przez Paweł Barszcz Użytkownik (950 p.)
W przypadku tej strony, taie działąnie nie będzie miało sensu - dane są dynamicznie zmieniane.
+1 głos
odpowiedź 19 września 2020 przez dayvu Obywatel (1,470 p.)
edycja 19 września 2020 przez dayvu
A może by tak użyć po prostu Google reCAPTCHA do weryfikowania zapytania użytkownika? Jako zabezpieczenie przed botami. Wyeliminuje to konieczność dodatkowych customowych walidacji po IP i czasie
komentarz 20 września 2020 przez Artek Stary wyjadacz (11,800 p.)
Aktualnie działa to w ten sposób, że użytkownik praktycznie w żaden sposób nie odczuwa tego zabezpieczenia. Nie musi wypełniać żadnych testów. Jest naprawdę spoko.  Najlepiej zrobić kombinację omawianych sposobów.
0 głosów
odpowiedź 20 września 2020 przez Paweł Barszcz Użytkownik (950 p.)
Rozwiązałem to w ten sposób, że zapisuje do bazy tylko 5 rekordów z danego IP, jeśli średnia tych rekordów będzie mniejsza lub równa od obecnego timestamp`a wtedy stwierdzam, że ktoś na siłę wywołuje requesty, aby zwalić serwer - proste rozwiązanie, a testując je - działa tak jak chciałem.

Podobne pytania

0 głosów
1 odpowiedź 313 wizyt
pytanie zadane 11 grudnia 2021 w PHP przez Bakkit Dyskutant (7,600 p.)
0 głosów
2 odpowiedzi 176 wizyt
pytanie zadane 23 grudnia 2015 w PHP przez Paweł123 Nałogowiec (33,500 p.)
+1 głos
1 odpowiedź 169 wizyt

92,551 zapytań

141,399 odpowiedzi

319,529 komentarzy

61,937 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...