also24
2020-01-19 19:31:53 +08:00
我觉得你对 “重放” 是不是有一定的误解?
“防重放” 一般防的是第三方监听了一个 “有效请求” 之后,通过再次发送这个请求来达到一些其它的目的。
举例:
张三 使用某银行 APP,向 李四 转账了 100 元,银行 APP 调用某接口,正常的完成了这个请求。
但是这个请求被 王麻子 通过中间人攻击监听到了;
> 此处为防监听,也就是 https 常见的工作内容)
> 王麻子由于未持有银行域名的 https 证书,未能完成监听
于是王麻子把请求原样发送了 3 遍,期望张三给李四再转 300 元;
> 此处为防重放,一个活儿不能干多次
> 由于银行记录了请求 ID,直接忽略了这 3 次请求
王麻子又试着把请求中的收款人改成自己,期望能收到张三的转账;
> 此处为防篡改,保证执行的内容和发送者发送的一致
> 银行校验请求签名不一致,直接拒绝了这个请求,同时把请求留档给了安全部门
而抢票软件干的事情相当于什么?
张三 使用某银行 APP,向 李四 转账了 100 元,转账 ID 01。
张三 使用某银行 APP,又向 李四 转账了 100 元,转账 ID 02。
张三 使用某银行 APP,又向 李四 转账了 100 元,转账 ID 03。
这三个请求是互相独立的,不叫 “重放” ,只是恰好业务一致而已。