小程序后端攻防实战:WAF 拦截接口注入与批量薅羊毛攻击

📅 2026/6/26 7:13:58
小程序后端攻防实战:WAF 拦截接口注入与批量薅羊毛攻击
WAF拦截接口注入攻击的防御方法输入验证与过滤对所有用户输入进行严格验证包括长度、类型、格式等。使用正则表达式或白名单机制过滤特殊字符如单引号、分号、注释符--、/* */等。参数化查询与ORM避免拼接SQL语句采用参数化查询或ORM框架如MyBatis、Hibernate。例如// 错误示例拼接SQL String sql SELECT * FROM users WHERE id userInput; // 正确示例参数化查询 PreparedStatement stmt connection.prepareStatement(SELECT * FROM users WHERE id ?); stmt.setInt(1, Integer.parseInt(userInput));WAF规则配置配置WAF如ModSecurity、阿里云WAF规则拦截常见注入特征检测union select、sleep()、benchmark()等关键词。拦截异常HTTP头如X-Forwarded-For携带SQL片段。限制高频敏感操作如密集的DROP语句。批量薅羊毛攻击的防护策略行为分析与限流通过风控系统识别异常行为同一IP/设备ID短时间内发起大量相同请求如领券、抽奖。账号行为模式异常如新注册账号立即参与活动。接口限流针对关键接口设置QPS阈值如10次/分钟。验证码与人机校验高频操作前触发验证码如滑块、短信验证码。无感验证方案通过用户行为画像鼠标轨迹、点击间隔区分机器流量。业务逻辑加固活动规则防绕过校验前置条件如用户等级、历史订单。数据去重使用唯一键如用户ID活动ID防止重复领取。异步审核机制延迟发放奖励人工审核异常订单。日志监控与应急响应全链路日志追踪记录关键信息用户ID、IP、设备指纹、请求参数、响应结果。通过ELK或日志服务实时分析异常请求。自动化封禁与告警对恶意IP/账号自动封禁如Redis黑名单。设置告警规则如1小时内同一接口错误率超过30%。漏洞修复闭环定期进行渗透测试修复漏洞后验证规则有效性。例如通过注入测试工具如SQLMap验证WAF拦截率。代码示例接口限流实现// 基于Redis的令牌桶限流 public boolean rateLimit(String key, int maxPermits, int rate) { Jedis jedis new Jedis(localhost); long now System.currentTimeMillis(); String script local tokens tonumber(redis.call(get, KEYS[1])) or 0 local lastTime tonumber(redis.call(get, KEYS[1] .. :ts)) or 0 local delta math.max(0, now - lastTime) * rate / 1000 tokens math.min(tokens delta, maxPermits) if tokens 1 then redis.call(set, KEYS[1], tokens - 1) redis.call(set, KEYS[1] .. :ts, now) return true else return false end; Object result jedis.eval(script, 1, key); return (boolean) result; }通过以上方法可有效防御接口注入与批量薅羊毛攻击平衡安全性与用户体验。