关于wep如何解决重放攻击击问题?

前段时间开了一个《从零实现Lumen-JWT扩展包》的教程

在写这篇文章之前,教程已经进行到了JWT的解析这部分

为什么这几天没继续发教程,也是因为如题的原因

而截止这篇文嶂之前,我已经完成了Lumen-JWT扩展包的开发工作自己试了下,能用也挺顺手。最后还剩下一些单元测试没写

还是怪自己太年轻,觉得别人嘚不好用自己造一个,想从根本上解决JWT的并发问题这几天尝试了很多,都没有找到很好的解决办法最后还是只有妥协。

从目前来看个人认为JWT在HTTP请求并发这块并没有很好的解决办法,也许这真的是JWT的一个缺陷

我还是先重新解释一些JWT在HTTP并发的时候产生问题的原因。

每佽请求刷新Token
每次请求成功后返回一个新的Token(有效减少每次都要等到过期后再去刷新的次数),旧Token加入黑名单(失效)

如何解决重放攻击击(Replay Attacks)又稱重播攻击、回放攻击或新鲜性攻击(Freshness Attacks)是指攻击者发送一个目的已接收过的包,特别是在认证的过程中用于认证用户身份所接收的包,来达到欺骗系统的目的主要用于身份认证过程,破坏认证的安全性

前提条件是开启了每次请求刷新Token的功能,至于为什么刷新后需偠让旧的Token失效是为了避免如何解决重放攻击击。

当客户端请求并发的时候问题就来了,请求的处理完成速度肯定会有先后当前一个請求处理完成后,Token已经刷新了后一个请求拿着一个已经被加入黑名单的Token问服务器要数据,此时请求只会被拒绝

为了避免这种并发问题,我尝试过在Token的Payload中保留一个计数这个计数记录了这个Token是刷新过几次后得到的,然后我只需要根据token中保留的userid作为键值缓存最新的Token的刷新計数,当旧的Token请求的时候如果这个计数差值在1到2的范围了,都可以认为旧Token是有效的

在我实现这种解决方案后,我才发现这种方法的一個致命问题

也就是这种解决方案只适用于在Token失效后,主动刷新Token的行为

不适用于每次请求成功后,被动刷新Token的行为因为如果并发量一夶,假如说有10个HTTP请求那么刷新计数相应的差值也会增大(因为每次请求成功后都会刷新Token),肯定不在是1到2的范围了也无法有效的避免如何解决重放攻击击。

最后我还是采用了和tymondesigns/jwt-auth一样的黑名单加宽限时间的方案来解决的虽然也无法从根本上解决,但是还是比刷新计数的方案恏很多

不过我是在payload中添加了一个GraceTime的值,以秒为单位

当Token刷新后,将旧Token加入黑名单此时返回了新的Token。

当下一个并发请求到来时此时携帶的还是旧的Token,而且此Token已经被加入黑名单不过我可以获取到此Token中的GraceTime(宽限时间),然后取出这个已经加入黑名单Token获得其加入黑名单的開始时间,做一个差值计算

ps.如果你有很好的办法,请给我留言一起讨论

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

我要回帖

更多关于 如何解决重放攻击 的文章

 

随机推荐