jwt 怎么防止 csrf
小弟我最近看了 jwt 的使用,在自己写的小项目里也用了 jwt 作为单点登录验证等,后端是 nodejs。我想到了 csrf,csrf 和 jwt 的原理我也知道的差不多了,但是我的疑惑是采用 JWT 的形式可以防止 CSRF 吗? 我现在用 postman 去请求我的接口,如果 postman 的 header 里面不放我的 token(这个 token 是我现在开发的页面正常登陆上去后端返回到前端的 token) 的话确实显示的是 token 不存在不返回数据。 但我在浏览器的 localStorage 里面把我存的 token 拷出来放在 postman header 里面去请求,就成功了。那岂不是 jwt 防不了 CSRF 吗,存在前端的 token 谁都可以拿呀,拿了之后带着请求岂不是就ok 了?
这个问题真的很困扰我,请各位大哥不吝赐教~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你是不是对CSRF和JWT有什么误解。
JWT只是一个身份验证的凭证,和你用去防范CSRF并不矛盾,你完全可以在JWT之上加上防范CSRF的措施,比如检查Referer字段和添加校验token(即CSRF Token)。
检查Referer字段
添加校验token
您好,根据我个人的理解,CSRF攻击的大前提是攻击者获取不到用户的cookie,但是通过恶意链接诱使用户通过攻击者的链接提交请求给相关接口,cookie的值是默认携带的,而jwt的值需要通过前端页面的js代码提取出并主动提交给后端进行验证,而攻击者获取不到用户的jwt,更无法通过js的方式将它取出来,因此jwt可以防止CSRF攻击。
简单来说,CSRF攻击意味着请求没有来自正确的前端页面,而jwt需要前端主动将它取出。