如何添加GCP Cloud Armor规则阻止根路径后带?的URL请求
解决GCP Cloud Armor拦截根地址带问号请求的方案
你之前的问题出在对Cloud Armor字段的理解上:request.path仅包含URL中域名到问号之前的路径部分,像/?或/?test这类请求,request.path的值始终是/,问号及后续内容属于查询字符串,不会出现在request.path里,所以用request.path匹配问号的正则肯定无效。
以下是两种可行的拦截规则方案:
方案1:精准拦截根路径下带问号的请求(含空查询)
直接通过完整URL匹配根路径后带有问号的场景,覆盖/?和/?xxx两种情况:
request.path == '/' && request.raw_url.matches('.*/\\?.*')
这里\\?是RE2语法中对问号的转义(问号在正则里属于特殊元字符,必须转义才能匹配实际的问号符号)。
方案2:拆分场景组合拦截
如果需要分别匹配空查询和带内容的查询,也可以用组合条件:
request.path == '/' && (request.query != '' || request.raw_url.matches('.*/\\?$'))
其中request.query != ''匹配/?test这类带查询内容的请求,request.raw_url.matches('.*/\\?$')匹配/?这种仅带问号的空查询请求。
配置规则时,将动作设置为DENY并指定合适的优先级,之后可通过发送对应测试请求验证拦截效果。
内容的提问来源于stack exchange,提问作者ヒュジャク ピョテレク
相关产品推荐
相关产品推荐

