Variables
以下都是ModSecurity 2.x中支持的变量
ARGS
ARGS是一个集合,可以作为静态参数(以名称匹配论点)方式或以正则表达式(以正则表达式匹配的所有匹配的论点名称)方式用于它自身(意思为POST负载中的所有论点),
一些变量是事实上的集合,在运行时可以扩展更多的变量,下述例子会测试所有的请求论点。
SecRule ARGS dirty
不过有些时候你只想看看集合的一部分,可以通过selection操作(colon)得到完美的帮助,下述例子仅提供查看名为p的变量(值得注意的是,通常行情况下,请求可以包含多个同名的变量)
SecRule ARGS:p dirty
它也可以指定排除方式,下面的例子将仔细检查所有的请求参数是否有单词dirty,除了名字为z的参数(再则,z参数可以为0个,也可以是多个)
SecRule ARGS|!ARGS:z dirty
这儿用了一个特殊的操作符,允许你统计一个集合中有多少个变量。如果一个请求中使用了0个以上的参数,下面的规则就会有效果(暂时忽视了第二个参数)。
SecRule &ARGS !^0$
还有些时候你需要查看一个参数数组,每个名字只有稍微不同,这种情况下,你可以为集合操作符自己指定一个正则表达式,下面的规则就是查阅所有以id_打头的参数名字。
SecRule ARGS:/^id_/ dirty
注意:
如果参数p不存在,则使用ARGS:p不会对操作符调用起到任何作用。
在ModSecurity 1.x时,ARGS变量代表 QUERY_STRING + POST_PAYLOAD,但是现在已经扩展成独立的变量了。
ARGS_COMBINED_SIZE
此变量相比apache的LimitRequest指令允许你更有针对性的设置Arguments的总大小。如你可以创建一条规则确保参数数据的部大小小于一个特定的阈值(帮助防止缓存溢出问题)。例:如果参数的大小超过25个字符就阻断它。
SecRule REQUEST_FILENAME "^/cgi-bin/login\.php" \
"chain,log,deny,phase:2,t:none,t:lowercase,t:normalisePath"
SecRule ARGS_COMBINED_SIZE "@gt 25"
ARGS_NAMES
是参数名的集合,你可以搜索你想阻断的特定的参数名,在一个积极策略情况下,你也可以仅仅使用白名单(使用!可以反转规则)来审计参数名。例:下例规则仅允许规则名为p和a的两个参数,如果有其他参数名字在其中,就会被阻断。
SecRule REQUEST_FILENAME "/index.php" \
"chain,log,deny,status:403,phase:2,t:none,t:lowercase,t:normalisePath"
SecRule ARGS_NAMES "!^(p|a)$" "t:none,t:lowercase"
ARGS_GET
ARGS_GET类似于ARGS,但仅针对于查询字符串中包含的参数。
ARGS_GET_NAMES
ARGS_GET_NAMES类似于ARGS_NAMES,但仅针对于查询字符串中包含的参数。
ARGS_POST
ARGS_POST类似于ARGS,但仅针对于POST字符串中包含的参数。
ARGS_POST_NAMES
ARGS_POST_NAMES类似于ARGS_NAMES,但仅针对于POST字符串中包含的参数。
AUTH_TYPE
这个变量保存认证方法用于验证一个用户,例:
注意
这个数据在使用非本地认证的代理模式部署时不可用,在代理模式部署下,你需要检查REQUEST_HEADERS认证头。
ENV
是个集合,规则一个单独的参数(在colon之后),ENV变量通过setenv设置,不提供CGI环境变量的访问,例如:
SecRule REQUEST_FILENAME "printenv" pass,setenv:tag=suspicious
SecRule ENV:tag "suspicious"
阅读(2165) | 评论(0) | 转发(0) |