31

可能な/部分的な重複:

スパムやブルート フォース攻撃を減らすために、Web アプリケーションの移動時間ウィンドウ レート制限アルゴリズムを実装する最良の方法を探しています。

使用例は、「過去 5 分間に特定の IP から失敗したログイン試行の最大数」、「過去 N 分間の (投稿/投票/その他...) の最大数」です。

X分ごとに統計をハードリセットする(twitter apiのように)よりも、移動時間ウィンドウアルゴリズムを使用したいと思います。

これは、C#/ASP.Net アプリ用です。

4

6 に答える 6

28

この種のレート制限には、Token Bucketの方が優れたアルゴリズムであることがわかりました。ルーター/スイッチで広く使用されているため、運用担当者はこの概念に精通しています。

于 2009-09-20T03:31:27.800 に答える
12

memcachedのような高速なメモリーベースのハッシュテーブルを使用します。キーは制限するターゲット (IP など) になり、保存された各値の有効期限は最大制限時間になります。

各キーに保存された値には、アクションの実行で行われた最後の N 回の試行のシリアル化されたリストと、各試行の時間が含まれます。

于 2009-09-20T03:36:38.173 に答える
11

この問題に対するより「現代的な」回答を追加するだけです

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()
});
于 2016-08-25T12:25:03.343 に答える
2

このページは興味深い読み物であることがわかります。

http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx

注目すべきセクションは次のように始まります。

サービス拒否 (DOS) 攻撃を防ぐ

Web サービスはハッカーにとって最も魅力的なターゲットです。就学前のハッカーでさえ、高価な作業を行う Web サービスを繰り返し呼び出してサーバーをダウンさせることができるからです。

編集:ここで同様の質問:

ASP.NET MVCでリクエストスロットリングを実装する最良の方法は?

于 2009-09-20T03:44:17.150 に答える