Мой сайт включает Ubuntu 16, Apache 2.4, php 5.6, и я использую CMS Drupal 8
Я установил модуль mod_security. Я активировал его, затем включил modsecurity_crs_41_sql_injection_attacks.conf
.
Для каждой формы, когда я отправляю, у меня появляется ошибка 403 запрещено
Вы можете объяснить мне, почему все формы для отправки запрещены?
Изменить: добавить журнал ошибок Apache
[Wed Nov 15 16:53:03.324516 2017] [:error] [pid 27760] [client] ModSecurity: Access denied with code 403 (phase 2).
Pattern match "([\\\\~\\\\!\\\\@\\\\#\\\\$\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\+\\\\=\\\\{\\\\}\\\\[\\\\]\\\\|\\\\:\\\\;\\"\\\\'\\\\\\xc2\\xb4\\\\\\xe2\\x80\\x99\\\\\\xe2\\x80\\x98\\\\`\\\\<\\\\>].*?){4,}"
at ARGS_NAMES:field_cl_address[0][format].
[file "/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"]
[line "159"] [id "981173"] [rev "2"]
[msg "Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded"]
[data "Matched Data: ] found within ARGS_NAMES:field_cl_address[0][format]: field_cl_address[0][format]"]
[ver "OWASP_CRS/2.2.9"] [maturity "9"] [accuracy "8"] [tag "OWASP_CRS/WEB_ATTACK/SQL_INJECTION"] [hostname "www.d8.dev.xxxx"] [uri "/node/add/occlient/19784"] [unique_id "Wgxw738AAQEAAGxw91sAAAAO"]
Хорошо, давайте разберемся.
Правило 981173 - это правило, вызывающее проблему. Это помечает, потому что
«Предупреждение об обнаружении аномалии ограниченного символа SQL - превышено общее количество специальных символов»
Он даже сообщает вам, в каком поле проблема:
[data "Соответствующие данные:] найдены в ARGS_NAMES: field_cl_address [0] [формат]: field_cl_address [0] [формат]"]
Это правило выполняется путем запуска очень длинного регулярного выражения для каждого поля и проверки наличия 4 или более специальных символов (включая [и]). Поля с большим количеством специальных символов могут указывать на то, что кто-то пытается обойти основные проверки, которые могут выполнять серверы или программное обеспечение, путем маскировки неверной полезной нагрузки или экранирования символов.
Однако для вас ваши имена полей включают 2 символа [символа и 2] символа, что соответствует ограничению в 4 специальных символа, и, следовательно, каждый запрос блокируется. Это правило в его нынешнем виде бесполезно для защиты этой формы из-за этого.
OWASP Common Rule Set (CRS) - это набор правил, представляющий собой набор предлагаемых правил, которые не подходят для каждого сайта и должны быть настроены, прежде чем вы должны будете включить их в режиме блокировки.
В версии 3 CRS правило 981173 было перенумеровано в правило 942430 (правила были перенумерованы как часть перехода к версии 3 по причинам, которые я здесь не буду вдаваться), и они увеличили количество специальных символов, которые должны были совпадать с От 4 до 12, чтобы избежать подобных ложных срабатываний. Честно говоря, если вы просто устанавливаете CRS в первый раз, вам следует сначала перейти к версии 3, так как они проделали БОЛЬШУЮ работу, чтобы упростить установку и избежать подобных ложных срабатываний.
Если вы хотите пока оставаться на версии 2.9, тогда ваш выбор:
Прекратите использовать это правило, включив следующую конфигурацию:
SecRuleRemoveById 981173
Прекратите проверять это конкретное поле, включив следующую конфигурацию:
SecRuleUpdateTargetById 959071 !ARG_NAMES:'field_cl_address[0][format]'
Вручную отредактируйте правило, чтобы изменить {4,}
это к {12,}
поэтому вам нужно еще много совпадений, прежде чем это правило сработает. Обычно редактировать правила напрямую не рекомендуется, и вместо этого лучше иметь файл конфигурации переопределения и использовать его для изменения правил - как в первых двух примерах. К сожалению, нет возможности изменить регулярное выражение идентификаторов правил, поэтому редактирование вручную является единственным вариантом (или включите это правило и скопируйте его в новое правило с настройками в вашей конфигурации переопределения).
Поначалу может показаться странным отключение правил, но именно это и означает точная настройка набора правил в ModSecurity - отключение тех правил, которые вам не нужны, или их настройка, чтобы они не срабатывали в определенных известных полях. Уменьшает ли это безопасность, предлагаемую ModSecurity и CRS? Да, немного, но полностью безопасный сайт, который не работает, не так уж и полезен, и некоторые модификации CRS (и в частности правил SQL-инъекций) необходимы для всех, кроме простейших сайтов.
Правило 981173 - это правило, которое я обычно полностью отключаю, потому что оно очень подвержено ложным срабатываниям. Некоторое время назад я написал этот пост о других распространенных настройках, которые я делаю, чтобы остановить чрезмерную блокировку CRS 2.9: https://stackoverflow.com/questions/33989273/modsecurity-excessive-false-positives#answer-34027786
Наконец, я действительно рекомендую ModSecurity Handbook (недавно обновленный до второго издания), чтобы узнать больше о том, как все это работает: https://www.feistyduck.com/books/modsecurity-handbook/
Спасибо @BazzaDP
Я следую вашим предложениям, и он работает хорошо.
Также я удалил некоторые другие идентификаторы правил
<IfModule security2_module>
SecRuleRemoveById 973300
SecRuleRemoveById 981245
SecRuleRemoveById 981248
SecRuleRemoveById 981173
SecRuleRemoveById 981231
SecRuleRemoveById 950901
SecRuleRemoveById 981260
</IfModule>