Apache2 mod_security - простые правила по умолчанию, запрещающие использование определенной директории.

Как настроить простейший полезный набор правил по умолчанию для запрета mod_security?

Я хочу настроить mod_security разрешить только очень конкретные запросы к одному каталогу:

Короче говоря: я использую Apache в качестве обратного прокси для каталога /web_app/, в этом каталоге будет один файл с именем php get.php, Я хочу передать этому сценарию только те запросы, которые соответствуют следующему регулярному выражению:

get \.php \? ver = 1 & id = [af\d]{16,16}&v=[-.az\d\ ]{1,20}

Другими словами, запросы только с тремя полями: id, ver а также v, Где первая цифра 1, вторая шестнадцатеричная 16 цифра, а третья строка длиной не более 20 символов с буквами, цифрами, точками, дефисами и пробелом. Он должен запретить или удалить из запросов все, кроме значений POST и GET, а именно: загрузки файлов, файлы cookie, все несущественные заголовки, значения, отличные от указанных 3, и т. Д.

Я не хочу менять способ работы других каталогов, просто /web_app/, Отфильтровывать неправильные UTF или экранирование / кодирование URL не проблема, поэтому включение mod_security не должно быть проблемой само по себе.

2 ответа

Я полагаю, вам нужно что-то вроде этого:

<LocationMatch "^/web_app/">
        SecRule REQUEST_URI "!(:?get\.php\?ver=1&id=([a-f\d]){16,16}&v=([-.a-z\d\ ]){1,20})" "id:123,phase:2, deny, status:406"
</LocationMatch>

Для REQUEST_METHOD вы можете добавить одно дополнительное правило для блокировки, если REQUEST_METHOD не соответствует методу, который вы хотите / разрешаете.

Для фильтрации аргументов существует гораздо более простой способ, чем использование регулярных выражений для всего URI:

<Location /web_app>
  SecFilterSelective ARG_NAMES "!^(id|ver|v)$"
  SecFilterSelective ARG_ver   "!^1$"
  SecFilterSelective ARG_id    "!^[a-f\d]{16,16}"
  SecFilterSelective ARG_v     "!^[-\.a-z\d\ ]{1,20}"

  # Here the same for the request type
  SecFilterSelective REQUEST_METHOD "!^(GET|HEAD|POST)$"
</Location>

Будет соответствовать по любому аргументу НЕ в списке только под /web_app,

Хорошие примеры можно найти в документации mod_security: http://www.modsecurity.org/documentation/modsecurity-apache/1.9.3/html-multipage/09-examples.html

Все остальные параметры можно найти и там.

Другие вопросы по тегам