随着可以模拟任何东西的无头浏览器(如 phantomjs)的出现,你不能假设:
- 垃圾邮件机器人不使用 javascript,
- 您可以跟踪鼠标事件以检测机器人,
- 他们不会看到一个字段在视觉上是隐藏的,
- 他们不会在提交之前等待给定的时间。
如果这曾经是真的,那它就不再是真的了。
如果您不想要一个用户友好的解决方案,只需给他们一个漂亮的“我是垃圾邮件发送者”提交按钮:
<input type="submit" name="ignore" value="I am a spammer!" />
<input type="image" name="accept" value="submit.png" alt="I am not a spammer" />
当然,您可以使用两个图像input[type=image]
按钮,在每次加载后更改顺序、替代文本、图像内容(及其大小)或name
按钮的;这将需要一些服务器工作。
<input type="image" name="random125454548" value="random125454548.png"
alt="I perfectly understand that clicking on this link will send the
e-mail to the expected person" />
<input type="image" name="random125452548" value="random125452548.png"
alt="I really want to cancel the submission of this form" />
出于可访问性的原因,您必须提供正确的文本替代方案,但我认为对于屏幕阅读器用户来说,长句子比被视为机器人更好。
附加说明:这些例子说明理解英语(或任何语言),并且必须做出一个简单的选择,对于垃圾邮件机器人来说比:等待 10 秒、处理 CSS 或 javascript、知道一个字段被隐藏、模拟鼠标移动或模拟键盘打字,...