1

我知道这已经被问过很多次了,但我真的很努力尝试了很多不同的潜在解决方案。

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

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

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

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

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

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

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

我的想法在这里用完了!我在防火墙上每 10 分钟阻止一次 IP 范围。我不能一直这样做!

谢谢你的帮助!

4

2 回答 2

3

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

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

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


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

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

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

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


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

于 2013-12-19T19:49:31.020 回答
1

你试过蜜罐领域吗?

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

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

这个想法是垃圾邮件机器人无法抗拒填写字段,但大多数都不够聪明,无法确定该字段是否在浏览器中实际可见,因此您可以通过填写他们不应该填写的内容来欺骗他们泄露自己。

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


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

于 2013-12-19T19:41:35.757 回答