如何防止接口被恶意刷? 📅 2026/7/10 1:17:26 一、网络层防护第一道屏障防火墙/IP白名单/HTTPS加密1. 防火墙硬件/云防火墙基础能力过滤非法数据包、封禁恶意端口、拦截端口扫描抗攻击限流清洗DDoS、封禁高频攻击IP抵御大量无效连接拦截恶意流量过滤携带攻击载荷的报文阻断蠕虫、扫描探测行为。局限只能基于IP、端口、流量包特征拦截无法区分同一IP下多个正常/恶意用户。2. IP白名单适用场景内部服务调用、第三方合作对接、高危核心接口开通会员、支付、内部审核实现配置中心(Apollo/Nacos)动态维护量大入库持久化逻辑仅名单内IP允许访问泄露接口地址、参数也无法调用特殊优化内部服务通过内网域名/Feign调用公网无法直达可免白名单短板攻击者若控制白名单内网机器则失效需配合内网防火墙加固。3. HTTPS传输加密防抓包篡改、窃取接口参数原始HTTP三大风险明文窃听、身份伪造、报文篡改HTTPS HTTP TLS加密 身份证书校验 报文完整性校验作用防止黑客抓包拿到接口入参、Cookie、签名信息避免被伪造请求刷接口。二、网关层统一拦截全局统一管控所有请求必经网关网关是所有接口的统一入口把限流、鉴权、黑名单、验证码校验收敛到网关不用每个业务接口重复开发统一流量限流全接口、单接口粒度限流统一身份鉴权登录态校验、权限拦截请求过滤拦截非法UA、恶意IP、异常请求头统一监控告警聚合全链路调用日志统计QPS突增主流网关Spring Cloud Gateway、Nginx、Kong、Sentinel Gateway。三、流量限流核心手段解决高频刷接口分多种粒度1. 业务层落地方案短信接口经典案例两层限流组合杜绝单手机号疯狂刷短信1短时间窗口限流60s/条Redis Key手机号过期60s控制1分钟只能发1条防止短时间狂轰2每日总量限流单手机号日上限10条Redis Key手机号日期过期24h限制单日总条数两层校验同时生效避免攻击者定时循环刷接口。2. 通用限流算法面试必问固定窗口、滑动窗口、漏桶、令牌桶Sentinel默认令牌桶3. 限流维度多维度组合拦截按IP限流单IP每秒请求上限按用户ID/手机号限流登录用户、短信场景按接口维度高危接口短信、注册、支付单独收紧阈值按设备号APP端防止一台设备批量注册。四、身份与权限鉴权区分正常用户与匿名攻击者1. 登录态校验未登录匿名用户直接拦截仅登录用户可访问业务接口从请求上下文获取token解析用户信息token失效/不存在直接返回401。2. 功能权限控制核心操作接口订单审核、退款、会员开通增加权限校验自定义权限注解标注接口所需权限点网关/拦截器统一拦截匹配当前用户权限无权限直接拒绝。3. 接口签名对外开放API必备补充你原文遗漏的加分项第三方开放接口不能只靠IP白名单需要请求签名双方约定AppKey AppSecret请求携带时间戳、随机nonce、参数签名校验逻辑校验时间戳拒绝5分钟前过期请求防重放攻击用秘钥重新计算签名和客户端上传签名比对不一致直接拦截防止参数篡改、接口被盗刷。五、人机验证验证码拦截脚本自动化刷接口针对注册、短信、找回密码等匿名高危接口区分机器脚本和真人图形验证码简单易破解仅做基础防护滑块/点选行为验证码极验、阿里云验证码采集滑动轨迹机器难以模拟短信验证码二次校验但必须搭配限流否则高额扣费短板仅能拦截自动化脚本无法阻止批量真实手机号循环刷必须配合限流。六、监控告警事后处置兜底发现与止损日志埋点网关打印全量请求日志IP、用户ID、接口、时间、返回码流量监控监控单IP/单手机号QPS突增、错误码暴涨自动告警超过阈值推送短信/钉钉/邮件预警人工处置发现恶意IP/手机号动态加入黑名单网关直接永久拦截长效方案建立恶意IP库定期同步到防火墙、网关。七、完整分层防御总结面试收尾总结逻辑闭环从外到内多层防护层层拦截单一方案存在漏洞必须组合使用网络层防火墙清洗DDoS、IP白名单拦截非法服务调用、HTTPS加密防抓包网关层统一入口实现全局限流、黑名单、请求过滤、监控告警身份层登录鉴权、接口权限、开放API签名校验人机层滑块/短信验证码拦截自动化脚本业务限流层基于手机号/用户ID/IP做多维度时间窗口限流事后兜底实时监控异常流量发现攻击后拉黑恶意账号/IP。