Назад | Перейти на главную страницу

Форма отправки запрещена при включении внедрения modsecurity crs sql

Мой сайт включает 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, тогда ваш выбор:

  1. Прекратите использовать это правило, включив следующую конфигурацию:

    SecRuleRemoveById 981173

  2. Прекратите проверять это конкретное поле, включив следующую конфигурацию:

    SecRuleUpdateTargetById 959071 !ARG_NAMES:'field_cl_address[0][format]'

  3. Вручную отредактируйте правило, чтобы изменить {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>