Cloudflare Bot Score 证据与日志
解读 Cloudflare Bot Score、Bot Management 变量和 Logpush 记录,不把评分、挑战或 HTTP 状态当作身份证明。
BotBrowser Team
Cloudflare Bot Score 是请求级信号,不是透明的身份测试。Cloudflare 公开了 1 到 99 的分数范围和一些变量,但决策输入及权重并不是逐字段公开的解释。本文基于公开来源,没有报告 BotBrowser 或 Cloudflare 区域运行结果。
TL;DR
- Cloudflare 将
BotScore文档化为 1 到 99。低分表示 Cloudflare 认为自动化更可能,高分表示认为请求更可能来自真人;两者都不是对某个人的判定。 - 文档中的
0是例外,表示 Bot Management 没有评估该请求;它不表示安全,也不表示真人。 cf.bot_management.score、BotScoreSrc和BotTags是文档定义的请求或事件字段。字段是否可用取决于产品、套餐、数据集和记录上下文。challenge动作是安全流程结果。HTTP 状态是响应结果。应将两者与分数并列保存,而不是视为请求者的身份或原因。- 只记录支持或发布决策所需的有限字段。不要推断私有特征权重、为某人收集指纹,或声称挑战证明真人通过了验证。
目录
读取公开字段
Cloudflare 的 Bot Score 参考文档定义了 1 到 99 的分数。文档举例称,1 表示 Cloudflare 相当确定请求是自动化的,99 表示相当确定请求来自真人。这描述的是对单次请求的可能性评估,不会识别个人、揭示完整模型解释或证明意图。
Bot Management 变量页面列出 cf.bot_management.score、cf.bot_management.verified_bot 和 cf.bot_management.static_resource 等变量。verified_bot 表示 Cloudflare 允许的机器人,不表示已验证真人;static_resource 描述配置中的资源类别,不表示请求由谁发起。HTTP requests Logpush 数据集列出 BotScore、BotScoreSrc 和 BotTags 等字段。字段名称不保证每个区域、套餐、事件或历史行都有值。记录字段时也应记录数据集和可用状态。
如果数据集提供 BotScoreSrc,它可补充公开的来源元数据,但不会披露检测器的全部输入。机器人检测引擎文档公开描述引擎类别,不提供可根据浏览器属性重算分数的完整权重表。因此日志审查应引用公开字段定义,而不是编造权重解释。要区分兼容性记录与个人画像,可参阅信号分组与观察限制和V8Log 运行时证据指南。
建立受限证据记录
使用稳定的请求标识,只保留责任方能够据此采取行动的输入。保留来源 URL 和架构版本,以便之后区分字段缺失和数据集变更。下面是文档模板,不是观察到的 Cloudflare 输出:
{
"recordType": "cloudflare-bot-evidence",
"schema": "public-fields-only-v1",
"requestId": "redacted-request-01",
"testedOn": "2026-10-29",
"dataset": "zone/http_requests",
"fields": {
"BotScore": null,
"BotScoreSrc": null,
"BotTags": [],
"challengeAction": "not-recorded",
"httpStatus": null
},
"availability": "source-based-fixture",
"interpretation": "No runtime result; consult the cited field documentation."
}
null 值和 source-based-fixture 标签是有意设置的,以免模板被误认作区域导出。在获得授权的支持记录中,用实际返回值替换它们,保留原字段名;除非有记录在案的需求,否则删除 URL、cookies、请求正文、账户标识和完整请求头。字段缺失时应区分 not-enabled、not-in-dataset、null 和 not-requested。这些状态回答不同的运维问题。W3C 指纹指导解释了为何组合信号会增加隐私风险。
区分评分、挑战和 HTTP 结果
支持或发布审查收到多项记录时,可使用下表。先将每个观察结果归入所属层,再判断发生了什么变化。
| 观察结果 | 可以支持的判断 | 不能证明的结论 | 下一项检查 |
|---|---|---|---|
BotScore 1-99 | Cloudflare 对该请求定义的可能性信号 | 个人身份、特征权重、意图或通用机器人判定 | 确认套餐、数据集、时间和 BotScoreSrc |
BotScoreSrc 或 BotTags | 数据集中存在时的公开来源或标签元数据 | 完整检测轨迹或每个标签的原因 | 查阅对应变量与 Logpush 架构版本 |
challenge 动作 | 安全流程被选择或呈现 | 请求者有恶意、是真人或已成功验证 | 分别记录挑战结果和应用策略 |
HTTP 200、403 或其他状态 | 客户端或日志观察到的响应结果 | 响应原因、发起者,或真人是否通过挑战 | 通过责任方控制的 ID 关联时间、路径和动作记录 |
表中各行不能互相推导。高分后出现 403 不能证明真人被拦截。低分后出现 200 不能证明自动化被接受。challenge 后出现 200 也不能证明真人解决了挑战,因为应用可能因多种策略或流程原因返回响应。保留事件顺序和每条记录的责任方,不要将其合并成一个标签。
说明推断边界
公开文档支持对具名字段的含义和范围作说明,但不支持关于隐藏权重、检测器完整输入向量或请求者身份的主张。MDN 指纹识别术语将指纹识别描述为组合浏览器和设备信息以区分用户或设备。正因如此,评分日志不应变成跨上下文指纹。
将 score、challengeAction 和 httpStatus 放在不同列。先写有限事实:“数据集 Y 的记录在时间 Z 包含 Cloudflare 分数 X。”再写运维动作:“应用在动作 R 后返回状态 Q。”避免写“Cloudflare 知道这是机器人”或“用户证明了自己是真人”。BotBrowser 无法暴露 Cloudflare 的私有模型输入或权重、强制挑战结果,也无法把 HTTP 状态变成身份结论。Cloudflare 字段文档、套餐可用性或数据集架构变化时,重新核对来源。
BotBrowser 支持自动化经授权的页面流程并观察浏览器可见状态,能力说明见自动化一致性文档;但它不能读取 Cloudflare 区域或生成 BotScore、BotScoreSrc 和 BotTags,这些字段必须来自 Cloudflare 已配置的产品与数据集。
来源
- Cloudflare Bot scores
- Cloudflare Bot Management variables
- Cloudflare HTTP requests Logpush fields
- Cloudflare bot detection engines
- W3C Fingerprinting Guidance
- MDN Fingerprinting glossary
实践结论
将 Cloudflare 分数和公开字段作为范围明确的请求证据。把挑战动作与 HTTP 结果分开,记录字段可用性和时间,并止步于推断权重、身份或确定的人类意图。将字段加入生产支持架构前,先在 Cloudflare 当前参考文档中核对准确的数据集和套餐。
本文属于指南: 什么是浏览器指纹?原理、风险、信号与隐私边界