• 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.

Cloud VPS
+1 głos
345 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 (37,000 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 (607,100 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ź 521 wizyt
pytanie zadane 11 grudnia 2021 w PHP przez Bakkit Dyskutant (7,600 p.)
0 głosów
2 odpowiedzi 221 wizyt
pytanie zadane 23 grudnia 2015 w PHP przez Paweł123 Nałogowiec (33,540 p.)
+1 głos
1 odpowiedź 240 wizyt

93,487 zapytań

142,423 odpowiedzi

322,773 komentarzy

62,909 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

Kursy INF.02 i INF.03
...