详细内容
ModSecurity for Apache2[三十五]
发布日期:2010-07-22     点击:2145     字体:[ ]
下列变量在ModSecurity 2.x版本里可用:

ARGS
args是一个集合,可以只用它自己(即只使用ARGS,这样就包括了所有的参数,当然这里包括POST提交的参数),或者与静态参数一起(匹配参数名称),或与正则表达式一起(用名称匹配参数然后匹配正则表达式)。只看查询字符串或查询体参数,看ARGS_GET和ARGS_POST集合。

一些变量实际上是集合,运行时可扩展为多个变量。下面的例子将检查所有的请求参数:

SecRule ARGS  dirty
 
有时你可能只想检查集合的一部分。这时可用选择符来帮你完成。下面的例子将只检查名称为p的参数(注意,在一般情况下,请求中可以包含多个名称相同的参数):

SecRule ARGS:p  dirty

当然也可以排除,下面这个例子将检查所有的请求参数中是否包含 dirty这个单词,除了名称为z的参数(当然,可能有0个或多个参数名称为z)

SecRule ARGS|!ARGS:z dirty

有一个特殊的操作符允许你计算在一个集合里有多少个变量,下面这个规则在请求里多余0个参数时将触发(在触发时将忽略其他参数),当然如果下面的0个参数改成2,那么只允许有两个参数,多余2个或少于2个将都不允许运行。
 
SecRule &ARGS !^0$

有时你可能要查看一个参数数组,其中每个名称只有稍微的变化,这时你可以在它的选择符里指定一个正则表达式,下面这个规则将检查所有的以id_开头的参数:

SecRule ARGS:/^id_/  dirty

注意:
使用ARGS:p, 如果参数p不存在,它不会对操作符造成任何影响。

在ModSecurity 1.x中,args代表QUERY_STRING+ POST_PAYLOAD,而现在扩展到单个变量。

ARGS_COMBINED_SIZE
这个变量允许你在和Apache LimitRequest指令比较时对参数的总大小有针对性的评估。你可以设置一个跪在来确保参数总长度在某一个边界值以下(可阻止缓存溢出问题),例如下面这个例子如果参数超过25个字符将被阻止(总大小即参数名长度+参数值长度,例如:参数名为p1,参数值为:abc,那么总长度为5):

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
参数名称的集合。您可以搜索你想阻止的特定的参数名称。在一个乐观的规则情况下,您还可以用白名单(使用!字符倒置规则),只允许经过授权的参数名。例如下面这个例子将只允许2参数名: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
这个变量保存验证用户身份的方法。例如:
 
SecRule AUTH_TYPE "basic" log,deny,status:403,phase:1,t:lowercase

注意:

这个方法在代理模式部署的项目里不可用,因为不是本地,在代理模式的部署,您需要检查REQUEST_HEADERS:Authorization标头。
用户评论
昵称 
内容  *
验证码   
   
Copyright © 2010 zdbase.com All Rights Reserved. 苏ICP备15039389号 可人软件设计