You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ModSecurity SQL注入规则仅拦截带引号输入的问题求助

ModSecurity 942100规则SQL注入拦截异常问题解决

问题现象

在PHP应用中配置ModSecurity后,使用REQUEST-942-APPLICATION-ATTACK-SQLI.conf中的942100规则检测SQL注入时出现如下异常:

  • 带引号的SQL语句(如SELECT * from users WHERE name='test')能被正常拦截
  • 不带引号的语句(如SELECT * from users WHERE id=1)或无WHERE条件的查询语句(如Select * from users)无法被拦截,请求直接存入数据库

场景截图

场景1(正常拦截)

正常拦截场景1
正常拦截场景2

场景2(拦截失败)

拦截失败场景1
拦截失败场景2

原因分析

942100规则的核心逻辑是检测带单/双引号的SQL注入模式,主要针对通过闭合字符串引号构造的注入攻击。而不带引号的数字型注入、无WHERE条件的全表查询这类场景,不在该规则的检测范围内,因此无法触发拦截。

解决方案

1. 启用更多CRS SQLI规则

REQUEST-942-APPLICATION-ATTACK-SQLI.conf中包含多个覆盖不同场景的SQL注入规则,除942100外,需启用以下规则补充检测:

  • 942110:检测基于注释的SQL注入
  • 942120:检测基于UNION的SQL注入
  • 942130:检测基于错误的SQL注入
  • 942140:检测基于布尔的SQL注入
  • 942150:检测基于时间延迟的SQL注入
    确保这些规则未被注释,在CRS配置中正常启用。

2. 扩大规则检测范围

检查ModSecurity配置,确保规则扫描请求参数、POST body、JSON数据等所有可能携带注入内容的位置。可通过调整SecRule的目标字段实现,示例:

SecRule REQUEST_COOKIES|REQUEST_BODY|ARGS_NAMES|ARGS "@rx SELECT.*FROM" "id:100001,phase:2,t:none,block,msg:'检测无引号SQL注入尝试'"

3. 升级至最新版CRS

OWASP Core Rule Set(CRS)会持续更新规则覆盖新型攻击,若使用旧版本,建议升级到最新版,新版本对无引号SQL注入场景有更完善的检测逻辑。

4. 自定义补充规则

若现有规则仍无法覆盖业务场景,可添加自定义规则:

  • 针对无WHERE条件的全表查询:
SecRule ARGS|REQUEST_BODY "@rx (?i)^SELECT\s+\*\s+FROM\s+\w+" "id:900001,phase:2,block,msg:'检测全表查询SQL尝试',severity:CRITICAL"
  • 针对数字型无引号注入:
SecRule ARGS|REQUEST_BODY "@rx (?i)WHERE\s+\w+\s*=\s*\d+" "id:900002,phase:2,block,msg:'检测无引号数字型SQL注入尝试',severity:CRITICAL"

5. 检查基础配置正确性

确认SecRuleEngine设置为On(而非DetectionOnly),确保规则处于拦截模式;同时检查是否完整加载了CRS所有规则文件,无依赖遗漏。

内容的提问来源于stack exchange,提问作者user3003366

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 11:22:32