
本文旨在解决modsecurity在处理特定uri和get参数(如uuid)时可能产生的误报问题。通过创建精准的modsecurity排除规则,指导用户如何针对特定的请求文件名和参数,绕过部分安全检查,从而确保应用程序的正常运行,同时维持核心的安全防护。
ModSecurity作为一个强大的Web应用防火墙(WAF),能够有效抵御多种网络攻击。然而,在某些特定的应用场景下,其默认规则可能会对合法的请求产生误报,例如当URL的GET参数包含特殊格式数据(如UUID)时,可能被误识别为恶意注入。为了解决这类问题,ModSecurity提供了灵活的白名单机制,允许我们为特定的URI或参数创建排除规则,以绕过不必要的安全检查。
ModSecurity的排除规则通过SecRule指令配合ctl:ruleRemoveTargetById动作来实现。这种方式允许我们精确地指定在何种条件下,移除哪些特定规则对哪些特定参数的检查。
一个典型的排除规则结构如下:
SecRule REQUEST_FILENAME "@endsWith /path/to/your/script.php" \
"id:1000001,\
phase:2,\
pass,\
t:none,\
nolog,\
ctl:ruleRemoveTargetById=932130;ARGS:get_param_uuid,\
ctl:ruleRemoveTargetById=941100;ARGS:another_param,\
ctl:ruleRemoveTargetById=932130;ARGS:yet_another_param"下面我们来详细解析这个规则的各个组成部分:
SecRule REQUEST_FILENAME "@endsWith /path/to/your/script.php"
id:1000001
phase:2
pass
t:none
nolog
ctl:ruleRemoveTargetById=RULE_ID;ARGS:PARAMETER_NAME
要找到需要排除的规则ID,你需要:
--H--9a073e5f-A-- [...其他日志信息...] --Z--9a073e5f-A-- Message: Access denied with code 403 (phase 2). Pattern match "..." at ARGS:uuid. [file "/etc/httpd/modsecurity.d/modsecurity_crs_41_sql_injection_attacks.conf"] [line "123"] [id "932130"] [rev "2"] [msg "SQL Injection Attack: Common SQL Injection Tautology"] [data "Matched Data: ..."] [severity "CRITICAL"] [hostname "your.domain.com"] [uri "/path/to/your/script.php"] [unique_id "9a073e5f-A"]
在[id "932130"]这一行,932130就是你需要添加到ctl:ruleRemoveTargetById中的规则ID。
为了确保你的排除规则在核心规则集(CRS)之前被处理,你应该将其放置在一个适当的配置文件中。对于OWASP CRS,通常建议将这类规则放在以下文件之一:
例如,在CentOS 7上,你可能需要将文件放置在/etc/httpd/modsecurity.d/目录下,并确保它在modsecurity_crs_10_setup.conf等CRS初始化文件之后、具体规则文件之前被加载。
假设你的应用程序在/api/v1/process.php路径下接受一个名为transaction_id的GET参数,该参数可能是UUID格式,并被ModSecurity规则ID 941100和932130误报。你可以创建如下排除规则:
# 文件名: /etc/httpd/modsecurity.d/my_custom_exclusions.conf
# 确保此文件在CRS规则之前被加载
SecRule REQUEST_FILENAME "@endsWith /api/v1/process.php" \
"id:1000002,\
phase:2,\
pass,\
t:none,\
nolog,\
msg:'ModSecurity: Whitelisting transaction_id for /api/v1/process.php',\
ctl:ruleRemoveTargetById=941100;ARGS:transaction_id,\
ctl:ruleRemoveTargetById=932130;ARGS:transaction_id"通过创建针对特定URI和参数的ModSecurity排除规则,可以有效解决因应用程序特定数据格式导致的误报问题。这种方法既能确保应用程序的正常运行,又能维持ModSecurity的核心安全防护。关键在于精准识别触发误报的规则ID,并以最小化的范围应用排除规则,同时不忘严格的测试和监控。
以上就是ModSecurity 特定URI白名单配置指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号