Попытка создать правило, которое 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