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

modsecurity Не содержит пользовательских REDQUEST_HEADER_NAMES

Попытка создать правило, которое 403 будет обрабатывать любой входящий трафик, не содержащий заголовка X-CFKey и соответствующий конкретному параметру X-CFKey.

У меня есть успешное тестирование значения X-CFKey с помощью modsecurity, но оно не выполняется, когда заголовок отсутствует полностью. Я пытаюсь проверить отсутствие заголовка на данный момент с помощью! @Contains. Я могу заставить @contains проходить предсказуемо! @Contains соответствует всему.

SecRule REQUEST_HEADERS_NAMES "!@contains x-cfkey" \ "id:52,log,deny,status:403,t:lowercase,msg:'Does not contain header X-CFKey'"

Что мне здесь не хватает, почему ! быть таким непредсказуемым?

Представьте, что вы решили или работали над этим некоторое время назад, но только что заметили это, поэтому подумал, что отвечу на случай, если вы или кто-то еще захотите узнать.

Он выполняет итерацию по каждому имени, и поскольку каждое имя не содержит совпадающего x-cfkey. Еще не запутались с двойным негативом? :-)

Правильный способ написания вашего правила выглядит так:

SecRule &REQUEST_HEADERS_NAMES:x-cfkey "@eq 0" \
    "id:52,log,deny,status:403,t:lowercase,msg:'Does not contain header X-CFKey'"

См. Аналогичную проверку здесь для файлов cookie: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#REQUEST_COOKIES_NAMES