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

Исключение Mod_security работает не полностью, CSS и изображения блокируются.

Я включил в свои правила одно из следующих действий:

SecRule REQUEST_URI "@beginsWith /directory" "phase:1,id:12345,allow"
SecRule REQUEST_URI "@beginsWith /directory" "phase:1,id:12345,ctl:ruleEngine=off"

Когда я просматриваю /directory/javascript.php?sqlinjection, он позволяет отображать HTML в каталоге /, но CSS и изображения, которые находятся в корневом каталоге / css / и / images /, соответственно, не отображаются. Похоже, они заблокированы, потому что на странице есть SQL-инъекция, но для этих каталогов нет исключений.

Как я могу настроить его для полного отключения mod_security в каталоге / и отображения всех изображений и CSS?

В ModSecurity каждый запрос обрабатывается как независимый запрос, и он не знает, что вы загружаете CSS и изображения для предыдущего запроса.

Единственный способ узнать это - это то, что находится в HTTP-заголовке Referer. На самом деле я подозреваю, что это является причиной проблемы, поскольку URL-адрес ссылающейся страницы содержит то, что выглядит как SQL-инъекция, поэтому каждый загружаемый ресурс также блокируется.

Итак, у вас есть несколько вариантов:

  1. Вы можете написать аналогичные правила для / css и / images. Обратите внимание, что оба ваших правила делают одно и то же, и оба не обязательны - выберите одно или другое. Также каждое правило должно иметь независимый идентификатор, но вы повторили 12345 в обоих правилах.

  2. Вы можете отключить ModSecurity для ВСЕХ запросов. Кажется, это вызывает у вас больше проблем и решает. Очевидно, это означает, что вы теряете защиту, которую он дает, но если вы просто собираетесь позволить почти каждому запросу отключать его, то это один из вариантов.

  3. Вы можете написать новое правило для обхода ModSecurity на основе этого реферера:

    #Allow any requests for resources loaded by pages in /directory SecRule REQUEST_HEADERS:Referer "@beginsWith https://www.example.com/directory" "phase:1,id:12347,allow"

  4. Вы можете переопределить правило, затронутое для этого поля (я предполагаю, что в этом примере срабатывает правило 942100):

    #Exclude Referer HTTP Header from being checked by rule id 949110 SecRuleUpdateTargetById 942100 !REQUEST_HEADERS:Referer

Вариант 4) будет рекомендуемым способом, поэтому вы отключаете только правило, которое дает ложное срабатывание для этого конкретного поля. Обратите внимание, что могут срабатывать несколько правил, поэтому вам может потребоваться несколько исключений. Вы также заявили на предыдущий вопрос это правило 949110 сработало, но это последнее правило проверки, поэтому вам нужно знать правила, которые сработали до этого и заставили 949110 вступить в действие и отфильтровать их, как описано выше.

Это также то, как вы действительно должны предотвратить блокировку исходного PHP-скрипта, кстати, вместо того, чтобы полностью отключать ModSecurity для всего местоположения каталога /.

Честно говоря, все это довольно стандартные вещи, которые вам нужно сделать для настройки ModSecurity, поэтому рекомендуем вам прочитать об этом больше. В Руководство по ModSecurity это лучший способ узнать это ИМХО.