如何在Laravel中拦截非授权恶意API调用,避免第三方付费接口产生额外成本
无登录访客场景下的地址查询接口防恶意请求方案
核心思路
兼顾访客无登录使用需求,从「请求合法性校验」、「频率限制」、「成本兜底」三个维度层层拦截恶意请求,规避固定Token被抓包复用、无用户体系无法做身份校验的问题。
具体实现方案
- 前端动态签名校验,避免Token静态泄露
前端表单加载时,由你的非Laravel业务站生成一次性临时签名参数:用当前时间戳+随机字符串+自定义密钥做哈希签名,请求Laravel接口时必须携带「时间戳、随机字符串、签名值」三个参数。Laravel侧做两层校验:- 校验时间戳与当前服务器时间差不超过60秒,过期直接拒绝
- 用相同的密钥和算法重算签名,与请求携带的签名比对,不一致直接拒绝
该方案下抓包拿到的签名1分钟内就会失效,无法复用做批量请求。
- 接口侧严格频率限制
直接复用Laravel自带限流中间件throttle做多层限流:- 按请求IP限流:配置
throttle:10,1即单个IP每分钟最多请求10次,完全覆盖普通用户填错、修改地址的正常使用需求,拦截批量爬虫请求 - 按请求的邮编+门牌号组合限流:相同的地址查询请求1小时内只允许调用1次第三方接口,重复请求直接返回缓存结果,避免重复查询产生的冗余成本
- 按请求IP限流:配置
- 缓存降低第三方调用频次
把已经查询过的邮编+门牌号对应的地址结果存入Laravel缓存,有效期可设30天,相同地址的后续请求直接返回缓存内容,不用调用第三方付费接口,即使有漏过的异常请求也不会产生额外成本 - 异常请求兜底拦截
提前预设单日第三方接口调用量阈值(比如设置为平时日均调用量的2倍),当调用量触达阈值时自动暂停调用第三方接口,返回「当前地址查询服务繁忙,请稍后重试」的提示,避免极端情况下产生超额成本。
补充说明
该套方案不需要用户登录,也不需要在前端存储长期有效的固定Token,同时完全适配你当前的非Laravel前端站+Laravel接口的技术架构,改造成本极低。
内容的提问来源于stack exchange,提问作者The Stompiest
相关产品推荐
相关产品推荐

