libmodsecurity + owasp crs + nginx: 사용자 정의 제외 규칙의 POST 매개변수 이름에 있는 하이픈에 대한 정규식

libmodsecurity + owasp crs + nginx: 사용자 정의 제외 규칙의 POST 매개변수 이름에 있는 하이픈에 대한 정규식

modsecurity의 paranoia_level = 3은 owasp crs 버전 3.3.4의 규칙 920272를 사용하여 2단계에서 인쇄할 수 없는 문자가 POST 페이로드(application/x-www-form-urlencoded)로 업로드되는 것을 금지합니다.

그러나 때로는 UTF-8로 인코딩된 비밀번호도 트리거됩니다.

규칙 920272를 비활성화하려는 첫 번째 시도는 작동합니다.

SecRule REQUEST_URI "/login" \
    id:2001,\
    phase:2,\
    pass,\
    nolog,\
    ctl:RuleRemoveById=920272"

하지만 POST로 업로드된 모든 필드의 보호가 비활성화됩니다.

목표: 2개의 POST 매개변수에 대해서만 920272를 비활성화합니다.

  • 비밀번호
  • 숨겨진 비밀번호

상황이 복잡해집니다.

SecRule REQUEST_URI "/login" \
    id:2001,\
    phase:2,\
    pass,\
    nolog,\
    ctl:RuleRemoveById=920272;ARGS:password"

잘 작동합니다.

그러나 "hidden-password" 매개변수에는 하이픈이 포함되어 있습니다. 하이픈을 가리려고 여러 번 시도했지만 성공하지 못했습니다.

나는 시도했다:

ctl:RuleRemoveById=920272;ARGS:hidden-password"
ctl:RuleRemoveById=920272;ARGS:hidden\-password"
ctl:RuleRemoveById=920272;ARGS:'hidden-password'"
ctl:RuleRemoveById=920272;ARGS:^/hidden-password/"
ctl:RuleRemoveById=920272;ARGS:^/hidden\-password/$"

그리고 아마도 몇 개 더있을 것입니다 ...

내가 얻는 오류는 다음 중 하나입니다.

  • "Not a number: password" 또는
  • "Expecting an action, got: \-password" 또는
  • "Expecting an action, got: 'hidden-password'"

또는 위의 메시지 중 하나와 유사합니다.

에 따르면https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual-%28v2.x%29#user-content-ARGS 매개변수 이름은 정규식일 수 있습니다. 좋아요. 여러 가지 방법(위 참조)을 시도했지만 실패했습니다.

왜인지 아시나요?

관련 정보