游铛铛安全加固方案
一、客户端安全
1.1 代码保护
- PyArmor混淆:混淆Python源码,防止直接查看
- Nuitka编译:核心模块编译为二进制,提高安全性
- 字符串加密:关键字符串加密存储
1.2 接口加密
- RSA加密:所有API请求使用RSA加密
- 密钥轮换:每10天自动更换密钥对
- 加密流程:
- 客户端获取最新公钥
- 使用公钥加密请求数据
- 服务端使用私钥解密
1.3 机器码绑定
- 机器码生成:基于MAC地址、CPU、主板等硬件信息
- 绑定机制:注册时绑定,登录时验证
- 解绑机制:用户主动解绑后可换机
1.4 许可证验证
- 在线验证:启动时验证卡密有效性
- 心跳检测:运行中定时检测(每30秒)
- 过期处理:过期后自动退出登录
二、服务端安全
2.1 接口加密
- 加密开关:支持开发/生产环境切换
- 密钥管理:私钥仅服务端持有,不泄露
- 历史密钥:保留历史密钥,支持平滑切换
2.2 数据验证
- 参数校验:严格校验所有输入参数
- 签名验证:关键操作添加签名验证
- 防重放:使用时间戳+随机数防重放攻击
2.3 日志记录
- 接口日志:记录所有API调用
- 异常日志:记录异常和错误信息
- 审计日志:记录关键操作(如卡密生成)
三、数据库安全
3.1 密码存储
- 哈希加密:使用bcrypt/argon2哈希密码
- 盐值:每个密码使用唯一盐值
- 不可逆:密码不可恢复,只能重置
3.2 敏感数据
- 加密存储:私钥等敏感数据加密存储
- 访问控制:限制数据库访问IP
- 备份加密:数据库备份文件加密
四、密钥管理
4.1 密钥生成
from cryptography.hazmat.primitives.asymmetric import rsa
def generate_key_pair():
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048
)
public_key = private_key.public_key()
return private_key, public_key
4.2 密钥轮换
- 自动轮换:每10天自动生成新密钥对
- 平滑切换:新旧密钥同时有效7天
- 历史保留:保留历史密钥用于解密旧数据
4.3 密钥分发
- 客户端获取:客户端启动时获取最新公钥
- 缓存机制:客户端缓存公钥,减少请求
- 更新检测:定期检测密钥是否更新
五、防破解措施
5.1 代码混淆
- PyArmor混淆所有Python代码
- 关键逻辑编译为二进制
- 字符串和常量加密
5.2 反调试
5.3 完整性校验
- 校验exe文件完整性
- 校验关键文件是否被修改
- 校验配置文件合法性
六、安全配置
6.1 开发环境
# 开发环境关闭加密,方便调试
ENCRYPT_ENABLED = False
DEBUG = True
6.2 生产环境
# 生产环境开启所有安全措施
ENCRYPT_ENABLED = True
DEBUG = False
LOG_LEVEL = 'INFO'