User-Agent 能怎么用
User-Agent(UA)是客户端在请求里自报身份的字符串,能区分浏览器与自动化工具:命令行工具、扫描器与脚本库的 UA 特征相当稳定(例如命令行下载工具、HTTP 库与扫描引擎的自报标识),因此适合用来对流量主体做归类与去噪。但它由客户端自行填写,可以任意伪造或留空,只能作为线索维度之一,必须与行为特征(请求频率、路径分布、会话特征)互证后才能下结论。
基本信息
| 适用平台 | Web 服务器 access.log、正向代理日志、CDN 与 WAF 日志 |
|---|---|
| 位置 | combined 格式中引号内的最后一列;代理日志通常在 URL 之后的字段 |
| 观察点 | 工具自报标识与版本、UA 缺失或异常短、与请求行为是否匹配 |
| 分析方法 | 按 UA 聚合统计占比,再按占比异常的类别深挖 |
| 前提 | 先建立正常业务 UA 基线,避免把内部工具的默认 UA 当攻击 |
典型使用场景
- 把访问按“人工浏览器”与“自动化工具”分开,降低噪声
- 识别扫描与爆破流量:同一来源固定 UA 加高频请求
- 发现空 UA 或极短 UA 的请求,这类请求往往是定制脚本
- 判断攻击者的工具链:自报标识与版本可作为画像维度
- 为规则制定提供依据:把高频异常 UA 固化成检测规则
UA 聚合与筛查
UA 聚合与筛查
# combined 格式:按双引号切分取 UA 列(列号按实际格式调整)
awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -rn | head -15
# 找空 UA 或极短 UA 的请求
awk -F'"' 'length($6) < 10 {print $6, $1}' access.log | head -20
# 命令行工具类 UA 的请求统计
grep -Ei 'curl|wget|python-requests|go-http-client|libwww' access.log | wc -l
grep -Ei 'curl|wget|python-requests|go-http-client' access.log | awk '{print $1}' | sort | uniq -c | sort -rn | headUA 类别对照
| UA 特征 | 典型来源 | 判读要点 |
|---|---|---|
| 命令行下载工具标识 | curl、wget 等 | 出现在业务接口上通常非正常用户 |
| HTTP 库标识 | python-requests、go-http-client 等 | 常见于脚本与自动化,需结合路径判断 |
| 扫描器自报标识 | 各类扫描工具与安全引擎 | 可直接关联扫描行为,注意区分合规扫描 |
| 主流浏览器完整串 | 真实用户或伪装者 | 能被伪造,必须结合行为特征 |
| 空值或极短串 | 定制脚本、部分探测工具 | 优先深挖,占比很低但风险高 |
UA 可伪造,攻击者常直接复制浏览器串以规避拦截;把它当成身份标识会导致误判,只能作为辅助维度。
内部监控与自动化任务的默认 UA 也会出现在日志中,先建立基线再筛异常,否则会把健康检查当成攻击。