可能な/部分的な重複:
スパムやブルート フォース攻撃を減らすために、Web アプリケーションの移動時間ウィンドウ レート制限アルゴリズムを実装する最良の方法を探しています。
使用例は、「過去 5 分間に特定の IP から失敗したログイン試行の最大数」、「過去 N 分間の (投稿/投票/その他...) の最大数」です。
X分ごとに統計をハードリセットする(twitter apiのように)よりも、移動時間ウィンドウアルゴリズムを使用したいと思います。
これは、C#/ASP.Net アプリ用です。
可能な/部分的な重複:
スパムやブルート フォース攻撃を減らすために、Web アプリケーションの移動時間ウィンドウ レート制限アルゴリズムを実装する最良の方法を探しています。
使用例は、「過去 5 分間に特定の IP から失敗したログイン試行の最大数」、「過去 N 分間の (投稿/投票/その他...) の最大数」です。
X分ごとに統計をハードリセットする(twitter apiのように)よりも、移動時間ウィンドウアルゴリズムを使用したいと思います。
これは、C#/ASP.Net アプリ用です。
この種のレート制限には、Token Bucketの方が優れたアルゴリズムであることがわかりました。ルーター/スイッチで広く使用されているため、運用担当者はこの概念に精通しています。
memcachedのような高速なメモリーベースのハッシュテーブルを使用します。キーは制限するターゲット (IP など) になり、保存された各値の有効期限は最大制限時間になります。
各キーに保存された値には、アクションの実行で行われた最後の N 回の試行のシリアル化されたリストと、各試行の時間が含まれます。
この問題に対するより「現代的な」回答を追加するだけです。
NuGetでも利用できます。
実装には 1 分ほどしかかからず、高度なカスタマイズが可能です。
config.MessageHandlers.Add(new ThrottlingHandler()
{
Policy = new ThrottlePolicy(perSecond: 1, perMinute: 30, perHour: 500, perDay:2000)
{
IpThrottling = true,
ClientThrottling = true,
EndpointThrottling = true
},
Repository = new CacheRepository()
});
このページは興味深い読み物であることがわかります。
http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx
注目すべきセクションは次のように始まります。
サービス拒否 (DOS) 攻撃を防ぐ
Web サービスはハッカーにとって最も魅力的なターゲットです。就学前のハッカーでさえ、高価な作業を行う Web サービスを繰り返し呼び出してサーバーをダウンさせることができるからです。
編集:ここで同様の質問: