알 수없는 이름의 인수에 대해 값과 일치하는 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
에 포착하지 않습니다.
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
를 사용할 방법이 있습니까? 타임 스탬프를 포함 할 수있는 모든 인수 이름에 대해 규칙을 추가하지 않아도됩니다.
감사합니다. 나는 단지 각각의 주장을 덧붙였다. –