Droga jest przechowywanie na sesji licznik i korzystać z licznika, aby zapobiec zbyt wiele połączeń na raz.
Ale jeśli użytkownik może spróbować tego uniknąć i wysłać za każdym razem inny plik cookie *, musisz utworzyć niestandardową tabelę, która będzie działać tak samo jak sesja, ale połączyć użytkownika z adresem IP, a nie z plikiem cookie.
Jedną z nich jest to, że jeśli zablokujesz podstawowe ustawienia IP, możesz zablokować całą firmę, która wychodzi z serwera proxy. Ostatecznym, poprawnym sposobem, ale bardziej skomplikowanym, jest posiadanie zarówno adresu IP jak i pliku cookie połączonego z użytkownikiem i sprawdzanie, czy przeglądarka zezwala na cookie, czy nie. Jeśli nie, to blokujesz przy pomocy ip. Trudną częścią jest wiedzieć o cookie. Cóż za każde połączenie można zmusić go do wysłania ważnego pliku cookie, który jest połączony z istniejącą sesją. Jeśli nie, przeglądarka nie ma plików cookie.
[*] Pliki cookie są powiązane z sesją.
[*] Wykonując nową tabelę, aby zachować liczniki i rozłączyć się z sesją, można również uniknąć blokady sesji.
W przeszłości używam kodu, który był używany dla DosAttack, ale żaden z nich nie działa dobrze, gdy masz wiele basenów i trudną aplikację, więc teraz używam niestandardowej tabeli, jak to opisuję. To są dwa, że kod mam test i używać
Dos attacks in your web app
Block Dos attacks easily on asp.net
Jak znaleźć kliknięć na sekundę zapisanych na stole. Oto część mojego SQL, która oblicza liczbę kliknięć na sekundę. Jedną z tych sztuczek jest to, że nadal dodajemy kliknięcia i obliczam średnią, jeśli mam 6 lub więcej sekund od ostatniego sprawdzenia. Jest to kod wycięte z obliczeń jako idea
set @cDos_TotalCalls = @cDos_TotalCalls + @NewCallsCounter
SET @cMilSecDif = ABS(DATEDIFF(millisecond, @FirstDate, @UtpNow))
-- I left 6sec diferent to make the calculation
IF @cMilSecDif > 6000
SET @cClickPerSeconds = (@cDos_TotalCalls * 1000/@cMilSecDif)
else
SET @cClickPerSeconds = 0
IF @cMilSecDif > 30000
UPDATE ATMP_LiveUserInfo SET cDos_TotalCalls = @NewCallsCounter, cDos_TotalCallsChecksOn = @UtpNow WHERE [email protected]
ELSE IF @cMilSecDif > 16000
UPDATE ATMP_LiveUserInfo SET cDos_TotalCalls = (cDos_TotalCalls/2),
cDos_TotalCallsChecksOn = DATEADD(millisecond, @cMilSecDif/2, cDos_TotalCallsChecksOn)
WHERE [email protected]
innym pomysłem, Aktualizowanie sesji tego użytkownika: –
przypuszczam masz jakieś "luzem "dodać metodę? – Phil
Tak, jest ... –