2016-11-09 65 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!"); 
    } 
} 

只是一點點擡起頭來。除非你知道你在做什麼,否則不要使用它。這將測試所有請求(並使用正則表達式),所以它會減慢網站的速度。它也不會解決所有的惡意請求。