我试图为未知名称的参数设置ModSecurity白名单,但匹配值。例如,我想列出任何时间戳参数(例如timestamp=2016-01-01 00:00:00
)。目前,此触发规则为981173 (Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded)
ModSecurity:值白名单参数
以下内容将生效,但如果至少有一个匹配项将跳过对所有参数的检查,因此它不会捕获https://www.example.com/?timestamp=2016-01-01+00:00:00&badvalue=2016-01-01+00:00:00:00
中的badvalue
参数。
SecRule ARGS "@rx ^2[0-9]{3}-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]$" \
"id:'99001', phase:1, nolog, pass, t:none, \
ctl:ruleRemoveTargetByTag=OWASP_CRS/WEB_ATTACK/SQL_INJECTION;ARGS"
如果我硬编码参数名称,下面的工作。
SecRule ARGS:timestamp "@rx ^2[0-9]{3}-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]$" \
"id:'99001', phase:1, nolog, pass, t:none, \
ctl:ruleRemoveTargetByTag=OWASP_CRS/WEB_ATTACK/SQL_INJECTION;ARGS:timestamp"
我试过以下,但他们没有工作。
SecRule ARGS "@rx ^2[0-9]{3}-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]$" \
"id:'99001', phase:1, nolog, pass, t:none, \
ctl:ruleRemoveTargetByTag=OWASP_CRS/WEB_ATTACK/SQL_INJECTION;/%{MATCHED_VAR_NAME}/"
SecRule ARGS "@rx ^2[0-9]{3}-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]$" \
"id:'99001', phase:1, nolog, pass, t:none, \
ctl:ruleRemoveTargetByTag=OWASP_CRS/WEB_ATTACK/SQL_INJECTION;MATCHED_VAR_NAME"
ModSecurity可以吗?有没有办法使用MATCHED_VAR_NAME
这个用例?我宁愿不必为每个可能包含时间戳记的参数名称添加一条规则。
谢谢。我结束了每一个论点的补充。 –