mirror of
https://github.com/TeaOSLab/EdgeCommon.git
synced 2025-11-03 20:40:25 +08:00
WAF人机识别实现点击验证和滑动解锁验证/单个网站可以设置默认的人机识别方式
This commit is contained in:
59
pkg/serverconfigs/firewallconfigs/captcha_types.go
Normal file
59
pkg/serverconfigs/firewallconfigs/captcha_types.go
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||||||
|
|
||||||
|
package firewallconfigs
|
||||||
|
|
||||||
|
import "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
||||||
|
|
||||||
|
type CaptchaType = string
|
||||||
|
|
||||||
|
const (
|
||||||
|
CaptchaTypeDefault CaptchaType = "default"
|
||||||
|
CaptchaTypeOneClick CaptchaType = "oneClick"
|
||||||
|
CaptchaTypeSlide CaptchaType = "slide"
|
||||||
|
)
|
||||||
|
|
||||||
|
// FindAllCaptchaTypes Find all captcha types
|
||||||
|
func FindAllCaptchaTypes() []*shared.Definition {
|
||||||
|
return []*shared.Definition{
|
||||||
|
{
|
||||||
|
Code: CaptchaTypeDefault,
|
||||||
|
Name: "验证码",
|
||||||
|
Description: "通过输入验证码来验证人机。",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Code: CaptchaTypeOneClick,
|
||||||
|
Name: "点击验证",
|
||||||
|
Description: "通过点击界面元素来验证人机。",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Code: CaptchaTypeSlide,
|
||||||
|
Name: "滑动解锁",
|
||||||
|
Description: "通过滑动方块解锁来验证人机。",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func DefaultCaptchaType() *shared.Definition {
|
||||||
|
var captchaTypes = FindAllCaptchaTypes()
|
||||||
|
if len(captchaTypes) > 0 {
|
||||||
|
return captchaTypes[0]
|
||||||
|
}
|
||||||
|
return &shared.Definition{
|
||||||
|
Code: CaptchaTypeDefault,
|
||||||
|
Name: "验证码",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func FindCaptchaType(code CaptchaType) *shared.Definition {
|
||||||
|
if len(code) == 0 {
|
||||||
|
code = CaptchaTypeDefault
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, t := range FindAllCaptchaTypes() {
|
||||||
|
if t.Code == code {
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return DefaultCaptchaType()
|
||||||
|
}
|
||||||
@@ -3,6 +3,8 @@ package firewallconfigs
|
|||||||
type HTTPFirewallCaptchaAction struct {
|
type HTTPFirewallCaptchaAction struct {
|
||||||
IsPrior bool `yaml:"isPrior" json:"isPrior"`
|
IsPrior bool `yaml:"isPrior" json:"isPrior"`
|
||||||
|
|
||||||
|
CaptchaType CaptchaType `yaml:"captchaType" json:"captchaType"` // 类型
|
||||||
|
|
||||||
Life int32 `yaml:"life" json:"life"` // 有效期
|
Life int32 `yaml:"life" json:"life"` // 有效期
|
||||||
MaxFails int `yaml:"maxFails" json:"maxFails"` // 最大失败次数
|
MaxFails int `yaml:"maxFails" json:"maxFails"` // 最大失败次数
|
||||||
FailBlockTimeout int `yaml:"failBlockTimeout" json:"failBlockTimeout"` // 失败拦截时间
|
FailBlockTimeout int `yaml:"failBlockTimeout" json:"failBlockTimeout"` // 失败拦截时间
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ var AllActions = []*HTTPFirewallActionDefinition{
|
|||||||
Category: HTTPFirewallActionCategoryBlock,
|
Category: HTTPFirewallActionCategoryBlock,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "Captcha验证码",
|
Name: "Captcha人机识别",
|
||||||
Code: HTTPFirewallActionCaptcha,
|
Code: HTTPFirewallActionCaptcha,
|
||||||
Description: "在浏览器使用验证码来验证客户端。",
|
Description: "在浏览器使用人机识别机制(比如验证码)来验证客户端。",
|
||||||
Category: HTTPFirewallActionCategoryVerify,
|
Category: HTTPFirewallActionCategoryVerify,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,10 +1,21 @@
|
|||||||
package firewallconfigs
|
package firewallconfigs
|
||||||
|
|
||||||
|
type ServerCaptchaType = string
|
||||||
|
|
||||||
|
const (
|
||||||
|
ServerCaptchaTypeNone ServerCaptchaType = "none" // 不设置表示策略整体配置
|
||||||
|
ServerCaptchaTypeDefault ServerCaptchaType = CaptchaTypeDefault
|
||||||
|
ServerCaptchaTypeOneClick ServerCaptchaType = CaptchaTypeOneClick
|
||||||
|
ServerCaptchaTypeSlide ServerCaptchaType = CaptchaTypeSlide
|
||||||
|
)
|
||||||
|
|
||||||
type HTTPFirewallRef struct {
|
type HTTPFirewallRef struct {
|
||||||
IsPrior bool `yaml:"isPrior" json:"isPrior"`
|
IsPrior bool `yaml:"isPrior" json:"isPrior"`
|
||||||
IsOn bool `yaml:"isOn" json:"isOn"`
|
IsOn bool `yaml:"isOn" json:"isOn"`
|
||||||
FirewallPolicyId int64 `yaml:"firewallPolicyId" json:"firewallPolicyId"`
|
FirewallPolicyId int64 `yaml:"firewallPolicyId" json:"firewallPolicyId"`
|
||||||
IgnoreGlobalRules bool `yaml:"ignoreGlobalRules" json:"ignoreGlobalRules"` // 忽略系统定义的全局规则
|
IgnoreGlobalRules bool `yaml:"ignoreGlobalRules" json:"ignoreGlobalRules"` // 忽略系统定义的全局规则
|
||||||
|
|
||||||
|
DefaultCaptchaType ServerCaptchaType `yaml:"defaultCaptchaType" json:"defaultCaptchaType"` // 默认人机识别方式
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *HTTPFirewallRef) Init() error {
|
func (this *HTTPFirewallRef) Init() error {
|
||||||
|
|||||||
Reference in New Issue
Block a user