接口防重放防越权,海口后端该做的三件事
有海口一家做军曹鱼批发的公司,订单接口被人改金额提交,客服发现的时候已经发了三十多单。我的答案是:这类问题出在三个地方,加签、时效、越权校验。三件事做完,接口才算有护栏。
防重放要靠加签加时间窗口
重放的意思是攻击者截到一次合法请求,原样再发几十次。防法是每次请求带一个唯一编号,服务端记下来,重复的编号直接拒。光有编号不够,还要加时间戳,超过五分钟的请求拒掉,编号表就不会无限膨胀。
时间戳允许的偏差一般给五分钟,客户端服务器时间不同步会误拒,上线前要对一次时。
防越权要每一层都去核对它
越权分两种:横向是改别人的订单,纵向是普通用户调管理员接口。两种都靠校验拦。关键动作是把用户身份和资源归属一起判断,光判断身份不够。
常见的漏点是列表接口。列表返回了不该看的字段,详情接口加了校验,列表却没加。上下级接口要一起看,不能只看一个,我们做代码审查时这一项必查。
还有一种是订单金额这类关键字段,不该由前端传上来,应该由服务端根据商品和库存算。前端传什么就存什么,等于把收银台交给客人。
防泄密要连报错信息一起收
很多接口把内部错误直接返回给前端,SQL 语句、文件路径、类名都带出去。这些信息对手方来说就是地图。对外只返回一个错误码加一句提示,细节留在服务端日志里。
还有敏感字段的返回。手机号、身份证、银行卡这类,列表页返回掩码,详情页要权限。日志里也不许打全。
怎么验证自己有没有漏掉它
- 同一请求连发三次,看第二次是否被拒
- 改别人的订单ID试一次,看是否被拦
- 普通账号调管理员接口,看返回什么
- 故意传一个异常字段,看错误信息长什么样
这四个动作半小时能跑完,比读十页安全文档管用。发现问题要当场改,别记在待办里,待办里的安全问题通常这辈子都不动了。
我们做API接口开发,会用AI工具跑一部分基础检查,效率能提升300%,但业务越权这类要靠人读代码。工具找得到格式问题,找不到逻辑问题。
接口安全的常见疑问
重放攻击怎么测出来?
同一个请求连发三次,看第二次是否被拒。这是最直接的验证方法。
越权漏洞怎么自查?
改别人的订单ID和调管理员接口各试一次,列表和详情都要试。
报错信息要收敛到什么程度?
对外一个错误码加一句提示,SQL和路径这些细节留在日志里。
重放就是把你的请求原样再发一遍,越权就是拿着自己的号去看别人的数据。我们交付的 100 多个商业 APP 里,涉及资金和订单的接口这三项都必做,漏一项就是隐患。
军曹鱼、永兴黄皮这类批发的订单接口,金额和收货人这两项服务端要重算,不能信前端传值。大坡胡椒发往岛外的订单日志里留着客户电话和地址,脱敏这步省不掉。这三项我们 17 年没变过,漏一项就是隐患。
总结
海口后端给接口加护栏:加签加时效拦重放,每层都查归属拦越权,报错信息收敛到一句。把你现在的接口清单发到海口信服无限,我们按这四条逐个过一遍,漏掉哪条当场补上。