如何根据帖子数据阻止请求?

时间:2016-11-09 13:33:10

标签: asp.net iis

在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>

请求包含#&#34;垃圾邮件&#34;在查询字符串中将被阻止。但是,我还需要阻止包含该单词的POST请求(例如,从表单中)。我可以设置拒绝规则,根据POST数据过滤和拒绝请求,如果是,我该怎么做?

1 个答案:

答案 0 :(得分:1)

似乎无法在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!");
    }
}

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