我目前正在使用ReactJS构建一个单页应用程序.

我了解到,不使用localStorage的原因之一是XSS漏洞.

由于React会逃避所有用户输入,现在使用localStorage安全吗?

推荐答案

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

总共有两个选项可用:Web存储(会话存储、本地存储)和客户端cookie.Both options are widely used, but this doesn't mean they are very secure.

Tom Abbott很好地总结了JWT sessionStorage and localStorage security个:

Web存储(localStorage/sessionStorage)可以通过同一域上的JavaScript访问.这意味着在你的网站上运行的任何JavaScript都可以访问web存储,正因为如此.简而言之,XSS是一种漏洞,攻击者可以在其中注入将在您的页面上运行的JavaScript.基本XSS攻击试图通过表单输入注入JavaScript,攻击者在表单中输入<script>alert('You are Hacked');</script>,以查看该表单是否由浏览器运行,是否可以被其他用户查看.

为了防止XSS,常见的响应是对所有不受信任的数据进行转义和编码.React(主要是)为你做到这一点!这是一个很棒的discussion about how much XSS vulnerability protection is React responsible for.

但这并不能涵盖所有可能的漏洞!另一个潜在威胁是the usage of JavaScript hosted on CDNs or outside infrastructure.

汤姆又来了:

现代网络应用包括用于A/B测试、漏斗/市场分析和广告的第三方JavaScript库.我们使用包管理器(如Bower)将其他人的代码导入到我们的应用中.

如果您使用的脚本中只有一个被泄露了怎么办?恶意JavaScript可能会嵌入到页面中,Web存储也会受到损害.These types of XSS attacks can get everyone’s Web Storage that visits your site, without their knowledge.这可能就是为什么许多组织建议不要在web存储中存储任何有价值的信息或信任任何信息.这包括会话标识符和令牌.

因此,我的结论是,作为一种存储机制,Web存储does not enforce any secure standards during transfer.无论谁阅读并使用Web存储,都必须尽职尽责,确保始终通过HTTPS发送JWT,而不是HTTP.

Reactjs相关问答推荐

Redux向后端发送请求时出现钩子问题

在Reaction中测试条件组件

Redux Provider Stuck甚至彻底遵循了文档

如何在MUI X数据网格列中显示IMG?

使用REACT-RUTER-V6和ZUSTANDreact 中的身份验证

使用Ionic 7和React 18,如何访问历史对象以在页面之间导航?

取消 Select 较高组件中的所有行

React Context API 在 Next.js 中更改路由时获取默认数据

未处理的拒绝 (TypeError):无法读取未定义的属性(读取协议)

Zod 验证模式根据另一个数组字段使字段成为必需字段

卸载 React 组件时未清除本地存储项目

如何在 React.js 中提取 PDF 的内容?

React Native应用如何订阅Supabase的实时数据?

文本的几个词具有线性渐变 colored颜色 - React native

MUI TextField Select 菜单的最大高度

antd 找不到 comments

React - 仅在变量为真时显示项目

加密 Django Rest Framework API 响应 + 解密响应应用程序中的响应

在状态中存储多个选定的选项

运行开发服务器时如何为 Vite 指定运行时目录