当前位置: 首页 > 面试题库 >

使用reactjs将jwt存储在localStorage中是否安全?

席兴平
2023-03-14
问题内容

我目前正在使用reactjs构建一个单页面应用程序。我读到许多不使用localStorage的原因是由于XSS漏洞。由于React避开了所有用户输入,现在使用localStorage是否安全?


问题答案:

在大多数现代单页应用程序中,我们确实必须将令牌存储在客户端的某个位置(最常见的用例-在页面刷新后使用户保持登录状态)。

共有2个可用选项:Web存储(会话存储,本地存储)和客户端cookie。 两种选择都被广泛使用,但这并不意味着它们非常安全。

Tom Abbott很好地总结了JWT
sessionStorage和localStorage的安全性

Web存储(localStorage /
sessionStorage)可通过同一域上的JavaScript访问。这意味着您站点上运行的所有JavaScript都可以访问Web存储,因此,它
很容易受到跨站点脚本(XSS)攻击的攻击
。简而言之,XSS是攻击者可以注入将在您的页面上运行的JavaScript的一种漏洞。基本的XSS攻击尝试通过表单输入注入JavaScript,攻击者将JavaScript
<script>alert('You are Hacked');</script>放入表单中以查看它是否由浏览器运行并且可以被其他用户查看。

为了防止XSS,常见的响应是对所有不受信任的数据进行转义和编码。React(主要是)为您做到了!这是关于React负责多少XSS漏洞保护的精彩讨论。

但这并不涵盖所有可能的漏洞!另一个潜在的威胁是 托管在CDN或外部基础结构上的JavaScript的使用

再次是汤姆:

现代网络应用程序包括用于A /
B测试,渠道/市场分析和广告的第三方JavaScript库。我们使用Bower等软件包管理器将其他人的代码导入我们的应用程序。

如果只破坏了您使用的一个脚本怎么办?恶意JavaScript可以嵌入到页面中,并且Web存储受到损害。
这些类型的XSS攻击可能会导致所有人在不知情的情况下访问您站点的Web存储。
这可能就是为什么许多组织建议不要在Web存储中存储任何有价值的东西或信任任何信息的原因。这包括会话标识符和令牌。

因此,我的结论是,Web存储作为一种存储机制, 在传输过程中不会强制执行任何安全标准
。读取并使用Web存储的任何人都必须进行尽职调查,以确保他们始终通过HTTPS发送JWT,而不通过HTTP发送JWT。



 类似资料:
  • 我目前正在使用ReactJS构建一个单页应用程序。 我读到不使用的原因之一是因为XSS漏洞。 由于 React 会转义所有用户输入,现在使用 是否安全?

  • 为了使用JWT保护REST API,根据一些材料(如本指南和本问题),JWT可以存储在本地存储或Cookies中。根据我的理解: localStorage受XSS限制,通常不建议在其中存储任何敏感信息 对于cookie,我们可以应用“httpOnly”标志,以降低XSS的风险。然而,如果我们要从后端的Cookies中读取JWT,那么我们将受到CSRF的约束 因此,基于上述前提,最好将JWT存储在C

  • 我正在使用react进行我的应用程序。我有一个,我想要一个背景图像。但我不能让它表现出来。 当我把它作为它工作得很好,但我听说我应该把它放在根目录下名为的文件夹中,所以它是,但这对我来说不适用,并且给了我: 您试图导入项目src/目录之外的.../image/bgimage.png。 有人能告诉我在reactJS中包含图像资产的正确方法吗?

  • 我是JWT的新手,对反应并不陌生,但对如何从前端解码JWT感到非常困惑。我最初认为我可以将JWT Secret存储在. env文件中,但许多消息来源说这样做是一个非常糟糕的主意。我有后端设置,可以在您登录时向我发送JWT。但是如果不将密钥存储在前端,我将如何解码信息? 后端: 我认为前端应该是: 我也读过很多关于后端应该进行验证的文章,但这难道不是一个巨大的安全风险,需要进行验证,然后返回不安全的

  • 本文向大家介绍JavaScript使用localStorage存储数据,包括了JavaScript使用localStorage存储数据的使用技巧和注意事项,需要的朋友参考一下 1 概述 JavaScript提供2个方法在浏览器端储存数据:sessionStorage 和 localStorage。 sessionStorage:保存的数据用于浏览器的一次会话,当会话结束(通常是该窗口关闭),数据被

  • 问题内容: 我想在HTML5中存储一个JavaScript对象,但是我的对象显然正在转换为字符串。 我可以使用来存储和检索原始JavaScript类型和数组,但是对象似乎无法正常工作。应该吗 这是我的代码: 控制台输出为 在我看来,该方法是在存储输入之前将输入转换为字符串。 我在Safari,Chrome和Firefox中看到了这种行为,因此我认为这是我对HTML5Web存储规范的误解,而不是浏览