const signature = CryptoJS.HmacSHA256(stringToSign, secretKey).toString()
return { signature, timestamp, nonce }
}
防御重放攻击:
• 服务器校验时间戳(通常允许±5分钟)
• 维护nonce缓存,拒绝重复使用
• 对关键操作使用一次性token
四、接口安全与业务逻辑防护
4.1 API安全防护
身份验证与授权:
• 基于token的认证(OAuth 2.0/JWT)
• 细粒度的RBAC(基于角色的访问控制)
• 关键接口记录完整访问日志
输入验证与过滤:
• 对所有输入参数进行严格验证
• 使用白名单而非黑名单策略
• 防范SQL注入、XSS、命令注入等
javascript
复制
// 参数验证示例
const validateInput = (input) => {
// 类型检查
if (typeof input.userId !== 'string' || !/^[a-f0-9]{24}$/.test(input.userId)) {
throw new Error('Invalid user ID format')
}
// 范围检查
if (input.amount <= 0 || input.amount > 100000) {
throw new Error('Amount out of valid range')
}
// XSS过滤