【发布时间】:2010-11-10 09:33:13
【问题描述】:
我是否认为垃圾邮件机器人无法模拟“按键”事件,因此如果我在提交联系表单中的每个字段之前都需要按键,我就不会收到垃圾邮件?
如果我不在乎我的观众是否启用了 JavaScript,这是否是验证码等的一个很好的替代品?
巫师们,让我正确。
【问题讨论】:
标签: javascript validation captcha addeventlistener
我是否认为垃圾邮件机器人无法模拟“按键”事件,因此如果我在提交联系表单中的每个字段之前都需要按键,我就不会收到垃圾邮件?
如果我不在乎我的观众是否启用了 JavaScript,这是否是验证码等的一个很好的替代品?
巫师们,让我正确。
【问题讨论】:
标签: javascript validation captcha addeventlistener
我不确定他们是否可以“本机”生成按键事件(我认为您可能是对的,他们不能,但得知有一些边缘情况是可能的,我不会感到惊讶)。
但是,我认为他们只直接执行element.onkeypress() 不会有问题。如果 bot 可以确定它需要按下一个键来前进,那么实际上归结为需要调用特定的事件处理程序方法 - 而 bot 可以 执行后者。它也可以创建自己的包含 keycode 的虚假 Event 对象,然后将其传入和/或将其设置为 window.event。
理论上,您可能能够通过非常严格地自省处理程序中的事件对象来检测到这一点。我不认为机器人能够轻易地创建一个本地等效的事件对象,所以也许通过检查原型链你可以区分两者。但是,这对于一般用途来说几乎肯定是太脆弱了,并且不会在不同的浏览器/环境/插件/等中可靠地工作。
因此,我不认为这是一条富有成效的道路,因为您无法在事件处理程序中判断该事件是否“真实”。浏览器原生代码不同,因为机器人实际上无法触发点击事件,但在 Javascript 中,我没有看到一种简单的方法来阻止您的方法被简单地调用。
【讨论】:
href 元素并导航到它)。但是你不能说“嘿,浏览器,我刚刚点击了这里——现在就采取适当的行动”。所以回答你的问题,可能不是;机器人可以手动运行button.onClick()。
element.onmousemove() 并不比调用 element.onkeypress() 更具挑战性。
垃圾邮件机器人的当前实现可能无法做到这一点。但是模拟按键并不难。如果您只是一个小型网站,机器人作者可能不会做任何工作来绕过您的系统,但如果它大到足以让作者关心您的系统,那么您的系统将很快被破坏。
【讨论】: