Рассмотрим следующее перенаправление SecRule, которое активируется из сценария Lua
SecRule &TX:SQLI "@eq 1" "id:'129793',phase:2,t:none,redirect:http://www.example.com/failed.html,msg:'SQLi Injection Payload Found',setvar:REQUEST_HEADERS:Blocked"
Когда переменная tx.sqli
присвоено значение, правило активируется. Перенаправление выполнено успешно, но правило пытается создать новый заголовок запроса «Заблокировано». Однако создание безуспешно.
Журнал в отладчике выводит следующее:
Could not set variable "REQUEST_HEADERS.Blocked" as the collection does not exist.
Это явно неверно. Как Modsecurity создает новый заголовок запроса?
В ModSecurity большинство стандартных коллекций (включая REQUEST_HEADERS) доступны только для чтения. Поэтому вы должны установить переменную, а не REQUEST_HEADER.
Обычно нет смысла устанавливать REQUEST_HEADER. RESPONSE_HEADER Я вижу больше использования, но он аналогичным образом доступен только для чтения, и чтобы изменить это, вам нужно использовать стандартный модуль mod_headers:
#Use ModSecurity to set an env variable
SecRule &TX:SQLI "@eq 1" "id:'129793',phase:2,set-env:BLOCK_RESPONSE"
#Use mod_header to set Header based on that env variable
Header set Blocked "True" env=BLOCK_RESPONSE
Хотя, честно говоря, не уверен, как и будет ли это работать с перенаправлением как действием ModSecurity или произойдет ли это немедленно.