У меня есть apache 2.2.29-1.4 с mod_security 2.8.0-5.25, который является обратным прокси-сервером с mod_proxy_http для локального Java-приложения.
У меня есть ложные срабатывания по некоторым URL-адресам, и я хотел бы внести некоторые правила OWASP в белый список только для указанных URI.
В настоящее время глобальный белый список правила с
SecRuleRemoveById 960010
отлично работает
Но оба
<LocationMatch ^/(myapp/mymethod.do.*)$>
SecRuleRemoveById 960010
ProxyPassMatch http://localhost:8080/$1
</LocationMatch>
и
<Location "/myapp/mymethod.do">
SecRuleRemoveById 960010
</Location>
ProxyPass /myapp/mymethod.do http://localhost:8080/myapp/mymethod.do
ProxyPassReverse /myapp/mymethod.do http://localhost:8080/myapp/mymethod.do
не заносите правило в белый список.
Я также попытался добавить новые правила mod_security, чтобы изменить существующие, но добавление URI в белый список всегда терпит неудачу ...
Любое понимание?
960010 - это правило фазы 1. Фаза 1 проходит перед <location>
директивы обрабатываются.
Поэтому вам нужно написать правило, в котором ModSecurity будет выполнять фильтрацию местоположения за вас, а не за Apache.
Что-то вроде этого:
SecRule REQUEST_URI "^/myapp/mymethod.do" "phase:1,id:12345,nolog,ctl:ruleRemoveById=960010"
Это в основном создает другое правило, которое срабатывает только для этого URL-адреса, и удаляет это правило. Обратите внимание, что это необходимо добавить ДО того, как будет определено правило 960010. Я дал идентификатор правила 12345, но изменил его на любой свободный идентификатор менее 100000 (выше это зарезервировано для наборов правил, таких как OWASP).
Подробнее обо всем синтаксисе в справочном руководстве: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual