我们有一个带有搜索表单的Web应用程序,允许用户输入一些文本,我们根据输入的内容限制结果。最近我们开始收到以下错误:
System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client (ctl00$ContentPlaceHolder1$results_search="...967.hcpm, <a href="http://www....").
这个错误每天都在发生,每天,这似乎是来自机器人,看着错误似乎机器人将html ahref链接放入搜索字段并尝试搜索,导致错误。< / p>
在搜索之后,我发现有两种方法可以处理这个问题,要么使用Jquery,要么将validateRequest变为false,然后在代码隐藏页面中使用htmlencode。有谁知道jquery代码是否适用于机器人?我不确定机器人是如何做到的,如果它正在点击页面并单击按钮或以其他方式发送请求,因为按钮单击是导致回发触发搜索的原因,我们使用POST,因此没有任何内容通过url到搜索页面,页面只回发自己,而在PostBack上则是搜索结束。
答案 0 :(得分:6)
在web.config文件中,在标记内插入 httpRuntime 元素,其属性为 requestValidationMode =“2.0”。
示例:
<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
</configuration>
答案 1 :(得分:2)
我们的一个解决方案是针对IP记录这些错误,并在应用程序级别阻止访问,如果它们提交的太多。
这不是防弹,但减少了我们的数量。但是它仍然涉及工程和处理,但是你不必担心IIS。
然而,你真的很少能做到。他们会垃圾邮件你的表格和阻止IP只是一个短期的解决方案,他们会打你多个IP等。只要确保你的验证是紧的,你不容易受到注射攻击之类的事情而忽视它,这是一个事实这些天的生活。
我们经常受到这样的打击,特别是来自中国这样的地方。
答案 2 :(得分:1)
您可以尝试其他解决方案。每当发生此类错误时,它会将您的网页重定向到默认网址(请在defaultRedirect=" "
中设置页面)。
<system.web>
<customErrors mode="On" defaultRedirect="~/Home/Index"/>
</system.web>
因此机器人将无法再将您的收件箱或其他正在创建的问题发送垃圾邮件!
答案 3 :(得分:1)
<httpRuntime requestValidationMode="2.0" />
整个代码:
<httpRuntime requestValidationMode="2.0" maxRequestLength="102400" />
<compilation debug="true" strict="false" explicit="true" targetFramework="4.0">
我希望这会有所帮助。