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

只是一点点抬起头来。除非你知道你在做什么,否则不要使用它。这将测试所有请求(并使用正则表达式),所以它会减慢网站的速度。它也不会解决所有的恶意请求。