转换函数用于在对输入数据进行匹配(即,操作符执行)之前,使用相关函数对输入数据进行转换。输入数据并不会被永久修改,实际上,每当您请求使用转换函数时,ModSecurity将创建数据的副本,对其进行转换,然后针对转换后的结果再进行规则匹配。


注意:没有默认的转换函数,就如同第一代ModSecurity(1.x)中那样。

在以下示例中,请求参数值在匹配之前被转换为小写:


SecRule ARGS "xp_cmdshell" "t:lowercase,id:91"


可以在同一规则中使用多个转换操作,从而形成转换管道。多个转换操作的执行顺序将按照它们在规则中出现的顺序执行。


在大多数情况下,执行转换的顺序非常重要。在以下示例中,执行一系列转换函数以避免攻击者绕过waf防火墙。以任何其他顺序执行的转换可能会使熟练的攻击者绕过waf防火墙:


SecRule ARGS "(asfunction|javascript|vbscript|data|mocha|livescript):" "id:92,t:none,t:htmlEntityDecode,t:lowercase,t:removeNulls,t:removeWhitespace"


警告:目前可以使用SecDefaultAction指定转换函数的默认列表,该列表将应用于遵循SecDefaultAction指令的所有规则。但是并不推荐这种做法,因为这意味着错误很容易实现。建议您始终指定特定规则所需的转换函数,使用t:none(清除可能继承的转换函数)启动列表。

本节的其余部分介绍了ModSecurity中当前可用的转换功能。



Created with the Personal Edition of HelpNDoc: Easy EPub and documentation editor