我正在努力学习尽可能多的关于运行一个高知名度的网站。我设计了一些用户注册屏幕,并考虑了典型的CAPTCHA或恼人的替代方案。在我看来,使用它们要么会导致可访问性问题,要么只是困扰潜在客户并阻碍他们的注册过程。
我的问题是spambots是否识别并触发JavaScript事件,例如输入字段上的keydown
或keypress
事件。从我能收集到的,大多数机器人只是通过动作属性来做表单帖子,而不是编程地"填写"web表单。
理论上,我可以添加像下面这样的JavaScript:
<input name="email" />
<input name="human" type="hidden" />
<script>
var emailField = document.getElementById( 'email' );
emailField.onkeydown = function( ) {
document.getElementById( 'human' ).value = "human";
};
</script>
然后,在服务器端,我可以验证post数据是否包含隐藏表单字段的"human"值。
这是一个可行的解决方案吗,至少和输入一堆随机的、难以阅读的字符一样有效吗?在重复尝试中,使用从服务器随机生成的值是否比使用静态值"human"更有帮助?
大多数垃圾邮件机器人将简单地在您的页面上查找<form>
,然后将数据直接发布到action
属性中指定的URL。这是非常简单、轻量级和容易做到的。
一些垃圾邮件机器人实际上会使用在页面上执行JavaScript的无头浏览器(如PhantomJS)。这些垃圾邮件机器人很难欺骗,但很少有机器人使用这种方法,因为它更昂贵(在CPU和RAM上)。
我发现通过蜜罐(以编程方式删除页面上的字段和其他类似方法)阻止最常见的垃圾邮件机器人通常是好的。一些机器人会通过,任何通过手工分析找到利用您的页面的方法的人仍然会进入。对于大多数站点来说,这已经足够好了,并且在防止垃圾邮件的同时保持站点可用性方面提供了很好的平衡。