Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
github.com/testsling/aj-captcha-go
aj-captcha
滑动验证码的 Go
语言实现
术语 | 描述 |
---|---|
验证码类型 | 1)滑动拼图 blockPuzzle 2)文字点选 clickWord |
验证 | 用户拖动/点击一次验证码拼图即视为一次“验证”,不论拼图/点击是否正确 |
二次校验 | 验证数据随表单提交到后台后,后台需要调用captchaService.verification做二次校验。目的是核实验证数据的有效性。 |
// WatermarkConfig 水印设置
type WatermarkConfig struct {
FontSize int // 水印字体大小
Color color.RGBA // 水印rgba颜色
Text string // 水印文字
}
type BlockPuzzleConfig struct {
Offset int // 校验时 容错偏移量
}
type ClickWordConfig struct {
FontSize int // 点击验证文字的大小
FontNum int // 点击验证的文字的随机数量
}
//redis配置选项
type RedisConfig struct {
//redis单机或者集群访问地址
DBAddress []string
//最大空闲连接数
DBMaxIdle int
//最大连接数
DBMaxActive int
//redis表示空闲连接保活时间
DBIdleTimeout int
//redis密码
DBPassWord string
//是否使用redis集群
EnableCluster bool
//单机模式下使用redis的指定库,比如:0,1,2,3等等,默认为0
DB int
}
type Config struct {
Watermark *WatermarkConfig
ClickWord *ClickWordConfig
BlockPuzzle *BlockPuzzleConfig
CacheType string // 验证码使用的缓存类型
CacheExpireSec int
ResourcePath string // 项目的绝对路径: 图片、字体等
}
func NewConfig() *Config {
return &Config{
//CacheType:注册的缓存类型,当使用redis时,配置为const.RedisCacheKey(必须配置RedisConfig相关选项才可使用),
//当使用内存类型时,配置为const.MemCacheKey
CacheType: const.RedisCacheKey,
Watermark: &WatermarkConfig{
FontSize: 12,
Color: color.RGBA{R: 255, G: 255, B: 255, A: 255},
Text: "我的水印",
},
ClickWord: &ClickWordConfig{
FontSize: 25,
FontNum: 5,
},
BlockPuzzle: &BlockPuzzleConfig{Offset: 10},
CacheExpireSec: 2 * 60, // 缓存有效时间
ResourcePath: "/mnt/f/workspace/aj-captcha-go",
}
}
go get -u github.com/TestsLing/aj-captcha-go
package main
import (
config2 "github.com/TestsLing/aj-captcha-go/config"
"github.com/TestsLing/aj-captcha-go/service"
"github.com/TestsLing/aj-captcha-go/const"
"github.com/gin-gonic/gin"
)
// 客户端参数 看自身业务构建即可
type clientParams struct {
Token string `json:"token"`
PointJson string `json:"pointJson"`
CaptchaType string `json:"captchaType"`
}
// **********************默认配置***************************************************
// 默认配置,可以根据项目自行配置,将其他类型配置序列化上去
var config = config2.NewConfig()
// *********************自定义配置**************************************************
// 水印配置(参数可从业务系统自定义)
var watermarkConfig = &config2.WatermarkConfig{
FontSize: 12,
Color: color.RGBA{R: 255, G: 255, B: 255, A: 255},
Text: "我的水印",
}
// 点击文字配置(参数可从业务系统自定义)
var clickWordConfig = &config2.ClickWordConfig{
FontSize: 25,
FontNum: 4,
}
// 滑动模块配置(参数可从业务系统自定义)
var blockPuzzleConfig = &config2.BlockPuzzleConfig{Offset: 10}
// 行为校验配置模块(具体参数可从业务系统配置文件自定义)
var config = config2.BuildConfig(constant.MemCacheKey, constant.DefaultResourceRoot, watermarkConfig,
clickWordConfig, blockPuzzleConfig, 2*60)
// 服务工厂,主要用户注册 获取 缓存和验证服务
var factory = service.NewCaptchaServiceFactory(config)
func main() {
// 这里默认是注册了 内存缓存,但是不足以应对生产环境,希望自行注册缓存驱动 实现缓存接口即可替换(CacheType就是注册进去的 key)
factory.RegisterCache(constant.MemCacheKey, service.NewMemCacheService(20)) // 这里20指的是缓存阈值
//注册使用默认redis数据库
//factory.RegisterCache(constant.RedisCacheKey, service.NewDftRedisCacheService())
//注册自定义配置redis数据库
//factory.RegisterCache(constant.RedisCacheKey, service.NewConfigRedisCacheService([]string{"127.0.0.1:6379"},
//,"", "", false, 0))
// 注册了两种验证码服务 可以自行实现更多的验证
factory.RegisterService(constant.ClickWordCaptcha, service.NewClickWordCaptchaService(factory))
factory.RegisterService(constant.BlockPuzzleCaptcha, service.NewBlockPuzzleCaptchaService(factory))
//Default返回一个默认的路由引擎
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
//输出json结果给调用方
c.JSON(200, gin.H{
"message": "pong",
})
})
r.GET("/captcha/get", func(c *gin.Context) {
// 根据参数类型获取不同服务即可
data, _ := factory.GetService(constant.BlockPuzzleCaptcha).Get()
//输出json结果给调用方
c.JSON(200, data)
})
r.Run("0.0.0.0:888") // listen and serve on 0.0.0.0:888
}
直接运行 example
即可
在进行项目部署时,需要将 resource 目录的资源进行复制到打包文件的同级目录,然后在配置文件中指定 ResourcePath 为项目根路径
FAQs
Unknown package
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.