jwt 怎么防止 csrf

发布于 2022-09-06 23:26:57 字数 397 浏览 16 评论 0

小弟我最近看了 jwt 的使用,在自己写的小项目里也用了 jwt 作为单点登录验证等,后端是 nodejs。我想到了 csrf,csrf 和 jwt 的原理我也知道的差不多了,但是我的疑惑是采用 JWT 的形式可以防止 CSRF 吗? 我现在用 postman 去请求我的接口,如果 postman 的 header 里面不放我的 token(这个 token 是我现在开发的页面正常登陆上去后端返回到前端的 token) 的话确实显示的是 token 不存在不返回数据。 但我在浏览器的 localStorage 里面把我存的 token 拷出来放在 postman header 里面去请求,就成功了。那岂不是 jwt 防不了 CSRF 吗,存在前端的 token 谁都可以拿呀,拿了之后带着请求岂不是就ok 了?

这个问题真的很困扰我,请各位大哥不吝赐教~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浅唱ヾ落雨殇 2022-09-13 23:26:57

你是不是对CSRF和JWT有什么误解。

JWT只是一个身份验证的凭证,和你用去防范CSRF并不矛盾,你完全可以在JWT之上加上防范CSRF的措施,比如检查Referer字段和添加校验token(即CSRF Token)。

检查Referer字段

HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址。在处理敏感数据请求时,通常来说,Referer字段应和请求的地址位于同一域名下。以上文银行操作为例,Referer字段地址通常应该是转账按钮所在的网页地址,应该也位于www.examplebank.com之下。而如果是CSRF攻击传来的请求,Referer字段会是包含恶意网址的地址,不会位于www.examplebank.com之下,这时候服务器就能识别出恶意的访问。

这种办法简单易行,工作量低,仅需要在关键访问处增加一步校验。但这种办法也有其局限性,因其完全依赖浏览器发送正确的Referer字段。虽然http协议对此字段的内容有明确的规定,但并无法保证来访的浏览器的具体实现,亦无法保证浏览器没有安全漏洞影响到此字段。并且也存在攻击者攻击某些浏览器,篡改其Referer字段的可能。

添加校验token

由于CSRF的本质在于攻击者欺骗用户去访问自己设置的地址,所以如果要求在访问敏感数据请求时,要求用户浏览器提供不保存在cookie中,并且攻击者无法伪造的数据作为校验,那么攻击者就无法再执行CSRF攻击。这种数据通常是表单中的一个数据项。服务器将其生成并附加在表单中,其内容是一个伪乱数。当客户端通过表单提交请求时,这个伪乱数也一并提交上去以供校验。正常的访问时,客户端浏览器能够正确得到并传回这个伪乱数,而通过CSRF传来的欺骗性攻击中,攻击者无从事先得知这个伪乱数的值,服务器端就会因为校验token的值为空或者错误,拒绝这个可疑请求。

世界和平 2022-09-13 23:26:57

您好,根据我个人的理解,CSRF攻击的大前提是攻击者获取不到用户的cookie,但是通过恶意链接诱使用户通过攻击者的链接提交请求给相关接口,cookie的值是默认携带的,而jwt的值需要通过前端页面的js代码提取出并主动提交给后端进行验证,而攻击者获取不到用户的jwt,更无法通过js的方式将它取出来,因此jwt可以防止CSRF攻击。
简单来说,CSRF攻击意味着请求没有来自正确的前端页面,而jwt需要前端主动将它取出。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文