在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数据过滤和拒绝请求,如果是,我该怎么做?
答案 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!");
}
}
只是有点抬头。除非你知道自己在做什么,否则不要使用它。这将测试所有请求(并使用正则表达式),因此它会降低网站的速度。它也不会解决所有恶意请求。