常见场景的业务逻辑漏洞以及安全设计
字数 1453 2025-08-19 12:42:24
业务逻辑漏洞分析与安全设计指南
验证码安全
常见问题
验证码绕过类:
- 空验证码绕过:提交空验证码可通过验证
- 万能验证码:存在通用验证码(如000000、123456)
- 验证码可爆破:验证码简单可被暴力破解
- 验证码无效:验证码校验逻辑缺失
验证码滥用类:
- 短信/邮件轰炸:无限制发送验证码导致资源滥用
- 验证码未绑定用户:验证码不与特定用户关联
安全设计要点
-
验证码生命周期管理:
- 强制一次使用后刷新
- 设置合理有效期(建议5-10分钟)
-
验证码复杂度要求:
- 短信/邮件验证码:6位以上字母数字混合
- 图片验证码:增加文字变形、干扰斑点
- 语音验证码:添加背景噪声
-
生成与存储安全:
- 动态生成,禁止统一生成多次调用
- 不存储在HTML页面或Cookie中
-
防护机制:
- 限制验证码错误次数(建议3-5次)
- 限制单个手机号/IP的请求频率
用户登录安全
常见漏洞
-
任意用户登录漏洞:
- 验证码可爆破
- 验证码明文返回
- 存在万能验证码
- 验证码未绑定用户
- 双写手机号字段绕过
- 空验证码/任意验证码绕过
- 凭证泄露与伪造
-
多步登录漏洞:
- 修改第一步返回包参数
- 修改第二步请求字段
- 更改登录Type绕过
-
其他登录问题:
- 无验证码防护导致暴力破解
- 撞库攻击(无IP错误限制)
- API无凭证登录(仅提供用户ID)
安全设计要点
-
传输安全:
- 用户名密码加密传输
-
验证机制:
- 验证码不可预测
- 多步登录验证上一步结果
- 验证码与用户绑定
-
防护机制:
- 禁止注册已存在用户
- 登录失败次数限制
- 账户锁定机制
用户注册安全
常见问题
- 类似登录漏洞:验证码绕过、暴力破解等
- 垃圾注册:无机器识别机制
安全设计要点
- 必须设计验证码机制
- 采集用户机器唯一识别码
- 自学习识别垃圾账号格式
密码找回安全
常见漏洞
- 验证码绕过
- 验证码未绑定用户
- 验证凭证可预测
- 无错误次数限制
安全设计要点
-
验证信息处理:
- 邮箱/手机号从数据库读取,不可用户控制
- 验证凭证与用户信息严格绑定
-
凭证安全:
- 加强验证凭证复杂度
- 设置合理失效时间
- 不保存在页面中
-
防护机制:
- 限制验证错误次数(建议3次/半小时)
- 初始验证需验证码防护
支付场景安全
常见漏洞
-
金额篡改:
- 修改支付总价
- 修改购买数量
-
条件竞争:
- 并发支付导致多次购买单次付款
-
ID枚举:
- 用户/订单/优惠券ID可猜测
安全设计要点
-
数据可信:
- 商品单价及总价从服务端获取
- 验证购买数量有效性(>0)
-
并发控制:
- 支付操作账户锁定机制
- 防止并发余额操作
-
ID安全:
- 使用不可预测的ID生成算法
私信及反馈安全
主要风险
- XSS漏洞
- 越权访问
安全设计
- 用户输入内容转义处理
- 严格权限控制
投票/积分/抽奖安全
常见漏洞
-
状态绕过:
- 修改cookie或POST中的状态标识
- 如isok=0改为1绕过已抽奖限制
-
IP伪造:
- 基于IP统计可被X-Forwarded-For伪造
-
用户认证绕过:
- 修改uid等用户标识
安全设计要点
-
设备识别:
- 基于硬件信息生成唯一机器识别码
-
认证机制:
- 操作需登录
- 用户信息从session读取
-
防护机制:
- 关键标识服务端验证
- 防止批量注册攻击
总结
业务逻辑漏洞防护核心原则:
- 不信任客户端数据:所有关键参数需服务端验证
- 状态严格绑定:验证码、凭证等与用户严格关联
- 防护机制完备:错误次数限制、频率限制等
- 并发控制:关键操作加锁机制
- 输入输出安全:转义处理、权限控制
通过以上安全设计要点,可有效防范常见业务逻辑漏洞,保障系统安全。