From 3360f2fc0857b43aba3f871aa9de94260d4dd2d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A5=A5=E8=B6=85?= Date: Mon, 19 Jul 2021 10:48:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=96=B0=E7=9A=84CC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../default/servers/components/waf/group.go | 1 + .../servers/server/settings/waf/group.go | 1 + .../server/http-firewall-rule-label.js | 24 ++++ .../server/http-firewall-rules-box.js | 11 +- .../components/server/http-firewall-rules.js | 112 ++++++++++++++++++ .../server/metric-keys-config-box.js | 5 + .../components/waf/createRulePopup.html | 10 +- .../servers/components/waf/group.html | 2 +- .../settings/headers/createSetPopup.html | 1 + .../servers/server/settings/waf/group.html | 2 +- 10 files changed, 164 insertions(+), 5 deletions(-) create mode 100644 web/public/js/components/server/http-firewall-rule-label.js diff --git a/internal/web/actions/default/servers/components/waf/group.go b/internal/web/actions/default/servers/components/waf/group.go index 3a7daa9d..81be0c7c 100644 --- a/internal/web/actions/default/servers/components/waf/group.go +++ b/internal/web/actions/default/servers/components/waf/group.go @@ -80,6 +80,7 @@ func (this *GroupAction) RunGet(params struct { "value": rule.Value, "isCaseInsensitive": rule.IsCaseInsensitive, "isComposed": firewallconfigs.CheckCheckpointIsComposed(rule.Prefix()), + "checkpointOptions": rule.CheckpointOptions, } }), "isOn": set.IsOn, diff --git a/internal/web/actions/default/servers/server/settings/waf/group.go b/internal/web/actions/default/servers/server/settings/waf/group.go index 97ce1299..1c0739f3 100644 --- a/internal/web/actions/default/servers/server/settings/waf/group.go +++ b/internal/web/actions/default/servers/server/settings/waf/group.go @@ -81,6 +81,7 @@ func (this *GroupAction) RunGet(params struct { "value": rule.Value, "isCaseInsensitive": rule.IsCaseInsensitive, "isComposed": firewallconfigs.CheckCheckpointIsComposed(rule.Prefix()), + "checkpointOptions": rule.CheckpointOptions, } }), "isOn": set.IsOn, diff --git a/web/public/js/components/server/http-firewall-rule-label.js b/web/public/js/components/server/http-firewall-rule-label.js new file mode 100644 index 00000000..d88b7e6e --- /dev/null +++ b/web/public/js/components/server/http-firewall-rule-label.js @@ -0,0 +1,24 @@ +// 显示WAF规则的标签 +Vue.component("http-firewall-rule-label", { + props: ["v-rule"], + data: function () { + return { + rule: this.vRule + } + }, + template: `
+
+ {{rule.name}}[{{rule.param}}] + + + + {{rule.checkpointOptions.period}}秒/{{rule.checkpointOptions.threshold}}请求 + + + | {{paramFilter.code}} + {{rule.operator}} + {{rule.value}} + +
+
` +}) \ 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 6d552c06..4e90a51f 100644 --- a/web/public/js/components/server/http-firewall-rules-box.js +++ b/web/public/js/components/server/http-firewall-rules-box.js @@ -39,7 +39,16 @@ Vue.component("http-firewall-rules-box", {
- {{rule.param}} | {{paramFilter.code}} {{rule.operator}} {{rule.value}} + {{rule.name}}[{{rule.param}}] + + + + {{rule.checkpointOptions.period}}秒/{{rule.checkpointOptions.threshold}}请求 + + + | {{paramFilter.code}} {{rule.operator}} {{rule.value}} + +
diff --git a/web/public/js/components/server/http-firewall-rules.js b/web/public/js/components/server/http-firewall-rules.js index d7bb87da..8e2f9d15 100644 --- a/web/public/js/components/server/http-firewall-rules.js +++ b/web/public/js/components/server/http-firewall-rules.js @@ -83,4 +83,116 @@ Vue.component("http-cond-general-header-length", {
` +}) + +// CC +Vue.component("http-firewall-checkpoint-cc", { + props: ["v-checkpoint"], + data: function () { + let keys = [] + let period = 60 + let threshold = 1000 + + let options = {} + if (window.parent.UPDATING_RULE != null) { + options = window.parent.UPDATING_RULE.checkpointOptions + } + + if (options == null) { + options = {} + } + if (options.keys != null) { + keys = options.keys + } + if (keys.length == 0) { + keys = ["${remoteAddr}", "${requestPath}"] + } + if (options.period != null) { + period = options.period + } + if (options.threshold != null) { + threshold = options.threshold + } + + let that = this + setTimeout(function () { + that.change() + }, 100) + + return { + keys: keys, + period: period, + threshold: threshold, + options: {}, + value: threshold + } + }, + watch: { + period: function () { + this.change() + }, + threshold: function () { + this.change() + } + }, + methods: { + changeKeys: function (keys) { + this.keys = keys + this.change() + }, + change: function () { + let period = parseInt(this.period.toString()) + if (isNaN(period) || period <= 0) { + period = 60 + } + + let threshold = parseInt(this.threshold.toString()) + if (isNaN(threshold) || threshold <= 0) { + threshold = 1000 + } + this.value = threshold + + this.vCheckpoint.options = [ + { + code: "keys", + value: this.keys + }, + { + code: "period", + value: period, + }, + { + code: "threshold", + value: threshold + } + ] + } + }, + template: `
+ + + + + + + + + + + + + + + +
统计对象组合 * + +
统计周期 * +
+ + +
+
阈值 * + +
+
` }) \ No newline at end of file diff --git a/web/public/js/components/server/metric-keys-config-box.js b/web/public/js/components/server/metric-keys-config-box.js index 3f8a99cc..2d8eb5ab 100644 --- a/web/public/js/components/server/metric-keys-config-box.js +++ b/web/public/js/components/server/metric-keys-config-box.js @@ -16,6 +16,11 @@ Vue.component("metric-keys-config-box", { keyDefs: window.METRIC_HTTP_KEYS } }, + watch: { + keys: function () { + this.$emit("change", this.keys) + } + }, methods: { cancel: function () { this.key = "" diff --git a/web/views/@default/servers/components/waf/createRulePopup.html b/web/views/@default/servers/components/waf/createRulePopup.html index 2b6e0894..655b9b79 100644 --- a/web/views/@default/servers/components/waf/createRulePopup.html +++ b/web/views/@default/servers/components/waf/createRulePopup.html @@ -34,10 +34,16 @@ + + 配置选项 + - 配置选项 - + + + + + diff --git a/web/views/@default/servers/components/waf/group.html b/web/views/@default/servers/components/waf/group.html index f43e8fbb..36115ceb 100644 --- a/web/views/@default/servers/components/waf/group.html +++ b/web/views/@default/servers/components/waf/group.html @@ -46,7 +46,7 @@
- {{rule.name}}[{{rule.param}}] | {{paramFilter.code}} {{rule.operator}} {{rule.value}} +
暂时还没有规则 diff --git a/web/views/@default/servers/server/settings/headers/createSetPopup.html b/web/views/@default/servers/server/settings/headers/createSetPopup.html index 3a49c5d5..f9909bf3 100644 --- a/web/views/@default/servers/server/settings/headers/createSetPopup.html +++ b/web/views/@default/servers/server/settings/headers/createSetPopup.html @@ -9,6 +9,7 @@ 名称(Name) +

请注意名称的大小写,如无特殊需求,Header名称的格式通常为Xxx或者Xxx-Yyy

diff --git a/web/views/@default/servers/server/settings/waf/group.html b/web/views/@default/servers/server/settings/waf/group.html index d0bb4e2e..b8ad3146 100644 --- a/web/views/@default/servers/server/settings/waf/group.html +++ b/web/views/@default/servers/server/settings/waf/group.html @@ -48,7 +48,7 @@
- {{rule.name}}[{{rule.param}}] | {{paramFilter.code}} {{rule.operator}} {{rule.value}} +
暂时还没有规则