如何确定我的页面是由机器人请求的,而不是用户的浏览器?

信息安全 http
2021-08-17 11:47:27

如何检测我的页面是由机器人请求的,而不是用户的浏览器?我知道基本技巧:

  1. 注意不正确的标题或网址。例如,带有哈希的网址或带有完整网址的标头 - GET www.yoursite.com/test
  2. 检测到某些IP直接请求了几个不相关的页面(不够好)
  3. 注意丢失的标题
  4. 注意过时的用户代理

还有其他检测机器人的方法吗?

更新:一些好的机器人在 User-Agent 标头中标识自己:

User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
4个回答

Javascript 检测似乎是检测机器人的常用方法,通过使用 Javascript 生成随机令牌并与请求一起发送。

我喜欢在您的 Web 应用程序上拥有一个“蜜罐”页面的想法。该页面将链接到使用隐藏链接,最终用户永远不会看到。这样,如果曾经访问过这个蜜罐页面(通过机器人扫描 HTML 源的链接),您可以非常确信这是一个机器人或其他恶意扫描程序并暂时阻止该 IP 地址。

还有一些工具(例如weblabyrinth),旨在通过动态生成虚假链接让机器人跟踪来将机器人在一个循环中。

Web-log 挖掘中用于识别请求是否由机器人发出的一些功能:

  • click-number:会话中的http请求数
  • HTML 与图像的比例:机器人通常会忽略图像
  • pdf/ps 请求的百分比:机器人会请求所有这些,而人类会选择性地请求一些
  • 4xx 错误响应的百分比:机器人的这个指标会更高
  • HTTP HEAD 请求的百分比:为了减少来自站点的数据量,机器人使用 HEAD 请求
  • 未分配引荐来源的请求百分比
  • Robots.txt 文件请求
  • 请求页面深度的标准偏差:机器人高
  • 连续 HTTP 请求的百分比:人工会话更高(浏览器代表用户请求页面中包含的图像/脚本)

这些摘自“使用数据挖掘技术进行网络爬虫检测的特征评估” http://www.sciencedirect.com/science/article/pii/S0957417412002382

通常,机器人不会执行 JavaScript(可能是 99% 的情况),但是请注意一些机器人使用 WebKit,它运行 JS 并呈现完整的页面。

您可以检查日志文件中的条目。如果出现以下情况,它很可能是机器人:

  • 它请求 HTML 页面但没有图像
  • 首先请求一个robots.txt
  • 它来自谷歌等网络
  • 你可以看到它在爬行而不是浏览

到目前为止真正可靠的建议。

我只想说 JS 挑战不能用作唯一的指标,因为某些机器人(即一些谷歌机器人,还有一些坏/伪装的机器人)将执行 JS,另一方面,出于安全原因,一些用户不会激活 JS(很少见,但它会发生)。

最好的办法是使用以下规则对机器人进行交叉检查:

  1. 方法 - “POST”是可疑的
  2. 标头顺序 - 如果异常,那么它是可疑的(但这可能只是一个代理的东西)
  3. robots.txt - 如果它先到那里,那就很可疑了
  4. IP 范围 - 如果来自“不寻常”的地理位置,那么它值得一看
  5. 请求率 - 非常高的速率非常可疑
  6. 资产 - 如果它不下载文件(图像、css、js 等),那么它就是可疑的
  7. JS 和 Cookie 挑战 - 如果它不能通过它,那么它是可疑的

为每个测试设置一个分数(不要给所有相同的“值”,因为有些更重要)并结合数据将提供最佳结果。

@xpn-security:很高兴了解网络迷宫。谢谢。