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

Modsecurity: создание нового заголовка запроса из SecRule

Рассмотрим следующее перенаправление 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 или произойдет ли это немедленно.