如何利用 ModSecurity WAF 拦截常见的 SQL 注入攻击实战

云婷同学_4810

云婷同学_4810

2026-07-19

681人浏览

原创

ModSecurity 拦截 SQL 注入需确保请求体解析开启、解码归一化到位、CRS 初始化规则优先加载;应以 CRS 为主,针对性补充自定义规则,并通过日志观察、先 log 后 block、评分机制保障精准拦截。

如何利用 modsecurity waf 拦截常见的 sql 注入攻击实战

直接用 ModSecurity 拦截 SQL 注入,关键不是堆规则,而是让规则真正“看得清、判得准、拦得住”。光写几条含 union select 的正则,90% 的真实攻击都会绕过——因为攻击载荷早被 URL 编码、大小写混用、注释分隔、空格替换等手法变形了。

基础配置必须先到位

规则再强,环境没配好也白搭。以下三项不启用,绝大多数 POST 型注入(比如登录框输 admin' OR '1'='1)根本进不了检测逻辑:

  • 开启请求体解析:加 SecRequestBodyAccess On,否则 ModSecurity 默认不读 POST 数据,只看 URL 参数
  • 启用解码与归一化:在规则中显式调用 t:urlDecodeUni,t:lowercase,确保 %27union%20select 和 UNION SELECT 都能被统一匹配
  • 加载顺序不能错:CRS 的初始化规则(如 REQUEST-901-INITIALIZATION.conf)必须在 SQLI 规则前加载,否则 ARGS、REQUEST_COOKIES 等变量为空,规则全失效

优先用 CRS,再补漏点

别从零手写整套规则。OWASP ModSecurity CRS 已覆盖主流注入模式(布尔型、报错型、时间盲注、union-based 等),生产环境应以 CRS 为主干,仅对漏报场景补充自定义规则:

  • 确认 CRS 已启用且版本不低于 v3.3(推荐 v4.x),尤其检查 REQUEST-942-APPLICATION-ATTACK-SQLI.conf 是否加载
  • 针对业务特有参数(如 /api/v2/order?ref_id=xxx)可单独加规则,避免全局规则误杀
  • 补充规则示例(放在 custom-sqli.conf 中):
    SecRule ARGS "@rx \b(?:and|or|x?or|not)\b\s+\d+\s*=\s*\d+" "id:1001,phase:2,block,msg:'SQLi: Boolean-based number injection',t:urlDecodeUni,t:lowercase"

应对常见绕过手法

攻击者不会老老实实输 ' or 1=1--,真实流量中这些变形高频出现,规则需主动适配:

  • 注释符+换行绕过:如 id=1%23foo%0D%0Aunion%20select(# + CRLF),规则里要匹配 (?:--|%23|/\*)\s*[\r\n\t ]* 后接关键字
  • 双写/大小写混用:如 unioon selselect 或 UnIoN SeLeCt,靠 t:lowercase 统一处理后再匹配
  • 空格替换为其他分隔符:如 union%09select(Tab)、union%0aselect(换行),用 t:urlDecodeUni 解码后,正则中用 \s+ 或 [[:space:]]+ 匹配任意空白

上线前必须做的三件事

规则上线不是“加完就 block”,否则可能大面积误拦截导致业务中断:

  • 日志全开:设置 SecAuditLogRelevantStatus "^(?:[4-5]|(?:2|3)[0-9])",确保所有 2xx–5xx 请求都进审计日志
  • 先 log 后 block:新规则初期用 log,tag:'sqli-test' 替代 block,观察一周真实流量匹配情况再切到阻断
  • 引入评分机制:单条规则触发只记 3 分,累计 ≥5 分才拦截,避免单一变形触发即封禁正常用户
PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

20

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

20

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

20

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

20

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

XORM框架零基础入门教程
XORM框架零基础入门教程

本专题梳理XORM框架的入门路径,从框架定位、依赖安装、连接数据库到跑通第一个增删改查示例,讲清Engine初始化、日志开启与项目目录规划,并对比GORM等同类ORM的差异,帮助Go开发者建立整体认知。

2026.11.04

0

15

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

2026.11.03

40

18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习