From 1655208e14f3c986697cce7bc962035c8db7e640 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A5=A5=E8=B6=85?= Date: Sat, 21 Nov 2020 20:43:45 +0800 Subject: [PATCH] =?UTF-8?q?[waf]=E6=94=AF=E6=8C=81=E5=8C=85=E5=90=AB?= =?UTF-8?q?=E4=BA=8C=E8=BF=9B=E5=88=B6=E3=80=81=E4=B8=8D=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=BA=8C=E8=BF=9B=E5=88=B6=E7=AD=89=E6=93=8D=E4=BD=9C=E7=AC=A6?= =?UTF-8?q?=EF=BC=9B=E6=94=AF=E6=8C=81=E5=AF=B9=E5=8F=82=E6=95=B0=E5=80=BC?= =?UTF-8?q?=E7=BC=96=E8=A7=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../servers/components/waf/createRulePopup.go | 28 +++++--- .../default/servers/components/waf/group.go | 1 + .../server/http-firewall-param-filters-box.js | 72 +++++++++++++++++++ .../server/http-firewall-rules-box.js | 4 +- .../components/waf/createRulePopup.html | 25 ++++++- .../servers/components/waf/createRulePopup.js | 1 + .../servers/components/waf/group.html | 2 +- 7 files changed, 120 insertions(+), 13 deletions(-) create mode 100644 web/public/js/components/server/http-firewall-param-filters-box.js 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: `
+ +
+
+ {{filter.name}} +
+
+
+
+
+
+ +
+
+ +   +
+
+
+
+ +
+

可以对参数值进行特定的编解码处理。

+
` +}) \ 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: `
-
- {{rule.param}} {{rule.operator}} {{rule.value}} +
+ {{rule.param}} | {{paramFilter.code}} {{rule.operator}} {{rule.value}}
diff --git a/web/views/@default/servers/components/waf/createRulePopup.html b/web/views/@default/servers/components/waf/createRulePopup.html index f0193283..2026a676 100644 --- a/web/views/@default/servers/components/waf/createRulePopup.html +++ b/web/views/@default/servers/components/waf/createRulePopup.html @@ -20,13 +20,15 @@

${{{checkpoint.prefix}}}{{checkpoint.description}}

+ + 参数名 - + @@ -40,6 +42,14 @@ + + + 编解码 + + + + + @@ -91,7 +101,18 @@ 对比值 - + +
+ +

将二进制进行Base64Encode后放在这里,比如Hello对应SGVsbG8=

+
+
+ +

将二进制进行Base64Encode后放在这里,比如Hello对应SGVsbG8=

+
+ + + diff --git a/web/views/@default/servers/components/waf/createRulePopup.js b/web/views/@default/servers/components/waf/createRulePopup.js index d369c378..6b8d6863 100644 --- a/web/views/@default/servers/components/waf/createRulePopup.js +++ b/web/views/@default/servers/components/waf/createRulePopup.js @@ -5,6 +5,7 @@ Tea.context(function () { this.rule = { id: 0, param: "", + paramFilters: [], checkpointPrefix: "", checkpointParam: "", value: "", diff --git a/web/views/@default/servers/components/waf/group.html b/web/views/@default/servers/components/waf/group.html index ee67109d..aaaccaaa 100644 --- a/web/views/@default/servers/components/waf/group.html +++ b/web/views/@default/servers/components/waf/group.html @@ -48,7 +48,7 @@
- {{rule.name}}[{{rule.param}}] {{rule.operator}} {{rule.value}} + {{rule.name}}[{{rule.param}}] | {{paramFilter.code}} {{rule.operator}} {{rule.value}}
暂时还没有规则