Modsecurity:从 SecRule 创建新的请求标头

Modsecurity:从 SecRule 创建新的请求标头

考虑以下从 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 操作来实现,或者是否会立即实现。

相关内容