JA3 ↗ 和 JA4 ↗ 指纹 根据 TLS 客户端发起连接的方式来识别它们。每个客户端类型(浏览器、bot 或应用程序)都有不同的连接特征,因此生成的指纹可作为跨不同目标 IP、端口和证书的稳定标识符。
JA4 通过对 ClientHello 扩展进行排序改进了 JA3,这减少了现代浏览器的唯一指纹数量,并使分组更加容易。
如果您希望使用 JA4 指纹和 Signals Intelligence,您的 Workers 脚本必须能够处理数组中任何字段缺失的情况,包括:
- JA4 指纹可能缺失的情况。
ja4Signals数组可能缺失的情况。- 值为
NaN或Infinity的结果将被排除在数组之外。
{
"ja4Signals": {
"h2h3_ratio_1h": 0.98826485872269,
"heuristic_ratio_1h": 7.288895722013e-05,
"reqs_quantile_1h": 0.99905741214752,
"uas_rank_1h": 901,
"browser_ratio_1h": 0.93640440702438,
"paths_rank_1h": 655,
"reqs_rank_1h": 850,
"cache_ratio_1h": 0.18918327987194,
"ips_rank_1h": 662,
"ips_quantile_1h": 0.99926590919495
},
"jaSignalsParsed": {
"ratios": {
"h2h3_ratio_1h": 0.98826485872269,
"heuristic_ratio_1h": 7.288895722013e-05,
"browser_ratio_1h": 0.93640440702438,
"cache_ratio_1h": 0.18918327987194
},
"ranks": {
"uas_rank_1h": 901,
"paths_rank_1h": 655,
"reqs_rank_1h": 850,
"ips_rank_1h": 662
},
"quantiles": {
"reqs_quantile_1h": 0.99905741214752,
"ips_quantile_1h": 0.99926590919495
}
}
}当缺少 JA4 信号时,输出如下所示:
{
"ja4Signals": {},
"jaSignalsParsed": {
"ratios": {},
"ranks": {},
"quantiles": {}
}
}JA3 或 JA4 指纹是基于 SSL/TLS 的标识符,在特定情况下,日志中的值可能为空(null)或为空字符串:
- 由于 JA3 和 JA4 是在 TLS(SSL)握手期间计算的,因此对于未加密的 HTTP 流量,这些值不会存在。
- 当 Worker 向 Cloudflare 内部网络中的区域(未代理的 O2O 流量)或第三方源发送请求时,或当 Worker 将流量路由到目标区域时,该字段可能为空。
- 当 Bot Management 本身因某个请求被跳过时,指纹可能不存在,因为该功能负责计算并填充这些值。
- 使用 TLS Session Resumption ↗ 时,一旦初次 TLS 握手成功完成,后续连接将被简化处理,不再进行指纹计算。
通常,O2O 流量应包含 JA3 或 JA4 指纹,除非使用了 Worker 将流量从终端用户(面向客户端)区域路由到目标区域。
要在可能为 bot 的请求上获取更多信息,请在以下工具中使用这些 JA3 和 JA4 指纹:
- Bot 分析 (Bot Analytics)
- 安全事件 (Security Events) 和 安全分析 (Security Analytics)
- 分析 GraphQL API,特别是 HTTP Requests 数据集
- 日志 (Logs)
要调整您的应用程序对特定指纹的响应方式,请在以下工具中使用它们:
一组相似的请求可能会共享相同的 JA3 指纹。因此,JA3 在阻止传入威胁时可能很有用。例如,如果您注意到现有防御措施未捕获 bot 攻击,请创建一个自定义规则,阻止或质询用于攻击的 JA3。
或者,如果现有防御措施阻止了实际上合法的流量,请使用 Skip 操作创建一个自定义规则,允许在友好请求中看到的 JA3。
如果您想通过 Bot Management 立即解决误报或漏报,JA3 也可能会很有用。
通常,移动端应用程序流量会在不同设备和用户之间产生相同的 JA3 指纹。这意味着您可以通过其 JA3 指纹识别您的移动端应用程序流量。
使用 JA3 指纹允许来自您移动端应用程序的流量,但阻止或质询剩余流量。