我只是想更好地理解这个正则表达式:
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
我理解重写和_REQUEST。我只是想更好地理解正则表达式。
由此,我假设%符号前面的反斜杠意味着它将允许%。是否也允许使用管道和支架?
允许百分号的目的是什么?这不就是用十六进制字符打开攻击的可能性吗?
答案 0 :(得分:2)
括号中的部分说:
等号或左方括号或百分号,后跟0到2次的任何数字或大写字母。
我不知道它的目的是什么。
答案 1 :(得分:1)
在最高级别,正则表达式可以分为3个部分,以“|”分隔字符,表示逻辑OR。
第1部分:=
第2部分:\[
第3部分:\%[0-9A-Z]{0,2}
与这些子表达式中的任何一个匹配的字符串将匹配整个表达式。
第1部分仅表示字符串是否由一个字符组成,即等号:=
。
第2部分表示该字符串由一个字符组成,该字符是左括号字符:[
。反斜杠用于转义左方括号字符,它在正则表达式中具有特殊含义(参见第3部分)
第3部分由两部分组成。首先,\%
表示对于与此表达式匹配的字符串,它必须以百分比'%'字符开头。反斜杠是为了逃避它,因为它在正则表达式中也有特殊含义。下一个句段[0-9A-Z]
表示后面的字符可以由0到9之间的字符或A-Z之间的字符组成。任何一个都应该工作正常。最后一个段{0,2}
修改了上一个段,并表示可以接受前一个段中指定的0到2个字符。因此以下所有字符串都匹配第3部分:
%
%A
%B
%0
%3
%AF
%1G
%8M
以下字符串与第3部分不匹配:
'' (the empty string)
1A (doesn't start with %)
%3f (lowercase f is not allowed)
%F5A (3 characters following the percent sign)
我发现使用在线工具帮助构建/解密正则表达式很有帮助,例如:http://rubular.com/