Skip to content

网道

如何防止非浏览器的访问

参考链接 - https://blog.sicuranext.com/sec-fetch-and-client-hints-a-powerful-tool-against-automation/

利用 Sec-fetch-* 标头识别机器人

正常的请求

Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
  • Sec-Fetch-Dest: documen 是正常的浏览器加载页面,如果是无头浏览器发出的请求,这个字段通常是 empty、script,或者被省略。
  • Sec-Fetch-Mode: navigate 表示这个请求是真实页面浏览触发的,不是脚本触发的。自动化工具的这个字段通常是 no-cors 或 cors。
  • Sec-Fetch-Site: none 表示这是当前网站第一个加载的页面。无头浏览器的这个字段通常设为 cross-site。
  • Sec-Fetch-User: ?1 表示这是真实用户行为触发的。如果是通过 fetch API calls, iframes, images, preloads, passive navigations 等触发的,这个字段就根本没有。

防机器人逻辑

  • 检查 Sec-Fetch-User 标头等于 ?1
  • 检查 Sec-Fetch-Site 标头等于 same-origin 或none
  • 否则,拒绝该请求