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

Строка, специфичная для блока ModSecurity в запросе

Мне нужно правило ModSecurity, которое блокирует доступ к любому URL-адресу или любому запросу Post / Get, если он содержит определенную строку.

Например, я хочу заблокировать эту строку: «km0ae9gr6m»

У меня есть это правило, но оно, похоже, не работает.

SecRule ARGS "km0ae9gr6m" "log,deny,msg:'Access Denied'"

Какую версию ModSecurity вы используете? ARGS переменная включает только QUERY_STRING + POST_PAYLOAD в версии 1.X. Если вы используете версию 2.X, с указанным выше правилом, тестирование с запросом, как показано ниже:

http://domain.com/a?b=km0ae9gr6m

вы увидите что-то подобное в audit_log:

[modsecurity] [client x.x.x.x] [domain domain.com] [302] [/20120813/20120813-1226/20120813-122624-70QXqH8AAAEA AEucDbkAAAAA] [file "/etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf"] [line "305"] [msg "Access Denied"] Access denied with code 403 (phase 2). Pattern match "km0ae9gr6m" at ARGS:b.

В ModSecurity 2.x, ARGS расширяется до отдельных переменных. Итак, попробуйте это:

SecRule REQUEST_URI|ARGS|REQUEST_BODY "km0ae9gr6m" "log,deny,msg:'Access Denied'"

Единственное, чего мне не хватало, это фазы обработки, на которой это правило должно быть выполнено, чтобы оно работало. так что действительное правило здесь.

SecRule REQUEST_URI|ARGS|REQUEST_BODY "km0ae9gr6m" "phase:4,log,deny,msg:'Access Denied'"

С помощью этого правила вы можете легко заблокировать любой тип ответа, который вы не хотите, чтобы ни один пользователь видел. Modsecurity обнаружит его на пути к серверу и заблокирует.

Выше правильный ответ, используйте этап: 1. Вы также можете использовать оператор частичного совпадения строки «@contains», чтобы остановить запрос, который содержит нежелательную строку как часть более длинной строки. Например, у меня нет word press, поэтому, когда я получаю запросы на wp-login, wp-admin и т. Д., Я могу заблокировать их все одним правилом: SecRule REQUEST_URI "@contains wp-" "id: 101, фаза: 1, отклонить, статус: 409, сообщение: 'Denied' "

Кстати, сообщение из msg: кажется, появляется только в журналах, сообщение, которое видит пользователь, я добавил в конфигурацию apache ErrorDocument 409 «ДОСТУП СТРОГО ЗАПРЕЩЕН»