diff --git a/internal/web/actions/default/servers/components/waf/createRulePopup.go b/internal/web/actions/default/servers/components/waf/createRulePopup.go index 247ec671..fc2b1873 100644 --- a/internal/web/actions/default/servers/components/waf/createRulePopup.go +++ b/internal/web/actions/default/servers/components/waf/createRulePopup.go @@ -28,7 +28,7 @@ func (this *CreateRulePopupAction) RunGet(params struct { "name": checkpoint.Name, "prefix": checkpoint.Prefix, "description": checkpoint.Description, - "hasParams": len(checkpoint.Params) > 0, + "hasParams": checkpoint.HasParams, "params": checkpoint.Params, "options": checkpoint.Options, "isComposed": checkpoint.IsComposed, @@ -53,13 +53,14 @@ func (this *CreateRulePopupAction) RunGet(params struct { } func (this *CreateRulePopupAction) RunPost(params struct { - RuleId int64 - Prefix string - Operator string - Param string - OptionsJSON []byte - Value string - Case bool + RuleId int64 + Prefix string + Operator string + Param string + ParamFiltersJSON []byte + OptionsJSON []byte + Value string + Case bool Must *actions.Must }) { @@ -76,6 +77,17 @@ func (this *CreateRulePopupAction) RunPost(params struct { } else { rule.Param = "${" + params.Prefix + "}" } + + paramFilters := []*firewallconfigs.ParamFilter{} + if len(params.ParamFiltersJSON) > 0 { + err := json.Unmarshal(params.ParamFiltersJSON, ¶mFilters) + if err != nil { + this.ErrorPage(err) + return + } + } + rule.ParamFilters = paramFilters + rule.Operator = params.Operator rule.Value = params.Value rule.IsCaseInsensitive = params.Case diff --git a/internal/web/actions/default/servers/components/waf/group.go b/internal/web/actions/default/servers/components/waf/group.go index a5189cfa..c4a931e6 100644 --- a/internal/web/actions/default/servers/components/waf/group.go +++ b/internal/web/actions/default/servers/components/waf/group.go @@ -88,6 +88,7 @@ func (this *GroupAction) RunGet(params struct { rule := v.(*firewallconfigs.HTTPFirewallRule) return maps.Map{ "param": rule.Param, + "paramFilters": rule.ParamFilters, "operator": rule.Operator, "value": rule.Value, "isCaseInsensitive": rule.IsCaseInsensitive, diff --git a/web/public/js/components/server/http-firewall-param-filters-box.js b/web/public/js/components/server/http-firewall-param-filters-box.js new file mode 100644 index 00000000..b7f9d24c --- /dev/null +++ b/web/public/js/components/server/http-firewall-param-filters-box.js @@ -0,0 +1,72 @@ +Vue.component("http-firewall-param-filters-box", { + props: ["v-filters"], + data: function () { + let filters = this.vFilters + if (filters == null) { + filters = [] + } + + return { + filters: filters, + isAdding: false, + options: [ + {name: "MD5", code: "md5"}, + {name: "URLEncode", code: "urlEncode"}, + {name: "URLDecode", code: "urlDecode"}, + {name: "BASE64Encode", code: "base64Encode"}, + {name: "BASE64Decode", code: "base64Decode"}, + {name: "计算长度", code: "length"} + ], + addingCode: "" + } + }, + methods: { + add: function () { + this.isAdding = true + this.addingCode = "" + }, + confirm: function () { + if (this.addingCode.length == 0) { + return + } + let that = this + this.filters.push(this.options.$find(function (k, v) { + return (v.code == that.addingCode) + })) + this.isAdding = false + }, + cancel: function () { + this.isAdding = false + }, + remove: function (index) { + this.filters.$remove(index) + } + }, + template: `
` +}) \ No newline at end of file diff --git a/web/public/js/components/server/http-firewall-rules-box.js b/web/public/js/components/server/http-firewall-rules-box.js index b520b7e8..6d552c06 100644 --- a/web/public/js/components/server/http-firewall-rules-box.js +++ b/web/public/js/components/server/http-firewall-rules-box.js @@ -38,8 +38,8 @@ Vue.component("http-firewall-rules-box", { template: `${{{checkpoint.prefix}}}{{checkpoint.description}}
+ +将二进制进行Base64Encode后放在这里,比如
将二进制进行Base64Encode后放在这里,比如