Php 是否有HTTP头字段可用于识别垃圾邮件机器人?

Php 是否有HTTP头字段可用于识别垃圾邮件机器人?,php,http-headers,spam-prevention,bots,Php,Http Headers,Spam Prevention,Bots,毫无疑问,scraper和spambot的构建不如普通的web浏览器。考虑到这一点,似乎应该有办法通过观察他们提出请求的方式来发现公然的垃圾邮件 有没有分析HTTP头的方法,或者这只是一个白日梦 Array ( [Host] => example.com [Connection] => keep-alive [Referer] => http://example.com/headers/ [Cache-Control] => max-age

毫无疑问,scraper和spambot的构建不如普通的web浏览器。考虑到这一点,似乎应该有办法通过观察他们提出请求的方式来发现公然的垃圾邮件

有没有分析HTTP头的方法,或者这只是一个白日梦

Array
(
    [Host] => example.com
    [Connection] => keep-alive
    [Referer] => http://example.com/headers/
    [Cache-Control] => max-age=0
    [Accept] => application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    [User-Agent] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
    [Accept-Encoding] => gzip,deflate,sdch
    [Accept-Language] => en-US,en;q=0.8
    [Accept-Charset] => ISO-8859-1,utf-8;q=0.7,*;q=0.3
)

如果我写的是垃圾邮件机器人,我会伪造普通浏览器的标题,所以我怀疑这是一种可行的方法。其他一些可能有用的建议

反而

  • 使用验证码
  • 如果这太烦人了,一个简单但有效的技巧是包含一个由CSS规则隐藏的文本输入;用户不会看到它,但垃圾邮件机器人通常不会费心解析和应用所有CSS规则,因此他们不会意识到该字段不可见,会在其中放入一些内容。在表单提交时检查字段是否为空,如果为空则忽略它
  • 在你的表格上使用nonce;检查呈现表单时使用的nonce是否与提交表单时相同。这不会捕获所有内容,但会确保帖子至少是由最初收到表单的人制作的。理想情况下,每次渲染窗体时都更改nonce

您无法通过这种方式找到所有机器人,但您可以捕获一些,或者至少获得UA成为机器人的一些可能性,并将其与其他方法结合使用

有些机器人忘记了
接受字符集
接受编码
头。您还可能会发现
Accept
User-Agent
的不可能组合(例如IE6不会要求XHTML,Firefox不会宣传MS Office类型)

阻塞时,请小心代理,因为它们可能会修改头。如果通过或X-Forwarded-For标题看到
,我建议您退出


理想情况下,您可以使用贝叶斯分类器,而不是手动编写规则。它可以很简单,将相关的标题连接在一起,并将它们作为分类器中的单个“单词”使用。

只有少数机器人具有可靠的签名。大多数表单垃圾邮件爬虫执行重播攻击或是ActiveX僵尸。(但在很大程度上取决于目标网站。)
Referer
-链接机器人越来越少。但看看“不良行为”。nonce=使用过一次的数字。临时值需要每次都更改,否则它不是临时值。否则,+1.)当然,您是正确的:)但是,如果不正确地执行此操作并重复使用它直到表单成功提交(例如,如果他们点击了重新加载),仍然比根本不执行要好,因此我认为理想情况下;在这种情况下,每个表单提交使用一次,而不是每个表单视图使用一次。使用nonce或“表单令牌”也可以防止CSFR。不要在没有表格的情况下展示表格。