“时间戳分析”究竟如何阻止垃圾邮件?

时间:2011-04-23 07:02:18

标签: spam-prevention bots timestamp-analysis

This article on how much CAPTCHA sucks提到Animoto使用时间戳分析来减少垃圾邮件。

它包含指向jQuery tutorial时间戳分析的链接。基本上,你使用AJAX让PHP设置一个cookie,使用JS为表单添加一个隐藏的输入,然后(在提交时)你将隐藏的输入值与cookie值进行比较。从教程:

  

检查表格

     

test.php是用于验证令牌的示例PHP代码

     
      
  • 令牌[隐藏输入值]是否存在?
  •   
  • 是否与通过md5()函数运行时的时间戳匹配?
  •   
  • 已经过了太多时间?
  •   

......但由于以下原因,这对我来说似乎很复杂:

  • 是否存在令牌?该令牌仅由JavaScript添加,因此您所做的只是检测是否启用了JS。当然,有更简单的方法可以做到这一点。
  • 是否与通过md5()函数运行时的时间戳匹配? md5可能会让我们感觉更好,但这不仅仅是确保启用了Cookie吗?当然,有更简单的方法可以做到这一点。
  • 已经过了太多时间?垃圾邮件真的需要很长时间才能提交表单吗?当然这是不必要的。 (你真的不想看看表格是否已经提交很快?)

我希望我实际上不知道机器人如何或为何与HTML表单互动,现在我可以得到纠正和教育。

1 个答案:

答案 0 :(得分:3)

  • 是否存在令牌?是的,您几乎可以看到客户端是否启用了JavaScript。但其背后的要点是许多Web自动化框架不支持JavaScript(或仅支持其中一些有限的子集),并且那些具有适当JavaScript支持的框架往往相当重量级,因此不适合用作垃圾邮件 - 机器人。所以基本上你要过滤掉简单的垃圾邮件机器人,它们依赖于将表单发布到URL而不实际评估包含表单的页面上的任何内容。

接下来的两点似乎更多地反对垃圾邮件机器人缓存并重新使用表单提交,而不是在从服务器加载其封闭页面后花费太长时间来提交表单。正如你所说,只要垃圾邮件机器人遵循从你的服务器请求表单然后提交表单的流程,人们就会希望垃圾邮件僵尸程序比提交表单的实际用户更快 。回复。但并非所有垃圾邮件机器人都会遵循这一流程。有些人可能会缓存服务器发送的页面(或为该页面生成的响应),以便一次又一次地重复使用。如果他们这样做了,那么时间戳/ cookie会为你提供一种检测它的方法。

但我真的认为时间戳是不必要的。我只使用令牌+ JavaScript,使用大致类似的方法:

  1. 每次请求页面/表单时,服务器都会为该请求生成一个新的随机令牌。
  2. 令牌与用户当前的HTTP会话相关联。
  3. 令牌(或其一些轻微加密版本)也会发送到页面。
  4. JavaScript将标记值添加为表单的隐藏输入(如有必要,首先对其进行解密)。
  5. 提交时,服务器会检查a)用户的HTTP会话中是否存在令牌,b)是否随表单提交了令牌,以及c)两个令牌是否匹配。
  6. 假设提交有效,服务器会清除用户HTTP会话中的令牌,因此无法重复使用。
  7. 因此,所有显式时间戳的废话都会消失,因为它内置于HTTP会话中。非常旧的会话将过期,带着他们的代币。您仍然会过滤掉任何不够复杂以支持JavaScript或Cookie的垃圾邮件机器人,并且您无法使用缓存的URL /表单提交,因为步骤6可确保不会多次使用任何令牌。基本上,垃圾邮件机器人被迫经历从服务器请求页面,执行JavaScript以及为每个要提交的提交提交表单的整个周期。