Skip to the content.

重放攻击

重放攻击是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。可以由发起者,也可以由拦截并重发该数据的敌方进行。

加密传输不能解决重放攻击问题,因为传输包的内容是一致的,解密流程自然也是一致的,无法区分是老请求还是新请求,无法确定该请求是否出现过。

解决方案有下面几种:

  1. 唯一标记每个请求:让请求方增加一个全局唯一标记,服务端收到之后只要确定该标记是否存在。如果存在则视为老请求拒绝。这个方案实际操作起来存储和查询成本较高,因为服务方要保存所有的标记,如果考虑到多台机器的影响还需要服务端给一个sdk让请求方离线生成。
  2. 限制请求时间:服务端从请求中获取一个时间戳,如果请求时间戳与服务器时间戳之差超过某个范围,就认为是不合法的。但是由于客户端和服务端的时间基准可能不同,且网络交互也需要时间,这个波动时间不好设置。
  3. 将上述两种方案结合,首先限制请求时间,在请求时间内的再判断唯一标记字符串。
  4. 阿里云api网关的解决方案:客户端调用API时,需要在请求中添加计算的签名。API网关在收到请求后会使用同样的方法计算签名,同用户计算的签名进行比较,相同则验证通过,不同则认证失败。

来源自