机器人将假冒字段注入表单,导致错误

时间:2015-08-10 13:09:32

标签: validation webforms asp.net-2.0 spam-prevention client-side-validation

机器人在我的网站上发送垃圾邮件,每隔几秒就会产生一个“有潜在危险的请求......”错误。当某些字符(如“<”)在某些元素(如表单字段)中回发时会生成这些错误。这意味着它们需要在客户端处理,否则在任何服务器端验证有机会运行之前都会产生“黄屏”错误。当网站产生并出现错误时,我会将其记录在数据库中并发送电子邮件,因此我已经被这个机器人生成的错误所超越。

到目前为止我所做的一切

  • Google Captcha,已修改为客户端工作。
  • 隐藏的Honey Pot textarea,如果已修改,则使用JavaScript删除“提交”按钮的OnClick事件。对此进行检查的是onchange的{​​{1}}事件,以及提交按钮的textarea事件。
  • “提交”按钮上的Honey Pot计时器,如果在页面加载后5秒内单击,则使用JavaScript删除“提交”按钮的OnClientClick事件。
  • 我将OnClick字段替换为ASP.NET TextBox字段(呈现为textarea)。

这些方法似乎暂时都有效,但现在发生的事情是机器人正在注入虚假的表单字段。以下是我们的ELMAH错误报告生成的摘录:

<input type="text" />

你可以看到它正在注入<item name="ctl00$...txtMyTextBox"><value string="..." /> <item name="__VIEWSTATE"><value string="..." /> <item name="method="><value string="..." /> ,它不是表单的一部分,然后以某种方式阻止客户端验证的其余部分,并允许提交按钮的服务器端"method="事件要运行,导致“危险”字符包含在帖子中,产生错误。

“有潜在危险的请求......”错误已有详细记录,我本人并不打算对此进行故障排除。我已经知道它可以被禁用,但我不想这样做。我想集中讨论防止僵尸程序发送垃圾邮件的根本问题,具体来说,当它将伪字段注入表单时如何处理情况。

最后,我应该注意到我们使用的ELMAH错误处理是在OnClick文件中的Application_Error(...)之前运行的,所以在那里处理它可能不是一个选项。

0 个答案:

没有答案