接口防重放防越权,海口后端该做的三件事

2026-10-072 阅读
API接口开发
接口防重放防越权,海口后端该做的三件事

有海口一家做军曹鱼批发的公司,订单接口被人改金额提交,客服发现的时候已经发了三十多单。我的答案是:这类问题出在三个地方,加签、时效、越权校验。三件事做完,接口才算有护栏。

防重放要靠加签加时间窗口

重放的意思是攻击者截到一次合法请求,原样再发几十次。防法是每次请求带一个唯一编号,服务端记下来,重复的编号直接拒。光有编号不够,还要加时间戳,超过五分钟的请求拒掉,编号表就不会无限膨胀。

时间戳允许的偏差一般给五分钟,客户端服务器时间不同步会误拒,上线前要对一次时。

防越权要每一层都去核对它

越权分两种:横向是改别人的订单,纵向是普通用户调管理员接口。两种都靠校验拦。关键动作是把用户身份和资源归属一起判断,光判断身份不够。

常见的漏点是列表接口。列表返回了不该看的字段,详情接口加了校验,列表却没加。上下级接口要一起看,不能只看一个,我们做代码审查时这一项必查。

还有一种是订单金额这类关键字段,不该由前端传上来,应该由服务端根据商品和库存算。前端传什么就存什么,等于把收银台交给客人。

防泄密要连报错信息一起收

很多接口把内部错误直接返回给前端,SQL 语句、文件路径、类名都带出去。这些信息对手方来说就是地图。对外只返回一个错误码加一句提示,细节留在服务端日志里。

还有敏感字段的返回。手机号、身份证、银行卡这类,列表页返回掩码,详情页要权限。日志里也不许打全。

怎么验证自己有没有漏掉它

  • 同一请求连发三次,看第二次是否被拒
  • 改别人的订单ID试一次,看是否被拦
  • 普通账号调管理员接口,看返回什么
  • 故意传一个异常字段,看错误信息长什么样

这四个动作半小时能跑完,比读十页安全文档管用。发现问题要当场改,别记在待办里,待办里的安全问题通常这辈子都不动了。

我们做API接口开发,会用AI工具跑一部分基础检查,效率能提升300%,但业务越权这类要靠人读代码。工具找得到格式问题,找不到逻辑问题。

接口安全的常见疑问

重放攻击怎么测出来?

同一个请求连发三次,看第二次是否被拒。这是最直接的验证方法。

越权漏洞怎么自查?

改别人的订单ID和调管理员接口各试一次,列表和详情都要试。

报错信息要收敛到什么程度?

对外一个错误码加一句提示,SQL和路径这些细节留在日志里。

重放就是把你的请求原样再发一遍,越权就是拿着自己的号去看别人的数据。我们交付的 100 多个商业 APP 里,涉及资金和订单的接口这三项都必做,漏一项就是隐患。

军曹鱼、永兴黄皮这类批发的订单接口,金额和收货人这两项服务端要重算,不能信前端传值。大坡胡椒发往岛外的订单日志里留着客户电话和地址,脱敏这步省不掉。这三项我们 17 年没变过,漏一项就是隐患。

总结

海口后端给接口加护栏:加签加时效拦重放,每层都查归属拦越权,报错信息收敛到一句。把你现在的接口清单发到海口信服无限,我们按这四条逐个过一遍,漏掉哪条当场补上。