微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 redux 商店中添加 CSRF 令牌是一个好习惯吗?

如何解决在 redux 商店中添加 CSRF 令牌是一个好习惯吗?

在 redux 中存储 CSRF 令牌是一个好习惯吗?我之前是通过 props 传递它的(将它添加到 Axios 头文件中)。我有一个 rails 后端,我正在使用 gem react-rails,我的组件是服务器渲染的,所以我没有想出任何其他方法,而是将 CSRF 令牌传递给组件。

解决方法

可以将令牌存储在您的 Redux 存储中。

令牌的目的是防止其他站点/来源向您的 API 发出非 GET(POST、PUT、DELETE)请求。如果没有它,恶意站点可能会发出请求并搭载在浏览器中存储的 cookie 和会话。在纯 HTML 服务器渲染的 Rails 应用程序中,此令牌直接放入 HTML 中,使其可用于该页面上的任何 JavaScript。因此,您控制的页面上的任何代码都不是私人信息。

尽管如此,鉴于它的全局性质,并且您可能在 Redux 的上下文之外需要它,最好将它放在 window 上供任何人使用:

window.CSRF_TOKEN = document.querySelector("meta[name='csrf-token']").getAttribute("content")

任何时候调用 fetch 时,都可以包含以下标头:

headers: {
 'X-CSRF-Token': window.CSRF_TOKEN
}

由于您使用的是 react-rails,因此您也可以将其作为 props 传递给您的组件:

react_component 'MyForm',authenticity_token: form_authenticity_token

如果您不依赖 Rails 会话进行身份验证(例如,使用不记名令牌),您还可以使用 ApplicationController 中的这一行完全禁用 CSRF 令牌:

protect_from_forgery with: :null_session

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。