在这种情况下,有什么可以做的呢?
要求使用JavaScript来提交数据可以有效防止大量垃圾邮件机器人的干扰,同时不会影响大多数用户。
你还可以使用一个巧妙的技巧:
<input type="text" id="not_human" name="name" />
<input type="text" name="actual_name" />
<style>
#not_human { display: none }
</style>
大多数机器人会填充第一个字段,因此您可以阻止它们。
input[name=email]: display:none;
来隐藏一个名称精美的字段,如<input name="email" id="email" type="text">
,也无法阻止机器人继续发送电子邮件,但仅仅使用position:absolute; left:-9000px;
却可以解决问题。可能(出于相同的原因)并不是最好的,但它确实奏效了。只是分享我的发现。 - Roko C. Buljan我结合了几种方法,目前似乎非常成功:
提供一个输入字段,名称为email
并使用CSS隐藏display: none
。当提交表单时,检查此字段是否为空。机器人倾向于填写虚假的电子邮件地址。
提供另一个隐藏的输入字段,其中包含加载页面的时间。检查加载和提交页面之间的时间是否大于填写表单所需的最短时间。我使用5至10秒之间。
然后检查GET参数的数量是否符合您的预期。如果您的表单操作是POST,并且您的提交页面的基础URL是index.php?p=guestbook&sub=submit
,那么您期望有2个GET参数。机器人会尝试添加GET参数,因此这个检查会失败。
最后,检查HTTP_USER_AGENT是否设置,机器人有时不设置,并且HTTP_REFERER是您表单页面的URL。机器人有时只是POST到提交页面,导致HTTP_REFERER变成其他内容。
我从http://www.braemoor.co.uk/software/antispam.shtml和http://www.nogbspam.com/获取了大部分信息。
name="email"
的确是垃圾邮件机器人的一个很好的目标,但是 display:none;
并没有起作用。相反,有效的方法是:position: absolute; left:-9000;
!只是分享一下。 - Roko C. Buljan更多讨论和演示请参见 Jacques-Louis Chereau在NoBot上的博客文章。
<ajaxToolkit:NoBot
ID="NoBot2"
runat="server"
OnGenerateChallengeAndResponse="CustomChallengeResponse"
ResponseMinimumDelaySeconds="2"
CutoffWindowSeconds="60"
CutoffMaximumInstances="5" />
http://www.campaignmonitor.com/blog/post/3817/stopping-spambots-with-two-simple-captcha-alternatives
由于完全避免它是极其困难的,我建议阅读两年前发布的IBM文章this IBM article,标题为“真正的Web 2.0:与Web垃圾作斗争”,其中分析了访问者行为和控制工作流程。
Web垃圾有很多形式,包括:
- 维基百科上的垃圾文章和被破坏的文章
- 博客上的评论垃圾
- 论坛、问题跟踪器和其他讨论网站上的垃圾帖子
- 引荐垃圾(当垃圾站点假装将用户引荐到列出引荐者的目标站点时)
- 社交网络上的虚假用户条目
处理Web垃圾非常困难,但是Web开发人员如果忽略垃圾邮件预防,则会面临风险。在本文中,以及稍后即将发布的第二部分中,我介绍了对抗各种Web垃圾的技术、技术和服务。
此外,还链接了一个非常有趣的"...哈希现金技术,用于在维基和电子邮件等方面最小化垃圾邮件。"
你应该选择一个,Honeypot 或 BOTCHA。
可以考虑使用一些人类可读的问题,提示用户输入名字字段的首字母和姓氏字段的尾字母等信息。
或者通过 JavaScript 填充一些隐藏字段,例如 referer 等值,并检查这些字段与会话中存储的字段是否相等。 如果这些值为空,则说明用户没有启用 JavaScript。那么这就不是垃圾邮件。但是机器人至少会填写其中一些字段。