当编写用来保护PHP应用程序的ModSecurity规则的时候,需要留意PHP的一些特性。很容易设计一个在你攻击自己的时候有效,对攻击的变种则完全无效的规则。下边是我注意到的一些问题:
l
当register_globals被设置成On的时候,请求参数变成了全局变量。(在PHP 4.x中甚至可能覆盖GLOBALS数组)
l
Cookie被当作请求参数处理
l
参数开头的空格会被忽略
l
其他的空格(参数名称中的)会被转换成下划线
l
从请求和环境变量中取参数的顺序是EGPCS(环境变量,get,post,cookies,内置变量)。这意味着POST参数会覆盖通过请求行传输的参数(在QUERY_STRING里)。
l
当magic_quotes_gpc被设置成On的时候,PHP会使用反斜线(“\”)转义下列字符:单引号、双引号、反斜线和NULL。
l
如果magic_quotes_sybase被设置成On,只有单引号会被转义(用另一个单引号)。这种情况下magic_quotes_gpc的设置就无关了(不起作用了?)。