【问题标题】:"A potentially dangerous Request.Form value was detected from the client" before page load页面加载前“从客户端检测到潜在危险的 Request.Form 值”
【发布时间】:2013-12-19 17:25:37
【问题描述】:

我知道这个问题已经被问过很多次了,但是在尝试了很多不同的潜在解决方案之后,我真的很挣扎。

我有一个 c# ASP.net 网站页面。那里有一个带有提交按钮的表单。所有代码都在页面后面的代码中。

我们没有收到任何通过表单提交的垃圾邮件,因为我有一个捕获元素。然而 - 垃圾邮件机器人正在扫描页面,获取字段名称并直接发布到页面。

我之所以知道这一点,是因为我将 Application_Error 设置为通过电子邮件向我报告任何错误(在 global.asax 中)。

我已尝试更改我的字段名称 - 但他们只是选择了新字段。

我已将<httpRuntime requestValidationMode="2.0" /> 放入 web.config。

在我的页面中,我有EnableEventValidation="False"

但是 - 正如我所说,问题是不允许在帖子数据中使用 html,它试图阻止垃圾邮件机器人直接向页面提交。它在页面加载之前被触发(我认为)。

我的想法已经用完了!我在我们的防火墙上每 10 分钟阻止一次 IP 范围。我不能再这样下去了!

感谢您的帮助!

【问题讨论】:

  • 不应该是页面中的 ValidateRequest 而不是 EnableEventValidation 吗?

标签: c# asp.net application-error


【解决方案1】:

这就是你要做的:忽略它。阻止 IP 只会让你在圈子里跑来跑去,最终是浪费时间。

如果实际上没有提交垃圾邮件,那么您确实没有问题。该框架正在做它应该做的事情。

坦率地说,我不会费心去调查这样的错误消息,除非它阻止了实际用户做他们需要做的事情。


如果您真的只是想让错误消失,那么您需要执行以下操作:

  1. 设置EnableEventValidation="true"
  2. 设置ValidateRequest="false"

EnableEventValidate 告诉 .net 查看帖子是否来自单击它已呈现的控件。这应该有助于防止直接发帖。

ValidateRequest 告诉 .net 是否测试 html 和其他“危险”字符的输入。将其关闭将停止您的错误消息。


如果您只是想让垃圾邮件发送者停止访问您的网站:关闭该网站。因为这是阻止垃圾邮件发送者的唯一可靠方法。

【讨论】:

  • 同意。您永远无法完全阻止垃圾邮件发送者,因为其中一些甚至不是机器人。我听说过在发展中国家的实际“垃圾邮件商店”,人们每天通过垃圾邮件网站获得几美分的报酬。这几乎是不可能打败的。
【解决方案2】:

你试过蜜罐领域吗?

在您的标记中创建一个输入字段,但不要在页面上显示它。您可以使用 css 或其他方法向用户隐藏它,只要它仍然显示在您的页面源中。

然后,在您的代码隐藏中,在处理任何内容之前检查该字段是否为空。您知道您的真实用户看不到该字段,或在其中输入任何内容。因此,如果填写了该字段,您就知道它来自扫描您页面的机器人,您可以忽略其他所有内容。

这个想法是垃圾邮件机器人无法抗拒填写字段,但大多数都不够聪明,无法确定该字段是否真的在浏览器中可见,所以你欺骗他们让自己给自己填写他们不应该填写的内容。

FWIW,我个人使用这种方法取得了不错的成功。


但是,如果 ASP 拒绝提交并导致错误,那就是另一个问题了。您是否需要合法用户才能在现场提交标记?如果您不这样做,那么该框架实际上是在通过保护您的站点来做正确的事情。在这种情况下,我会在您的 Application_Error 方法中检查该特定错误并忽略它。

【讨论】:

    猜你喜欢
    • 2012-05-29
    • 2012-03-03
    • 2013-11-15
    相关资源
    最近更新 更多