Ich versuche, eine ModSecurity-Whitelist für Argumente mit einem unbekannten Namen einzurichten, aber einen Wert übereinstimmen. Zum Beispiel möchte ich einen beliebigen Parameter, der ein Zeitstempel ist, auf die weiße Liste setzen (z. B. timestamp=2016-01-01 00:00:00
). Derzeit löst diese Regel aus 981173 (Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded)
ModSecurity: Whitelist-Argumente nach Wert
Das folgende funktioniert, aber Überprüfungen auf alle Parameter überspringen, wenn mindestens eins übereinstimmt, so dass es den badvalue
-Parameter in https://www.example.com/?timestamp=2016-01-01+00:00:00&badvalue=2016-01-01+00:00:00:00
nicht abfängt.
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"
Die folgenden funktioniert, wenn ich den Parameternamen fest codiere.
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"
Ich habe Folgendes versucht, aber sie haben nicht funktioniert.
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"
Ist dies mit ModSecurity möglich? Gibt es eine Möglichkeit, MATCHED_VAR_NAME
für diesen Anwendungsfall zu verwenden? Ich würde eher nicht für jeden Argumentnamen, der einen Zeitstempel enthalten könnte, eine Regel hinzufügen müssen.
Vielen Dank. Ich fügte einfach jedes Argument hinzu. –