その方法は、セッションにカウンターを保存し、そのカウンターを使用して、1 回あたりの呼び出しが多すぎるのを防ぐことです。
ただし、ユーザーがそれを回避して毎回異なる Cookie を送信しようとする可能性がある場合*、セッションのように機能するが、ユーザーを Cookie ではなく IP に接続するカスタム テーブルを作成する必要があります。
ここでもう 1 つ、IP で基本をブロックすると、プロキシから出てくる会社全体がブロックされる可能性があります。したがって、最後の正しい方法はより複雑ですが、ip と cookie の両方をユーザーに接続し、ブラウザが cookie を許可するかどうかを知ることです。そうでない場合は、IPでブロックします。ここで難しいのは、Cookie について知ることです。すべての呼び出しで、既存のセッションに接続されている有効な Cookie を送信するように強制できます。そうでない場合、ブラウザには Cookie がありませんでした。
[ * ] Cookie はセッションに関連付けられています。
[ * ] 新しいテーブルを作成してカウンターを保持し、セッションから切断することで、セッション ロックを回避することもできます。
過去に DosAttack に使用されるコードを使用していましたが、多くのプールと難しいアプリケーションがある場合はどれもうまく機能しないため、説明したようにカスタム テーブルを使用するようになりました。これは私がテストして使用した2つのコードです
Web アプリでの Dos 攻撃
asp.net で Dos 攻撃を簡単にブロック
テーブルに保存された 1 秒あたりのクリック数を見つける方法。これは、1 秒あたりのクリック数を計算する SQL の一部です。トリックの 1 つは、クリックを追加し続け、最後のチェックから 6 秒以上ある場合に平均を計算することです。これはアイデアとして計算から切り出したコードです
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 cLiveUsersID=@cLiveUsersID
ELSE IF @cMilSecDif > 16000
UPDATE ATMP_LiveUserInfo SET cDos_TotalCalls = (cDos_TotalCalls / 2),
cDos_TotalCallsChecksOn = DATEADD(millisecond, @cMilSecDif / 2, cDos_TotalCallsChecksOn)
WHERE cLiveUsersID=@cLiveUsersID