This article on how much CAPTCHA sucks提到Animoto使用时间戳分析来减少垃圾邮件。
它包含指向jQuery tutorial时间戳分析的链接。基本上,你使用AJAX让PHP设置一个cookie,使用JS为表单添加一个隐藏的输入,然后(在提交时)你将隐藏的输入值与cookie值进行比较。从教程:
检查表格
test.php是用于验证令牌的示例PHP代码
- 令牌[隐藏输入值]是否存在?
- 是否与通过md5()函数运行时的时间戳匹配?
- 已经过了太多时间?
......但由于以下原因,这对我来说似乎很复杂:
我希望我实际上不知道机器人如何或为何与HTML表单互动,现在我可以得到纠正和教育。
答案 0 :(得分:3)
接下来的两点似乎更多地反对垃圾邮件机器人缓存并重新使用表单提交,而不是在从服务器加载其封闭页面后花费太长时间来提交表单。正如你所说,只要垃圾邮件机器人遵循从你的服务器请求表单然后提交表单的流程,人们就会希望垃圾邮件僵尸程序比提交表单的实际用户更快 。回复。但并非所有垃圾邮件机器人都会遵循这一流程。有些人可能会缓存服务器发送的页面(或为该页面生成的响应),以便一次又一次地重复使用。如果他们这样做了,那么时间戳/ cookie会为你提供一种检测它的方法。
但我真的认为时间戳是不必要的。我只使用令牌+ JavaScript,使用大致类似的方法:
因此,所有显式时间戳的废话都会消失,因为它内置于HTTP会话中。非常旧的会话将过期,带着他们的代币。您仍然会过滤掉任何不够复杂以支持JavaScript或Cookie的垃圾邮件机器人,并且您无法使用缓存的URL /表单提交,因为步骤6可确保不会多次使用任何令牌。基本上,垃圾邮件机器人被迫经历从服务器请求页面,执行JavaScript以及为每个要提交的提交提交表单的整个周期。