真正有效的识别方式是看行为模式、字段组合和异常上下文;攻击者常将恶意载荷藏于UA、Referer、Cookie等HTTP头部,需关联IP、请求行与UA等字段还原攻击链。

不能只盯着 URL 里有没有 SELECT 或 <script></script>,真正有效的识别方式是看行为模式、字段组合和异常上下文。攻击者常把恶意载荷藏在看似合法的请求中,比如伪装成浏览器 UA、混入 Referer 或 Cookie,甚至用 URL 编码绕过基础检测。
抓关键字段,串联攻击链
单看某一行日志很难判断,但把 $remote_addr(IP)、$request(完整请求行)、$http_user_agent(UA)三者关联起来,就能还原一次攻击动作:
- 同一 IP 在 1 分钟内发起 10+ 次含
'、sleep(、UNION SELECT的请求,且 UA 固定为sqlmap/1.0.8.15#dev,基本可判定为自动化扫描 - 某个 UA 字符串本身包含
updatexml(或user(),比如User-Agent: Mozilla/5.0' OR updatexml(1,concat(0x7e,user(),0x7e),1) OR ',说明攻击者正利用 UA 字段做注入 - Referer 值里出现
javascript:或data:text/html,配合返回状态码 200,可能是反射型 XSS 的试探
不只扫 URL 参数,还要查 HTTP 头部
现代攻击早就不局限于 ?id=1' 这种明显写法。很多 SQL 注入和 XSS 载荷会出现在以下位置:
-
User-Agent:用于绕过前端过滤,直接拼进后端日志或数据库操作语句 -
Referer:常被用来触发存储型 XSS,尤其当页面会回显 Referer 内容时 -
Cookie:若后端未过滤就写入数据库或用于构造 SQL,可能成为注入入口 -
X-Forwarded-For:伪造 IP 时若未校验,也可能带入恶意内容
检查方法:用 awk -F'"' '{for(i=2;i/) print ,$i}' access.log 扫描所有双引号包裹的字段,覆盖 UA、Referer、Cookie 等。
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
用正则匹配“结构特征”,而非单纯关键词
攻击载荷经常编码、变形、拆分,靠简单字符串匹配容易漏掉。应关注语义结构:
- SQL 注入结构:
'\s+OR\s+\d+=\d+、sleep\(\d+\)、UNION\s+SELECT.*?FROM、ORDER\s+BY\s+\d+ - XSS 结构:
]+on\w+=、javascript:[^;]{10,}、%3Cscript%3E[\s\S]{5,}%3C/script%3E - 路径遍历 + 注入混合:
\.\./etc/passwd后紧跟' OR '1'='1,说明攻击者在探测多个漏洞点
注意:匹配时要加 i 标志忽略大小写,对 URL 编码内容做解码后再比对更可靠(可用 Python 脚本批量 decode)。
排除干扰,聚焦真实风险
不是所有匹配项都代表攻击,需结合响应状态与行为频率过滤:
- 排除爬虫:UA 包含
Googlebot、Bingbot、Spider等,且请求路径合理、无高危参数 - 排除误报:开发人员本地测试留下的
?debug=1或test.php?id=1,可通过白名单 IP 或路径过滤 - 关注“成功响应”:状态码为 200 且响应体较大(如 >5KB)的恶意请求,比返回 403/500 更危险——说明载荷已执行并拿到结果
- 时间窗口聚合:用
awk '{print $1,$4}' access.log | sort | uniq -c | sort -nr | head -10快速发现高频异常 IP










