jwt如何防止token被窃取_Token令牌不是后端万能解药!8个漏洞,有1个你就得爬起来加班了...

日防夜防,家贼难防。”“打铁还需自身硬!”养成铁的纪律,有助于铸造坚固的城池。本文从八个方面全面排查你的令牌系统。

4cb132f33ff87667ff63367e2397e2db.png

1 - ​注意OAuth凭据的泄漏

你把应用程序代码推到GitHub了?

OAuth应用程序凭据是否也存储在仓库里,特别是客户端密码?这可是当今头号凭据泄漏来源。

如果那些凭证被窃取了,任何人都可以冒充你。如果你察觉凭据可能已被破坏,请立即重新生成。

2 - 不要在应用程序中硬编码令牌

为了长时间使令牌有效,并直接写在应用程序中,用于简化代码可能很有诱惑力。

但,千万不要这么做!

3 - 对待令牌就像对待密码一样

token就是门钥匙!令牌和API密钥允许任何拥有它们的人访问资源。

因此,令牌和密码一样重要。以同样的方式重视它们!

4 - OAuth不是一个身份验证协议

OAuth是用于指派对资源的访问权限的,它不是一个身份验证协议。

把token看作是门禁卡。你需要验证自己以获得密钥,它无法区分使用者身份,别人盗用了你的token,就拥有了你的访问权限。API提供者坚决不能依赖于令牌作为唯一的身份证明。

您确实应该考虑OpenID Connect (OIDC),这是一种补充规范,而不是尝试自己在OAuth上实现身份验证。OIDC允许用户与应用程序共享其一部分个人资料,而无需共享其凭证。

f307765a940cd880b1c632a9d0c2ea38.png

5 - 注意在JWTs中存储的内容,并控制访问权限

JWTs可以用声明的形式存储大量信息,如果捕获了这些信息,就可以轻松地进行解析(除非额外进行了加密)。

如果你使用JWTs来携带一些精简必要的信息,则可以采用不同的方法:

  • 在客户端和后端之间,使用不透明字符串或基本的JWT。
  • 在后端,验证请求,并使用请求参数注入新的JWT。许多API网关也提供了开箱即用的功能。

如果你希望在整个流中使用相同的令牌,同时可能携带敏感信息,那就对令牌信息进行加密。也就是说,永远不要使用JWT来携带用户的凭证。

6 - 从头至尾彻底验证JWTs

在服务器端接收JWT时,必须彻底验证其内容。

特别是,你应该拒绝任何不符合期望的签名算法,或者使用弱算法,或弱的非对称/对称密钥进行签名的JWT。

此外,你必须验证所有payload、过期日期、发行者和用户。

7 - 不要在本地存储中存储令牌!要用就要使用安全的cookies

浏览器本地存储和会话存储可以从JavaScript读取,因此存储敏感信息(如token)是不安全的。

使用安全cookie、httpOnly标志和CSRF措施来防止令牌被窃取。

8 - 始终通过HTTPS在请求体中传输令牌

这样做可以限制令牌在运行中被捕获,避免被写入代理日志服务器日志的风险。

你还应该确保在所有涉及发布和验证令牌的参与者之间,只使用TLS 1.2/1.3和最安全的密码套件。

写在最后

令牌访问是现代应用程序实现的基础,但是必须小心处理。

作为后端开发人员,你必须确保提供适当的授权类型,来获取令牌,并彻底验证JWTs

作为前端开发人员,也应该谨慎处理JWTs的存储,并确保应用程序凭据的安全

Happy coding :)

我是@程序员小助手,持续分享编程知识,欢迎关注。
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值