web-dev-qa-db-ja.com

IISで複数フォーム送信(POST)を無効にする方法

数か月前に、ユーザーがEnterボタンを無期限に押すような方法でキーボードをくさびで止めたため、SharePointが大幅に停止しました。ユーザーはカスタマイズされたユーザー検索ページを表示しており、同じユーザーによる何百ものPOSTが非同期で送信されたため、サーバーが過負荷になりました。

私は大規模な組織で働いているので、これを防ぐためのよりグローバルな方法を探しています。

IIS内で、一般的なユーザーによる複数のWebフォームの送信を短期間で防ぐ方法はありますか?

ボタンをクリックした後にボタンを無効にするJavaScriptを記述できることは承知していますが、同様の可能性が存在する可能性のある他のページでこの問題が発生しないようにしたいと考えています。

更新:ソースコードを見ているように見えます。キーコード13(Enter)が押されるたびに、JavaScriptはdocument.location = urlを実行しています。繰り返しになりますが、この場所でこれを防ぐためにJSを作成できますが、この種の問題をより一般的に防ぐこともできます...できればIISレベルで。

7
user1209640

同時リクエストの数による影響を単に回避しているだけの場合は、IIS 7、動的IP制限)のアドオンがあります(この機能はIIS8に組み込まれています)。これをログ専用モードに構成して、機能を有効にする前に影響があるかどうかを判断することができます。

http://www.iis.net/downloads/Microsoft/dynamic-ip-restrictions

  • IIS 7.0Managerへのシームレスな統合。
  • 次の基準のいずれかに基づいて、IPアドレスからの要求を動的にブロックします。
    • 同時リクエストの数。
    • 一定期間におけるリクエストの数。
  • 動的IP制限フィルタリングのバイパスが許可されているIPのリストのサポート。
  • 要求のブロックは、WebサイトまたはWebサーバーレベルで構成できます。
  • 構成可能な拒否アクションにより、IT管理者はクライアントに返される応答を指定できます。モジュールは、戻りステータスコード403、404、または接続の終了をサポートします。
  • IPv6アドレスのサポート。
  • クライアントのIPアドレスを変更する可能性のあるプロキシまたはファイアウォールの背後にあるWebサーバーのサポート。

Dynamic IP Restrictions in action

複数のフォームの送信は、アプリケーションレベルで対処する必要があります。マスターページを使用して実装するのは簡単です。マスターページの次のjqueryは、すべての子コンテンツページに対してトリックを実行します。

$("form").submit(function () {
    $(":submit", this).attr("disabled", "disabled");
});  

採用する価値があるかもしれない別の良い習慣:投稿/リダイレクト/取得

http://en.wikipedia.org/wiki/Post/Redirect/Get

2
Greg Askew

このための1つのオプションは、 http://www.iis.net/downloads/Microsoft/dynamic-ip-restrictions のようなものを使用してレート制限することです。これは、セットの問題のあるIPをブロックするように設定できます。時間の長さ。

もちろん、このようなものを本番環境に移行する前に、通常のリクエスト/秒/ IPのベースラインを設定する必要がありますが、これにより、1人のユーザーがそのようなことを再度実行できなくなるはずです。

2
Nathan V

グローバルレベルのIISモジュールを記述し、同じユーザーからの同じ要求が特定の短時間で発生するかどうかを確認できます。次に、要求を許可するかどうかを決定できます。

class CGlobalTestFilterModule:public CGlobalModule
{
public:
    GLOBAL_NOTIFICATION_STATUS 
        OnGlobalPreBeginRequest(IN IPreBeginRequestProvider * pProvider)
    {
    ...
   }
...
}

ここにIISモジュールを実装するための良いガイドがあります: http://www.iis.net/learn/develop/runtime-extensibility/develop-a-native-cc-module -for-iis .NETに精通している場合は、管理対象モジュールを選択できます

0
hassan.monfared