这是一个基于工作量证明(Proof of Work,简称 PoW)的验证码系统。该系统旨在通过工作量证明机制,有效防止恶意攻击和自动化操作,为各类应用场景提供安全保障。
- 工作量证明机制:采用 PoW 算法,要求客户端完成一定计算任务,验证其真实性,增加攻击者成本。
- 多语言客户端支持:提供多种语言的客户端实现,方便不同开发环境下的集成和使用。(TODO)
- 简单易用:设计简洁,易于集成到各类应用中,无论是网站、移动应用还是其他系统,都能快速部署和使用。
- 资源消耗可控:通过调整工作量证明的难度,可以在安全性和性能之间取得平衡。
- 服务端:使用 Python 编写,负责生成验证码、验证结果等工作。
- 客户端:支持多种编程语言,包括但不限于 JavaScript、Java、C++ 等,方便不同平台的开发者进行集成。
├─client 客户端
│ ├─golang
│ ├─javascript
│ └─python
└─server 服务端
安装依赖,本项目使用 uv 管理依赖,推荐优先选择 uv
-
使用
uv
uv sync
-
使用
pip
pip install -r pyproject.toml
或者
pip install -r requirements.txt
配置文件
{
"secret": "a-string-secret-at-least-256-bits-long",
"redis": {
"host": "127.0.0.1",
"port": "6379",
"db": 1,
"password": ""
},
"difficulty": 42
}
- redis:redis服务器地址、端口、数据库、密码
- difficulty:验证码难度,数字越大,难度越高,解答越慢
- secret:JWT签名密钥,请设置32位数以上的随机字符串
请查看各语言客户端的README
客户端基本流程如下所示:
sequenceDiagram
autonumber
客户端->>服务端: 请求challenge
服务端-->>服务端: 生成challenge,写入redis
服务端-->>客户端: 响应challenge
客户端->>客户端: 计算结果
客户端->>服务端: 提交结果
服务端-->>服务端: 查询redis,验证结果
服务端-->>客户端: 生成并响应token
客户端->>业务服务器: 携带token发送自定义业务请求
业务服务器->>服务端: 验证token
服务端-->>业务服务器: 响应验证结果
业务服务器->>客户端: 响应业务请求
欢迎各位开发者为本项目贡献代码、提出改进建议或报告问题。你可以通过以下方式参与:
- 提交 Issue:如果您发现任何问题或有任何改进建议,可以在 Issues 页面提交。
- 提交 Pull Request:如果您想要直接参与代码改进,可以 fork 本项目,完成您的修改后提交 Pull Request。
本项目采用 AGPLv3 License 和 LGPLv3 License 双许可证授权。 其中 server(服务端)部分采用 AGPLv3 License,client(客户端)部分采用 LGPLv3 License,请注意区别。