mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-12-03 15:00:24 +08:00
WAF增加通配符匹配/不匹配操作符
This commit is contained in:
@@ -127,6 +127,21 @@ func (this *Rule) Init() error {
|
||||
this.ipList = values.ParseStringList(this.Value, true)
|
||||
case RuleOperatorIPRange, RuleOperatorNotIPRange:
|
||||
this.ipRangeListValue = values.ParseIPRangeList(this.Value)
|
||||
case RuleOperatorWildcardMatch, RuleOperatorWildcardNotMatch:
|
||||
var pieces = strings.Split(this.Value, "*")
|
||||
for index, piece := range pieces {
|
||||
pieces[index] = regexp.QuoteMeta(piece)
|
||||
}
|
||||
var pattern = strings.Join(pieces, "(.*)")
|
||||
var expr = "^" + pattern + "$"
|
||||
if this.IsCaseInsensitive {
|
||||
expr = "(?i)" + expr
|
||||
}
|
||||
reg, err := re.Compile(expr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
this.reg = reg
|
||||
}
|
||||
|
||||
if singleParamRegexp.MatchString(this.Param) {
|
||||
@@ -369,7 +384,7 @@ func (this *Rule) Test(value interface{}) bool {
|
||||
} else {
|
||||
return types.String(value) != this.Value
|
||||
}
|
||||
case RuleOperatorMatch:
|
||||
case RuleOperatorMatch, RuleOperatorWildcardMatch:
|
||||
if value == nil {
|
||||
return false
|
||||
}
|
||||
@@ -393,7 +408,7 @@ func (this *Rule) Test(value interface{}) bool {
|
||||
|
||||
// string
|
||||
return utils.MatchStringCache(this.reg, types.String(value))
|
||||
case RuleOperatorNotMatch:
|
||||
case RuleOperatorNotMatch, RuleOperatorWildcardNotMatch:
|
||||
if value == nil {
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -4,27 +4,29 @@ type RuleOperator = string
|
||||
type RuleCaseInsensitive = string
|
||||
|
||||
const (
|
||||
RuleOperatorGt RuleOperator = "gt"
|
||||
RuleOperatorGte RuleOperator = "gte"
|
||||
RuleOperatorLt RuleOperator = "lt"
|
||||
RuleOperatorLte RuleOperator = "lte"
|
||||
RuleOperatorEq RuleOperator = "eq"
|
||||
RuleOperatorNeq RuleOperator = "neq"
|
||||
RuleOperatorEqString RuleOperator = "eq string"
|
||||
RuleOperatorNeqString RuleOperator = "neq string"
|
||||
RuleOperatorMatch RuleOperator = "match"
|
||||
RuleOperatorNotMatch RuleOperator = "not match"
|
||||
RuleOperatorContains RuleOperator = "contains"
|
||||
RuleOperatorNotContains RuleOperator = "not contains"
|
||||
RuleOperatorPrefix RuleOperator = "prefix"
|
||||
RuleOperatorSuffix RuleOperator = "suffix"
|
||||
RuleOperatorContainsAny RuleOperator = "contains any"
|
||||
RuleOperatorContainsAll RuleOperator = "contains all"
|
||||
RuleOperatorInIPList RuleOperator = "in ip list"
|
||||
RuleOperatorHasKey RuleOperator = "has key" // has key in slice or map
|
||||
RuleOperatorVersionGt RuleOperator = "version gt"
|
||||
RuleOperatorVersionLt RuleOperator = "version lt"
|
||||
RuleOperatorVersionRange RuleOperator = "version range"
|
||||
RuleOperatorGt RuleOperator = "gt"
|
||||
RuleOperatorGte RuleOperator = "gte"
|
||||
RuleOperatorLt RuleOperator = "lt"
|
||||
RuleOperatorLte RuleOperator = "lte"
|
||||
RuleOperatorEq RuleOperator = "eq"
|
||||
RuleOperatorNeq RuleOperator = "neq"
|
||||
RuleOperatorEqString RuleOperator = "eq string"
|
||||
RuleOperatorNeqString RuleOperator = "neq string"
|
||||
RuleOperatorMatch RuleOperator = "match"
|
||||
RuleOperatorNotMatch RuleOperator = "not match"
|
||||
RuleOperatorWildcardMatch RuleOperator = "wildcard match"
|
||||
RuleOperatorWildcardNotMatch RuleOperator = "wildcard not match"
|
||||
RuleOperatorContains RuleOperator = "contains"
|
||||
RuleOperatorNotContains RuleOperator = "not contains"
|
||||
RuleOperatorPrefix RuleOperator = "prefix"
|
||||
RuleOperatorSuffix RuleOperator = "suffix"
|
||||
RuleOperatorContainsAny RuleOperator = "contains any"
|
||||
RuleOperatorContainsAll RuleOperator = "contains all"
|
||||
RuleOperatorInIPList RuleOperator = "in ip list"
|
||||
RuleOperatorHasKey RuleOperator = "has key" // has key in slice or map
|
||||
RuleOperatorVersionGt RuleOperator = "version gt"
|
||||
RuleOperatorVersionLt RuleOperator = "version lt"
|
||||
RuleOperatorVersionRange RuleOperator = "version range"
|
||||
|
||||
RuleOperatorContainsBinary RuleOperator = "contains binary" // contains binary
|
||||
RuleOperatorNotContainsBinary RuleOperator = "not contains binary" // not contains binary
|
||||
|
||||
Reference in New Issue
Block a user