为oAuth.php添加.htaccess规则解决URL含空格导致的403错误
问题分析与解决
你的403错误根本不是URL空格导致的,是**ModSecurity的COMODO规则(ID 210580)**误拦截了请求:规则把谷歌OAuth返回的scope参数里的.profile(比如https:/www.googleapis.com/auth/userinfo.profile里的字段)当成了访问系统敏感文件(Linux用户家目录的.profile配置文件),所以触发了CRITICAL级别的拦截。
你加的.htaccess规则为什么没用?
你写的规则有两个明显问题:
- Apache的
<If>指令里,正则匹配得用=~运算符,==是精确字符串匹配,不认正则表达式; REQUEST_URI的值是完整路径(比如/oAuth.php),你写的正则m#oAuth.php#没限定路径开头或结尾,就算改成=~也可能误匹配其他包含这个字符串的路径,最好明确匹配结尾。
修正后的.htaccess规则
把规则改成下面这样,确保精准匹配/oAuth.php的请求:
<IfModule mod_security.c> <If "%{REQUEST_URI} =~ m#/oAuth.php$#"> SecRuleRemoveById 210580 </If> </IfModule>
如果上面的规则不生效,试试把mod_security.c换成mod_security2.c——不同环境的ModSecurity模块名可能不一样。
其他可选解决办法
- 全局修改规则文件:找到
/etc/apache2/modsecurity.d/rules/comodo_free/08_Global_Other.conf的第57行,注释或删除ID为210580的规则,但这种方法会全局禁用该规则,不如针对特定URL的规则安全。 - 调整规则匹配逻辑:要是不想完全禁用规则,可以修改规则的匹配条件,排除
scope参数里的合法.profile字符串,但需要懂点ModSecurity规则编写的基础。
内容的提问来源于stack exchange,提问作者SalmaBegum
相关产品推荐
相关产品推荐

