代码之家  ›  专栏  ›  技术社区  ›  Xeoncross

有没有可以用来识别垃圾邮件机器人的HTTP头字段?

  •  1
  • Xeoncross  · 技术社区  · 14 年前

    很显然,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
    )
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   El Yobo    14 年前

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

    相反

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

    你不能用这种方法找到所有的机器人,但是你可以捕捉一些,或者至少得到一些UA是机器人的概率,并将其与另一种方法结合使用。

    有些机器人忘记了 Accept-Charset Accept-Encoding 标题。你也可能会发现 Accept User-Agent (例如,IE6不会要求XHTML,Firefox不会宣传MS Office类型)。

    阻塞时,要小心代理,因为它们可以修改报头。如果你看到的话,我建议你退后 Via X-Forwarded-For 标题。

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