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

如何配置ModSecurity与OWASP-CRS允许含()的ERDDAP查询?

解决ModSecurity拦截ERDDAP含(/)的查询请求问题

步骤1:定位触发拦截的具体规则ID

首先查看Apache错误日志,找到ModSecurity拦截请求时记录的规则ID:

sudo grep "ModSecurity: Access denied" /var/log/apache2/error.log

日志里会包含类似[id "942100"]的字段,这就是触发拦截的规则ID(通常是OWASP CRS中SQL注入相关的规则,比如942系列)。

步骤2:添加自定义规则排除拦截

根据实际场景选择以下一种方式,修改ModSecurity配置:

方式一:针对ERDDAP路径全局排除

如果ERDDAP的请求都以固定路径开头(比如/erddap/),可以通过自定义规则对该路径下的请求禁用触发拦截的规则:

  1. 创建自定义规则文件:
    sudo touch /etc/modsecurity/custom-erddap-rules.conf
    
  2. 编辑文件,添加内容(替换942100为实际找到的规则ID,多个ID用逗号分隔):
    # 允许ERDDAP路径下的请求包含()字符,排除指定SQL注入规则
    SecRule REQUEST_URI "@beginsWith /erddap" "id:100000,phase:1,nolog,pass,ctl:ruleRemoveById=942100,ctl:ruleRemoveById=942110"
    
  3. 在Apache的ModSecurity配置中引入该文件:
    编辑/etc/apache2/mods-available/security2.conf,在IncludeOptional /etc/modsecurity/crs/*.conf之后添加:
    Include /etc/modsecurity/custom-erddap-rules.conf
    

方式二:针对特定参数精准排除

如果只有某个特定参数(比如ERDDAP的query参数)包含括号,可以只对该参数禁用规则,避免影响其他请求:
在自定义规则文件中添加:

# 允许ERDDAP的query参数包含()字符,排除指定规则对该参数的检查
SecRule ARGS_NAMES "@streq query" "id:100001,phase:1,nolog,pass,ctl:ruleRemoveTargetById=942100,ARGS:query"

步骤3:验证配置并重启服务

保存配置后,重启Apache使规则生效:

sudo systemctl restart apache2

测试包含(/)的ERDDAP查询请求,确认不再被拦截,同时检查日志确保无异常拦截记录。

注意事项

  • 尽量精准排除规则,避免全局禁用OWASP CRS核心规则,保障服务器安全性。
  • 定期查看Apache错误日志,及时发现新的误拦截情况并调整规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:06:11