app安全设计

防重放

重放攻击就是拦截app的HTTP请求包,然后多次攻击后台服务器。

解决方案:

1.利用随机数和时间戳

客户端每次请求生成一个随机数,请求的时候带上传入后台,后台如果是第一次接收到,就将随机数存入redis,有效期为60秒。当再次收到这个请求的时候,会判断本次随机数在redis里面是否存在,如果存在说明是重放攻击,如果不存在继续将新的随机数存入redis。
有人这个时候会问,如果抓到一个报文,等60秒之后是不是就可以重放成功了?答案是yes。如果只采用上述方式,会有这种情况。当然你也可以将随机数的有效期放到足够大,但是这样会有随机数存储越来越多,查询时间越来越长的情况。
解决上面的问题,可以利用时间戳。就是每次请求除了带上随机数,还带上当时的时间戳。后台接收到的时候,除了判断随机数是否存在,还需要判断客户端的时间戳和服务器当前的时间的差值是否超过60秒(一般http请求60秒是能够到达服务器的),如果超过60秒,也认为是重放攻击,请求无效。
其实可以看出,随机数+时间戳的方式,意思就是60秒内的防重放由随机数解决。超过60秒的放重放由时间戳解决,这样就完美的解决了防重放的问题。

2.利用随机数接口

这种方式是服务端增加一个getRadom的接口,每次请求先调用一次这个接口,这样客户端获得一个随机数,同事服务端会将这个随机数存入redis中。
当客户端发送请求时,服务端接收到会判断带过来的随机数在redis中是否存在,如果存在说明是该请求报文是第一次调用。如果不存在,说明是重放攻击,请求无效。

你可能感兴趣的:(app安全设计)