Относительно новый для Apache modsec. Пытаюсь сделать что-то простое и врезаюсь в стену. Я хочу установить переменную среды на основе User-Agent и протестировать ее, установив заголовок. У меня есть это:
SecRule HTTP_User_Agent "Gecko" "phase:2,nolog,setenv:MOZTEST=1,id:100000025"
Header always set MozTest "1" env=MOZTEST
Прикинул, что в Firefox должен быть установлен заголовок MozTest, но это не так. Я также пробовал REQUEST_HEADERS: User-Agent вместо HTTP_User-Agent, но все равно никакого эффекта. Также попытался увеличить фазу до 5, хотя пользовательский агент должен быть на фазе 2. Ошибки нет; правило просто не срабатывает.
Я предполагаю, что переменная пользовательского агента не установлена, но я не знаю почему. (Или даже как это проверить, поскольку мне никогда не приходилось делать никаких пользовательских журналов.)
Я наткнулся на свой вопрос во время исследования другой проблемы спустя годы.
Похоже, основная проблема здесь в том, что я пытался использовать переменную mod_rewrite (HTTP_USER_AGENT) в контексте mod_security. Вместо этого я мог бы либо использовать правильную переменную ModSecurity (REQUEST_HEADERS: User-Agent), либо передать переменную перезаписи мода в качестве переменной среды (не то чтобы для этого была веская причина, когда доступна альтернатива ModSecurity).
Итак, мой пример выше должен выглядеть так:
SecRule REQUEST_HEADERS:User-Agent "Gecko" "phase:2,nolog,setenv:MOZTEST=1,id:100000025"
Header always set MozTest "1" env=MOZTEST
Полный список переменных, доступных для ModSecurity, находится здесь: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual-(v2.x)#Variables
В качестве альтернативы - бесполезно в данном случае, но, возможно, полезно отметить для других обстоятельств - я мог бы использовать перезапись мода, чтобы выгрузить пользовательский агент в переменную среды, а затем сопоставить это с безопасностью мода, например:
RewriteRule .* - [E=user_agent:%{HTTP_USER_AGENT}]
SecRule ENV:user_agent "Gecko" "phase:2,nolog,setenv:MOZTEST=1,id:100000025"
Header always set MozTest "1" env=MOZTEST