资讯专栏INFORMATION COLUMN

API设计中防重放攻击

vvpvvp / 3067人阅读

摘要:数据加密是否可以防止重放攻击否,加密可以有效防止明文数据被监听,但是却防止不了重放攻击。防重放机制我们在设计接口的时候,最怕一个接口被用户截取用于重放攻击。这样,这个请求即使被截取了,你也只能在内进行重放攻击。

HTTPS数据加密是否可以防止重放攻击?

否,加密可以有效防止明文数据被监听,但是却防止不了重放攻击。

防重放机制

我们在设计接口的时候,最怕一个接口被用户截取用于重放攻击。重放攻击是什么呢?就是把你的请求原封不动地再发送一次,两次...n次,一般正常的请求都会通过验证进入到正常逻辑中,如果这个正常逻辑是插入数据库操作,那么一旦插入数据库的语句写的不好,就有可能出现多条重复的数据。一旦是比较慢的查询操作,就可能导致数据库堵住等情况。
付款接口,或者购买接口会造成损失
需要采用防重放的机制来做请求验证。

timestamp+nonce

我们常用的防止重放的机制是使用timestamp和nonce来做的重放机制。
timestamp用来表示请求的当前时间戳,这个时间戳当然要和服务器时间戳进行校正过的。我们预期正常请求带的timestamp参数会是不同的(预期是正常的人每秒至多只会做一个操作)。每个请求带的时间戳不能和当前时间超过一定规定的时间。比如60s。这样,这个请求即使被截取了,你也只能在60s内进行重放攻击。过期失效。
但是这样也是不够的,还有给攻击者60s的时间。所以我们就需要使用一个nonce,随机数。
nonce是由客户端根据足够随机的情况生成的,比如 md5(timestamp+rand(0, 1000)); 也可以使用UUID, 它就有一个要求,正常情况下,在短时间内(比如60s)连续生成两个相同nonce的情况几乎为0。

服务端

服务端第一次在接收到这个nonce的时候做下面行为:
1 去redis中查找是否有key为nonce:{nonce}的string
2 如果没有,则创建这个key,把这个key失效的时间和验证timestamp失效的时间一致,比如是60s。
3 如果有,说明这个key在60s内已经被使用了,那么这个请求就可以判断为重放请求。
示例
那么比如,下面这个请求:
http://a.com?uid=123×tam...
这个请求中的uid是我们真正需要传递的有意义的参数
timestamp,nonce,sign都是为了签名和防重放使用。
timestamp是发送接口的时间,nonce是随机串,sign是对uid,timestamp,nonce(对于一些rest风格的api,我建议也把url放入sign签名)。签名的方法可以是md5({秘要}key1=val1&key2=val2&key3=val3...)
服务端接到这个请求:
1 先验证sign签名是否合理,证明请求参数没有被中途篡改
2 再验证timestamp是否过期,证明请求是在最近60s被发出的
3 最后验证nonce是否已经有了,证明这个请求不是60s内的重放请求

web层面也可以采用在页面中加入token方式,手机验证码,滑动验证码等方式来防止攻击

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69337.html

相关文章

  • ABC和BSV之争-吃瓜群众的你看懂了吗

    摘要:此举遭到团队和比特大陆等方面的反对,并对版本提出反对。分叉事件后交易所则宣布,由于的分叉已经完成,原已不存在。故已将原有的兑换为和,兑换比例为今日,先后开放和提取和相关交易对交易。目前,的重放保护升级拟定计划在年月日。   2018年8月,Bitcoin ABC提出了一种新的共识变更,以提高BCH节点的速度,并引入外链。该变更将在2018年11月15日上线。但Craig Wright拒...

    wemallshop 评论0 收藏0
  • Android 应用安全开发之浅谈加密算法的坑

    摘要:还有很多开发者没有意识到的加密算法的问题。不要使用哈希函数做为对称加密算法的签名。开发者建议使用基于口令的加密算法时,生成密钥时要加盐,盐的取值最好来自,并指定迭代次数。不要使用没有消息认证的加密算法加密消息,无法防重放。 本文作者:阿里移动安全@伊樵,@舟海 Android开发中,难免会遇到需要加解密一些数据内容存到本地文件、或者通过网络传输到其他服务器和设备的问题,但并不是使用了加...

    不知名网友 评论0 收藏0
  • 互联网业务安全之通用安全风险模型

    摘要:验证码安全参考信息重放登录注册找密等入口,可能通过短信验证码邮箱验证码之类的进行确认操作,如果末对操作进行次数及频率上的限制,则会产生大量的重放攻击。高并发缺陷交易类重放攻击,高并发的情况下末对用户操作行为加锁,导致购买限制的绕过。 showImg(https://segmentfault.com/img/bVBVVR); 业务安全从流程设计维度可划分为账户体系安全、交易体系安全、支付...

    liaorio 评论0 收藏0
  • 我所理解的接口设计

    摘要:前言自己做接口开发的时间也算不短了三年,想写这篇文章其实差不多已经有一年多的时间了。 前言 自己做接口开发的时间也算不短了(三年),想写这篇文章其实差不多已经有一年多的时间了。我将从下面的方向来对我所理解的接口设计做个总结: 接口参数定义 -> 接口版本化的问题 -> 接口的安全性 -> 接口的代码设计 -> 接口的可读性 -> 接口文档 -> 我遇到的坑 接口参数定义 接口设计中往可...

    taoszu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<