浅析前后端分离架构下的API安全问题:JWT保证token不被盗用的方案(即如何防范Rep。。。

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

浅析前后端分离架构下的API安全问题:JWT保证token不被盗⽤
的⽅案(即如何防范Rep。

前后端分离架构带来的好处⼀搜⼀⼤堆,这⾥主要讨论⼀下后端接⼝的安全问题。

因为在分离的情况下,后端 api 是暴露在外⽹中的,常规的web项⽬⽆论如何前端都是要通过公⽹访问到后台api的,带来的隐患也有很多。

⽐如:
(1)接⼝公开,谁都可以访问;
(2)数据请求的参数在传输过程被篡改;
(3)接⼝被重复调⽤。

⼀、为什么采⽤ Token
详细见之前这篇博客吧:
⼆、JWT如何保证token不被盗⽤
token就像⼀把钥匙,只要有了这把钥匙就可以把家⾥的东西往外搬,但万⼀token在客户端或者在传输过程中被截取了怎么办?做到如下可以降低 token 被盗风险。

1、在存储的时候把 token 进⾏对称加密存储,⽤时解开。

加密后的 token 被其他⼈得到以后,需要使⽤密钥进⾏解密后才能使⽤,其他⼈⽆法得到密钥就不能得到正确的 token。

2、将请求 URL、时间戳、token 三者进⾏合并加盐签名,服务端校验有效性。

最好结合1,2两种⽅式⼀起使⽤,token进⾏加密处理,将请求 URL、时间戳、加密后的token,三者进⾏合并加盐签名,因为盐值是保密的,所以其他⼈只是得到token的话,⽆法进⾏正确的签名,后端验证请求的签名值来判断请求是否有效。

3、验证 token 对应的 IP 地址或者移动端的设备id
每次请求可以将token和请求的对应的ip地址或设备id保存起来,放到数据库或者redis缓存中,如果后⾯请求token对应的ip地址或设备id不⼀样,则视为⾮法请求
4、如何防范Replay Attacks
token 解决了篡改数据的问题,还有第3个问题,那就是攻击者不修改数据,只是重复攻击。

所谓重复攻击就是攻击者发送⼀个后端服务器已接收过的包,来达到攻击系统的⽬的。

⽐如在浏览器端通过⽤户名/密码验证获得签名的Token被⽊马窃取。

即使⽤户登出了系统,⿊客还是可以利⽤窃取的Token模拟正常请求,⽽服务器端对此完全不知道,因为JWT机制是⽆状态的。

那么如何解决呢?可以在Payload⾥增加时间戳,并且前后端都参与来解决:
(1)前端⽣成token时,在payload⾥增加当前时间戳;
(2)后端接收后,对解析出来的时间戳和当前时间进⾏判断,
(3)如果相差特定时间内(⽐如5秒),允许请求,否则判定为重复攻击。

相关文档
最新文档