POST提交含Location:文本时返回403 Forbidden错误的问题求助
问题根因
触发了Comodo WAF的ID为211080的防护规则,该规则用于拦截HTTP响应拆分攻击,会匹配请求参数中「换行后紧跟Location:/Content-Type:/Set-Cookie:这类HTTP响应头格式」的内容,你提交的活动描述恰好符合这个匹配特征,属于规则误拦截。
解决方案
方案1:有服务器管理权限(推荐,不影响业务逻辑)
优先选择粒度最细的配置,避免降低全站防护等级:
- 仅对
EventDescription参数放行该规则,在Apache配置文件或者站点根目录的.htaccess中添加如下配置:
<IfModule mod_security2.c> SecRuleUpdateTargetById 211080 "!ARGS:EventDescription" </IfModule>
- 如果需要仅对提交接口生效,可以再加路径限制:
<IfModule mod_security2.c> <Location /myadminfolder/adminAddEvent.php> SecRuleUpdateTargetById 211080 "!ARGS:EventDescription" </Location> </IfModule>
如果不需要这么精细,也可以直接对该接口禁用这条规则:
<IfModule mod_security2.c> <Location /myadminfolder/adminAddEvent.php> SecRuleRemoveById 211080 </Location> </IfModule>
方案2:无服务器管理权限(改业务代码适配)
前端提交时对EventDescription的内容做转义,避开规则匹配,后端接收后还原即可:
- 方法1:前端将内容做Base64编码后提交,PHP后端用
base64_decode()解码后再入库 - 方法2:前端提交前把内容里的英文冒号临时替换为中文冒号,或者把
\nLocation:这类匹配特征替换为自定义标记,后端接收后替换回原格式 - 方法3:前端用
encodeURIComponent()编码内容后提交,PHP后端用urldecode()解码后处理
注意事项
不要直接全局禁用ID为211080的规则,避免站点失去对HTTP响应拆分攻击的防护能力。
内容的提问来源于stack exchange,提问作者MirrorMirror
相关产品推荐
相关产品推荐

