У меня есть некоторые текстовые области в форме, которые отправляются обратно и хранятся с использованием PHP / MySQL. Однако, если пользователь нажимает клавишу return для новой строки в текстовой области, mod_security блокирует ее следующей записью журнала:
Pattern match "\\W{4,}" at ARGS:notes. [file "/etc/httpd/modsecurity-crs/base_rules/modsecurity_crs_40_generic_attacks.conf"] [line "37"] [id "960024"] [rev "2"] [msg "Meta-Character Anomaly Detection Alert - Repetative Non-Word Characters"] [data "Matched Data: \x0d\x0a\x0d\x0a found within ARGS:notes: This is Test Request #5\x0d\x0a\x0d\x0aThanks"] [ver "OWASP_CRS/2.2.9"] [maturity "9"] [accuracy "8"]
У меня такой вопрос ... Могу ли я сделать что-нибудь еще в своем коде или небольшое исключение, которое я могу сделать в mod_security? Я не хочу полностью отключать это правило, потому что оно важно, но в то же время мне нужно, чтобы пользователи могли вводить данные в текстовые области с возвратами, если они того захотят.
Спасибо.
Хорошо поздно, но ....
У вас должен быть набор настраиваемых правил, которые либо предшествуют, либо следуют наборам правил. Обычно, если вы удаляете правила или маршруты, вы делаете это в файле с низким номером CRS. Изменения в наборах правил происходят после файлы CRS.
Мы используем 10 и 65 соответственно.
Что вы должны попытаться сделать, так это создать исключение для конкретной ARG, а не полностью отключать правило, поскольку это снимает защиту.
например, SecRuleUpdateTargetById 960024! ARGS: примечания
https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#SecRuleUpdateTargetById
Попытка: одно поле не требует двойных кавычек, но несколько полей - "! ARGS: notes,! ARGS: q"
Самый простой способ - отключить правило для URL-адреса, получающего POST:
<LocationMatch /URL/path/to/application>
SecRuleRemoveById 960024
</LocationMatch>