2016-11-09 12 views
1

IISでは、urlまたはクエリ文字列に基づいてリクエストフィルタリングを設定できます。これにより、悪質なGETリクエストをブロックすることができますが、これはポストデータに対しては機能しません。投稿データに基づいてリクエストをブロックする方法はありますか?

例:私は私のweb.configファイルでこれを設定した場合

クエリ文字列に単語「スパム」を持って

<security> 
    <requestFiltering> 
     <filteringRules> 
      <filteringRule name="Stop spam" scanUrl="false" scanQueryString="true"> 
       <denyStrings> 
        <clear /> 
        <add string="spam" /> 
       </denyStrings> 
       <scanHeaders> 
        <clear /> 
       </scanHeaders> 
       <appliesTo> 
        <clear /> 
       </appliesTo> 
      </filteringRule> 
     </filteringRules> 
    </requestFiltering> 
</security> 

要求がブロックされます。しかし、私はこの単語を含むPOSTリクエスト(例えば、フォームから)をブロックする必要もあります。 POSTデータに基づいてリクエストをフィルタリングおよび拒否する拒否ルールを設定することはできますか?もしそうなら、どうすればいいですか?

答えて

0

これはIISでは実行できないようですが、サイト自体の回避策を考え出しました。 Global.asaxのにこれを追加すると、仕事をしているように見えるん:

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    var sr = new System.IO.StreamReader(Request.InputStream); 
    string content = sr.ReadToEnd(); 
    var rule = @"spam"; 
    if 
    (
     Regex.IsMatch(content, rule, RegexOptions.IgnoreCase) || 
     Regex.IsMatch(Request.Url.Query, rule, RegexOptions.IgnoreCase) 
    ) 
    { 
     // TODO: Do some logging here 
     throw new Exception("Get off my lawn!"); 
    } 
} 

ほんの少しヘッドアップ。あなたが何をしているのか分からない限り、これを使わないでください。これにより、すべてのリクエストがテストされ(そして正規表現を使って)、サイトが遅くなる可能性があります。悪意のある要求もすべて解決するわけではありません。

関連する問題