AWS WAF正则过严误拦URI,如何调整匹配控制字符?
调整AWS WAF控制字符检测正则以避免误匹配
原正则表达式(?i)0x([01][0-9A-F]|7F)用于检测控制字符的十六进制编码,但会误匹配/...120x120.png这类正常URI——因为其中的120x片段会被正则识别为符合0x开头的模式。
解决方案
通过添加负向后行断言来排除0x前面是数字的情况,精准匹配真正的控制字符编码:
(?i)(?<!\d)0x([01][0-9A-F]|7F)
(?<!\d)是负向后行断言,确保0x的前面不是数字,这样120x中的0x(前面是数字2)就不会被匹配,而像0x12这类合法的控制字符编码会被正确识别。
如果AWS WAF支持单词边界语法,也可以使用以下正则实现类似效果:
(?i)\b0x([01][0-9A-F]|7F)
\b表示单词边界,仅当0x作为一个独立的单词起始部分时才会匹配,避免了数字后跟随0x的误触发场景。
注意事项
优先选择负向后行断言的方案,因为单词边界\b在某些特殊字符(如符号、下划线)附近可能出现不符合预期的匹配,而负向预查更精准针对本次误匹配的核心场景。
内容的提问来源于stack exchange,提问作者LTP
相关产品推荐
相关产品推荐

