setvar
描述:创建,删除或更新变量。变量名称不区分大小写。
所属动作组:非阻断性动作
示例:要创建变量并将其值设置为1(通常用于设置标志),请使用:setvar:TX.score
要创建变量并同时对其进行初始化,请使用:setvar:TX.score=10
要删除变量,请在名称前加上感叹号:setvar:!TX.score
要增加或减少变量值,请在数值前面使用+和 - 字符:setvar:TX.score=+5
OWASP CRS的示例:
SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "\bsys\.user_catalog\b" \
"phase:2,rev:'2.1.3',capture,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,t:replaceComments,t:compressWhiteSpace,ctl:auditLogParts=+E, \
block,msg:'Blind SQL Injection Attack',id:'959517',tag:'WEB_ATTACK/SQL_INJECTION',tag:'WASCTC/WASC-19',tag:'OWASP_TOP_10/A1',tag:'OWASP_AppSensor/CIE1', \
tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.sql_injection_score=+%{tx.critical_anomaly_score}, \
setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/SQL_INJECTION-%{matched_var_name}=%{tx.0}"
注意:在链中使用时,当单个规则匹配而不是整个链时,将执行此操作。这意味着
SecRule REQUEST_FILENAME "@contains /test.php" "chain,id:7,phase:1,t:none,nolog,setvar:tx.auth_attempt=+1"
SecRule ARGS_POST:action "@streq login" "t:none"
每次访问test.php时都会递增(无论提交的参数如何)。如果期望的目标是仅在整个规则匹配时设置变量,则它应该包含在链的最后一个规则中。例如:
SecRule REQUEST_FILENAME "@streq test.php" "chain,id:7,phase:1,t:none,nolog"
SecRule ARGS_POST:action "@streq login" "t:none,setvar:tx.auth_attempt=+1"
Created with the Personal Edition of HelpNDoc: Easy EPub and documentation editor