mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-12-03 06:50: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)
|
this.ipList = values.ParseStringList(this.Value, true)
|
||||||
case RuleOperatorIPRange, RuleOperatorNotIPRange:
|
case RuleOperatorIPRange, RuleOperatorNotIPRange:
|
||||||
this.ipRangeListValue = values.ParseIPRangeList(this.Value)
|
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) {
|
if singleParamRegexp.MatchString(this.Param) {
|
||||||
@@ -369,7 +384,7 @@ func (this *Rule) Test(value interface{}) bool {
|
|||||||
} else {
|
} else {
|
||||||
return types.String(value) != this.Value
|
return types.String(value) != this.Value
|
||||||
}
|
}
|
||||||
case RuleOperatorMatch:
|
case RuleOperatorMatch, RuleOperatorWildcardMatch:
|
||||||
if value == nil {
|
if value == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -393,7 +408,7 @@ func (this *Rule) Test(value interface{}) bool {
|
|||||||
|
|
||||||
// string
|
// string
|
||||||
return utils.MatchStringCache(this.reg, types.String(value))
|
return utils.MatchStringCache(this.reg, types.String(value))
|
||||||
case RuleOperatorNotMatch:
|
case RuleOperatorNotMatch, RuleOperatorWildcardNotMatch:
|
||||||
if value == nil {
|
if value == nil {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,27 +4,29 @@ type RuleOperator = string
|
|||||||
type RuleCaseInsensitive = string
|
type RuleCaseInsensitive = string
|
||||||
|
|
||||||
const (
|
const (
|
||||||
RuleOperatorGt RuleOperator = "gt"
|
RuleOperatorGt RuleOperator = "gt"
|
||||||
RuleOperatorGte RuleOperator = "gte"
|
RuleOperatorGte RuleOperator = "gte"
|
||||||
RuleOperatorLt RuleOperator = "lt"
|
RuleOperatorLt RuleOperator = "lt"
|
||||||
RuleOperatorLte RuleOperator = "lte"
|
RuleOperatorLte RuleOperator = "lte"
|
||||||
RuleOperatorEq RuleOperator = "eq"
|
RuleOperatorEq RuleOperator = "eq"
|
||||||
RuleOperatorNeq RuleOperator = "neq"
|
RuleOperatorNeq RuleOperator = "neq"
|
||||||
RuleOperatorEqString RuleOperator = "eq string"
|
RuleOperatorEqString RuleOperator = "eq string"
|
||||||
RuleOperatorNeqString RuleOperator = "neq string"
|
RuleOperatorNeqString RuleOperator = "neq string"
|
||||||
RuleOperatorMatch RuleOperator = "match"
|
RuleOperatorMatch RuleOperator = "match"
|
||||||
RuleOperatorNotMatch RuleOperator = "not match"
|
RuleOperatorNotMatch RuleOperator = "not match"
|
||||||
RuleOperatorContains RuleOperator = "contains"
|
RuleOperatorWildcardMatch RuleOperator = "wildcard match"
|
||||||
RuleOperatorNotContains RuleOperator = "not contains"
|
RuleOperatorWildcardNotMatch RuleOperator = "wildcard not match"
|
||||||
RuleOperatorPrefix RuleOperator = "prefix"
|
RuleOperatorContains RuleOperator = "contains"
|
||||||
RuleOperatorSuffix RuleOperator = "suffix"
|
RuleOperatorNotContains RuleOperator = "not contains"
|
||||||
RuleOperatorContainsAny RuleOperator = "contains any"
|
RuleOperatorPrefix RuleOperator = "prefix"
|
||||||
RuleOperatorContainsAll RuleOperator = "contains all"
|
RuleOperatorSuffix RuleOperator = "suffix"
|
||||||
RuleOperatorInIPList RuleOperator = "in ip list"
|
RuleOperatorContainsAny RuleOperator = "contains any"
|
||||||
RuleOperatorHasKey RuleOperator = "has key" // has key in slice or map
|
RuleOperatorContainsAll RuleOperator = "contains all"
|
||||||
RuleOperatorVersionGt RuleOperator = "version gt"
|
RuleOperatorInIPList RuleOperator = "in ip list"
|
||||||
RuleOperatorVersionLt RuleOperator = "version lt"
|
RuleOperatorHasKey RuleOperator = "has key" // has key in slice or map
|
||||||
RuleOperatorVersionRange RuleOperator = "version range"
|
RuleOperatorVersionGt RuleOperator = "version gt"
|
||||||
|
RuleOperatorVersionLt RuleOperator = "version lt"
|
||||||
|
RuleOperatorVersionRange RuleOperator = "version range"
|
||||||
|
|
||||||
RuleOperatorContainsBinary RuleOperator = "contains binary" // contains binary
|
RuleOperatorContainsBinary RuleOperator = "contains binary" // contains binary
|
||||||
RuleOperatorNotContainsBinary RuleOperator = "not contains binary" // not contains binary
|
RuleOperatorNotContainsBinary RuleOperator = "not contains binary" // not contains binary
|
||||||
|
|||||||
Reference in New Issue
Block a user