【问题标题】:Where is redux store saved?redux store 保存在哪里?
【发布时间】:2016-07-12 12:40:21
【问题描述】:

我正在研究 redux 应用程序的安全性,我将某些值存储在 redux 存储中,即用户令牌等。并试图查看其他人是否可以通过 xss 攻击访问它们,例如,我检查了sessionStorage、localStorage、cookies 不存在,也不存在于我的 app.js 文件(我的包文件)中,因此是我的问题。

【问题讨论】:

  • Redux 存储只是一个 JavaScript 对象。如果您使用var store = {},您不会期望在持久存储中找到它吧?它将在您的应用程序中的某处定义并存储在随机存取内存的堆中。
  • @DanPrince 在调试 react-redux 应用程序时是否可以访问 Chrome 控制台中的商店?
  • 当然,通过Redux Devtools 或确保将商店添加到窗口对象。类似let store = createStore(...); window.store = store

标签: javascript redux


【解决方案1】:

正要回复How does React and Redux store data? Is it localstorage or cookies?,但它被作为副本关闭了。所以我想把我的答案贴在这里。

回答

首先,值得注意的是 UI 库实际上并不管理状态(组件级状态除外)。 ReactJS 和 VueJS 期望您将数据传递给它们,就像您将参数传递给函数一样。他们不关心这些数据的来源或存储方式。

另一方面,Redux 不是一个 UI 库——它是一个状态管理库。 Redux 确实存储状态。 Redux 的 VueJS 必然结果是“Vuex”。

除此之外,接下来您需要了解的是状态管理和状态持久性之间的区别。 Redux 和 Vuex 之类的库通常会跟踪您的变量并提供用于更改状态的工具(特别是减速器) - 但它们不管理该状态的持久性。持久性是指将状态保存在某处以便下次有人访问您的应用时重新加载它——这似乎是您感兴趣的(因为您提到了 cookie 和本地存储)

持久性通常是手工编码的(将状态发送到 API 端点,将其保存到数据库,然后当您重新加载页面时,您 ping 不同的 API 端点以检索状态)或者您使用插件/模块为您的状态管理器为您处理持久性。例如,有一个流行的 Redux Local Storage 插件,叫做(很简单)redux-localstorage

【讨论】:

  • 你有很多有趣的内容。愿点赞和徽章永远与您同在!
  • @stevendesu - 非常好的,清晰的答案。希望我能给更多的赞。
【解决方案2】:

从这部分文档 (http://redux.js.org/docs/FAQ.html#performance-state-memory) 我推断它存储在内存中,因此它不是持久的。

【讨论】:

  • 这是否意味着第三方可以访问redux store?
  • 它存储在浏览器的内存中。取决于您对第 3 方的定义。客户端发生的任何事情都应该被认为是可访问的。
  • 可以在客户端访问商店,但是这样做容易吗?我想知道我是否可以为一个应该在我公司内部使用的小应用程序实现用户身份验证使用 Redux
  • @shintaroid - 不不不。那时,您不妨完全放弃身份验证。大量的客户端漏洞使得这个漏洞比你想象的更容易被利用。我认为这比没有身份验证更危险,因为你正在引诱一种虚假的安全感。
  • @shintaroid - 当然可以!对不起,如果我遇到太苛刻了!我只是想强调一下。再次,对不起,如果我遇到卑鄙的事情。度过美好的一天!
【解决方案3】:

Redux 使用内部存储器存储所有数据。例如,当您订阅 Store 时,Redux 只需 push listener to private array 并且不使用 Cookie 或 LocalStorage。

【讨论】:

    【解决方案4】:

    Redux 中的状态存储在内存中。这意味着,如果您刷新页面,状态就会消失。 redux 中的 state 只是一个持久存在内存中的变量,因为它被所有 redux 函数引用。

    一个误解是:

    在 redux 中,我们知道状态是作为对象存储的。

    这是不正确的。 redux 中的状态可以是任何有效的 JavaScript 值,而不仅仅是一个对象。将它作为一个对象(或像数组这样的特殊对象)通常最有意义,因为这允许更灵活的数据结构(但您可以根据需要将状态设置为例如数字) .

    【讨论】:

      猜你喜欢
      • 2020-01-07
      • 2018-07-01
      • 2016-08-15
      • 1970-01-01
      • 2020-09-15
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      相关资源
      最近更新 更多