2013-12-19 87 views
0

我知道这已被问了很多次,但我真的努力尝试了很多不同的潜在解决方案。“在客户端检测到潜在危险的Request.Form值”之前页面加载

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

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

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

我试图改变我的字段名称 - 但他们只是拿起新的领域。

我已经把<httpRuntime requestValidationMode="2.0" />放在web.config中。

在我的网页,我有EnableEventValidation="False"

但是 - 正如我所说的,这个问题是不是允许在后数据的HTML,它试图直接提交到页面阻止垃圾邮件机器人。它在页面加载之前被触发(我认为)。

我在这里没有想法了!我在防火墙上每10分钟阻止一次IP范围。我无法继续这样做!

感谢您的帮助!

+2

不应该是您的页面中的ValidateRequest而不是EnableEventValidation? – shriek

回答

2

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

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

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


如果你真的只是想将错误消失,那么,你需要做到以下几点:

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

EnableEventValidate告诉.NET看如果帖子是通过点击它所呈现的控件来完成的。这应该有助于防止直接发帖。

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


如果您只是试图让垃圾邮件发送者停止击中您的网站:关闭网站。因为这是让垃圾邮件发送者停止使用的唯一可靠方法。

+1

同意。你永远无法完全阻止垃圾邮件发送者,因为其中有些甚至不是机器人。我听说过在发展中国家的实际“垃圾邮件商店”的报道,在这些国家,人们每天都会向垃圾邮件网站支付便士。这几乎不可能失败。 – SouthShoreAK

1

您是否试过honeypot字段?

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

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

的想法是,垃圾邮件机器人无法抗拒的领域填补,但大多数都没有足够的智慧来确定现场是在浏览器中实际可见,所以你欺骗他们到通过填写让自己走他们不应该这样做。

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


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

相关问题