From 88e12ad3123883e7f867cd587d284aee52c1d29a Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Sun, 13 Aug 2023 10:01:24 +0800 Subject: [PATCH] =?UTF-8?q?WAF=E6=93=8D=E4=BD=9C=E7=AC=A6=E5=85=83?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=B8=AD=E5=A2=9E=E5=8A=A0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E9=80=89=E9=A1=B9=EF=BC=8C=E4=BB=A5=E4=BE=BF?= =?UTF-8?q?=E4=BA=8E=E4=BC=98=E5=8C=96=E4=BA=A4=E4=BA=92=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../http_firewall_rule_operator.go | 70 ++++++++++++++----- 1 file changed, 52 insertions(+), 18 deletions(-) diff --git a/pkg/serverconfigs/firewallconfigs/http_firewall_rule_operator.go b/pkg/serverconfigs/firewallconfigs/http_firewall_rule_operator.go index 7b6638d..fdbe861 100644 --- a/pkg/serverconfigs/firewallconfigs/http_firewall_rule_operator.go +++ b/pkg/serverconfigs/firewallconfigs/http_firewall_rule_operator.go @@ -51,206 +51,240 @@ type RuleOperatorDefinition struct { Code string `json:"code"` Description string `json:"description"` CaseInsensitive HTTPFirewallRuleCaseInsensitive `json:"caseInsensitive"` // default caseInsensitive setting + DataType string `json:"dataType"` } var AllRuleOperators = []*RuleOperatorDefinition{ - { - Name: "字符串等于", - Code: HTTPFirewallRuleOperatorEqString, - Description: "使用字符串对比等于", - CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, - }, - { - Name: "字符串不等于", - Code: HTTPFirewallRuleOperatorNeqString, - Description: "使用字符串对比不等于", - CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, - }, { Name: "正则匹配", Code: HTTPFirewallRuleOperatorMatch, Description: "使用正则表达式匹配,在头部使用(?i)表示不区分大小写,正则表达式语法 »", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveYes, + DataType: "regexp", }, { Name: "正则不匹配", Code: HTTPFirewallRuleOperatorNotMatch, Description: "使用正则表达式不匹配,在头部使用(?i)表示不区分大小写,正则表达式语法 »", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveYes, + DataType: "regexp", + }, + { + Name: "字符串等于", + Code: HTTPFirewallRuleOperatorEqString, + Description: "使用字符串对比等于", + CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, + DataType: "string", + }, + { + Name: "字符串不等于", + Code: HTTPFirewallRuleOperatorNeqString, + Description: "使用字符串对比不等于", + CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, + DataType: "string", }, { Name: "包含字符串", Code: HTTPFirewallRuleOperatorContains, Description: "包含某个字符串,比如Hello World包含了World", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, + DataType: "string", }, { Name: "不包含字符串", Code: HTTPFirewallRuleOperatorNotContains, Description: "不包含某个字符串,比如Hello字符串中不包含Hi", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, + DataType: "string", }, { Name: "包含任一字符串", Code: HTTPFirewallRuleOperatorContainsAny, - Description: "包含字符串列表中的任意一个,比如/hello/world包含/hello和/hi中的/hello,每行一个字符串", + Description: "包含字符串列表中的任意一个,比如/hello/world包含/hello和/hi中的/hello,对比值中每行一个字符串", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, + DataType: "strings", }, { Name: "包含所有字符串", Code: HTTPFirewallRuleOperatorContainsAll, - Description: "包含字符串列表中的所有字符串,比如/hello/world必须包含/hello和/world,每行一个字符串", + Description: "包含字符串列表中的所有字符串,比如/hello/world必须包含/hello和/world,对比值中每行一个字符串", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, + DataType: "strings", }, { Name: "包含前缀", Code: HTTPFirewallRuleOperatorPrefix, Description: "包含字符串前缀部分,比如/hello前缀会匹配/hello, /hello/world等", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, + DataType: "string", }, { Name: "包含后缀", Code: HTTPFirewallRuleOperatorSuffix, Description: "包含字符串后缀部分,比如/hello后缀会匹配/hello, /hi/hello等", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, + DataType: "string", }, { Name: "包含二进制数据", Code: HTTPFirewallRuleOperatorContainsBinary, Description: "包含一组二进制数据", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, + DataType: "string", }, { Name: "不包含二进制数据", Code: HTTPFirewallRuleOperatorNotContainsBinary, Description: "不包含一组二进制数据", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, + DataType: "string", }, { Name: "数值大于", Code: HTTPFirewallRuleOperatorGt, Description: "使用数值对比大于,对比值需要是一个数字", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "number", }, { Name: "数值大于等于", Code: HTTPFirewallRuleOperatorGte, Description: "使用数值对比大于等于,对比值需要是一个数字", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "number", }, { Name: "数值小于", Code: HTTPFirewallRuleOperatorLt, Description: "使用数值对比小于,对比值需要是一个数字", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "number", }, { Name: "数值小于等于", Code: HTTPFirewallRuleOperatorLte, Description: "使用数值对比小于等于,对比值需要是一个数字", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "number", }, { Name: "数值等于", Code: HTTPFirewallRuleOperatorEq, Description: "使用数值对比等于,对比值需要是一个数字", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "number", }, { Name: "数值不等于", Code: HTTPFirewallRuleOperatorNeq, Description: "使用数值对比不等于,对比值需要是一个数字", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "number", }, { Name: "包含索引", Code: HTTPFirewallRuleOperatorHasKey, Description: "对于一组数据拥有某个键值或者索引", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, + DataType: "string|number", }, { Name: "版本号大于", Code: HTTPFirewallRuleOperatorVersionGt, Description: "对比版本号大于", - CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, + CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "version", }, { Name: "版本号小于", Code: HTTPFirewallRuleOperatorVersionLt, Description: "对比版本号小于", - CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, + CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "version", }, { Name: "版本号范围", Code: HTTPFirewallRuleOperatorVersionRange, Description: "判断版本号在某个范围内,格式为version1,version2", - CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, + CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "version", }, { Name: "IP等于", Code: HTTPFirewallRuleOperatorEqIP, Description: "将参数转换为IP进行对比,只能对比单个IP", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "ip", }, { Name: "在一组IP中", Code: HTTPFirewallRuleOperatorInIPList, - Description: "判断参数IP在一组IP内,每行一个IP", + Description: "判断参数IP在一组IP内,对比值中每行一个IP", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "ips", }, { Name: "IP大于", Code: HTTPFirewallRuleOperatorGtIP, Description: "将参数转换为IP进行对比", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "ip", }, { Name: "IP大于等于", Code: HTTPFirewallRuleOperatorGteIP, Description: "将参数转换为IP进行对比", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "ip", }, { Name: "IP小于", Code: HTTPFirewallRuleOperatorLtIP, Description: "将参数转换为IP进行对比", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "ip", }, { Name: "IP小于等于", Code: HTTPFirewallRuleOperatorLteIP, Description: "将参数转换为IP进行对比", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "ip", }, { Name: "IP范围", Code: HTTPFirewallRuleOperatorIPRange, Description: "IP在某个范围之内,范围格式可以是英文逗号分隔的开始IP,结束IP,比如192.168.1.100,192.168.2.200;或者CIDR格式的ip/bits,比如192.168.2.1/24;或者单个IP。可以填写多行,每行一个IP范围。", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "ips", }, { Name: "不在IP范围", Code: HTTPFirewallRuleOperatorNotIPRange, Description: "IP不在某个范围之内,范围格式可以是英文逗号分隔的开始IP,结束IP,比如192.168.1.100,192.168.2.200;或者CIDR格式的ip/bits,比如192.168.2.1/24;或者单个IP。可以填写多行,每行一个IP范围。", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "ips", }, { Name: "IP取模10", Code: HTTPFirewallRuleOperatorIPMod10, Description: "对IP参数值取模,除数为10,对比值为余数", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "number", }, { Name: "IP取模100", Code: HTTPFirewallRuleOperatorIPMod100, Description: "对IP参数值取模,除数为100,对比值为余数", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "number", }, { Name: "IP取模", Code: HTTPFirewallRuleOperatorIPMod, Description: "对IP参数值取模,对比值格式为:除数,余数,比如10,1", CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, + DataType: "number", }, }