libmodsecurity + owasp crs + nginx: регулярное выражение для дефиса в имени параметра POST в пользовательском правиле исключения

libmodsecurity + owasp crs + nginx: регулярное выражение для дефиса в имени параметра POST в пользовательском правиле исключения

paranoia_level = 3 modsecurity запрещает загрузку непечатаемых символов с помощью полезных нагрузок POST (application/x-www-form-urlencoded) на этапе 2 с использованием правила 920272 owasp crs версии 3.3.4

Однако иногда это срабатывает и для паролей в кодировке UTF-8.

Первая попытка деактивировать правило 920272 сработала:

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

но он отключает защиту ВСЕХ полей, загруженных с помощью POST.

Цель: деактивировать 920272 только для 2 параметров POST:

  • пароль
  • скрытый-пароль

Здесь все становится сложнее:

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 Имя параметра может быть регулярным выражением. Хорошо. Пробовал несколько (см. выше) и не получилось.

Ты знаешь почему ?

Связанный контент