javascript - 击败垃圾邮件注册

标签 javascript forms captcha spam

我正在尝试尽可能多地学习如何运营知名网站。我设计了一些用户注册屏幕,并考虑了典型的验证码,或烦人的替代方案。在我看来,拥有它们要么会导致可访问性问题,要么只会打扰潜在客户并阻碍他们的注册过程。

我的问题是垃圾邮件机器人是否识别并触发 JavaScript 事件,例如输入字段上的 keydownkeypress 事件。据我所知,大多数机器人只是通过 action 属性发送表单,而不是以编程方式“填写”网络表单。

理论上,我可以添加类似于以下内容的 JavaScript:

<input name="email" />
<input name="human" type="hidden" />
<script>
var emailField = document.getElementById( 'email' );
emailField.onkeydown = function( ) {
   document.getElementById( 'human' ).value = "human";
};
</script>

然后,在服务器端,我可以验证帖子数据是否包含隐藏表单字段的值“human”。

这是一个可行的解决方案,至少与输入一堆随机的、难以阅读的字符一样有效吗?在重复尝试中使用服务器随机生成的值是否比“人”的静态值更有帮助?

最佳答案

大多数垃圾邮件机器人只会寻找 <form>在您的页面上,然后将数据直接发布到 action 中指定的 URL属性。这非常简单、轻量级且易于执行。

一些垃圾邮件机器人实际上会使用在页面上执行 JavaScript 的 headless 浏览器(例如 PhantomJS)。这些垃圾邮件机器人更难被愚弄,但很少有机器人使用这种方法,因为它的成本要高得多(在 CPU 和 RAM 上)。

我发现通过蜜 jar (页面上以编程方式删除的字段,以及其他类似方法)阻止最常见的垃圾邮件机器人通常没有问题。一些机器人会通过,任何通过手动分析找到利用您页面的方法的人仍然会进入。对于大多数网站来说,这已经足够了,并且在防止垃圾邮件和保持您的网站可用之间提供了良好的平衡。

关于javascript - 击败垃圾邮件注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22307978/

相关文章:

scala - 使用scala在play框架中生成验证码

mobile - 有没有专门为移动应用设计的好的验证码?

javascript - XHR 更新失败,字符串包含 "#",其中表单发布成功

forms - Symfony : get object the form is based of

php - 有什么技术可以防止多次提交比赛?

javascript - requirejs 忽略我的 requirejs.config

javascript - 将多个参数传递给 page.evaluate()

php - Ajax 到 php 调用不成功

javascript - 如何使用 jQuery 通过 <select> id 和 <option> 值在 <select> 选项中找到文本?

html - 输入字段时如何让表单值消失?