考虑以下从 Lua 脚本激活的重定向 SecRule
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
被赋值时,规则被激活。重定向成功,但规则试图创建一个新的“Blocked”请求标头。然而,创建失败。
调试器中的日志输出以下内容:
Could not set variable "REQUEST_HEADERS.Blocked" as the collection does not exist.
这显然是不正确的。Modsecurity 如何创建新的请求标头?
答案1
在 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 操作来实现,或者是否会立即实现。