我试图了解将 jwt 存储在本地存储(易于 xss)与 cookie(易于 csrf)中的安全含义。如果我将 jwt 令牌存储在前端的应用程序状态中,例如在 redux 商店中,我想了解安全隐患。
编辑:
我试图找到更多关于存储令牌的信息。似乎所有文章和答案实际上都是在确定有两种方法可以做到这一点后开始讨论的,cookie 或浏览器存储。喜欢这个相关的问题: Where to store JWT in browser? 如何防范CSRF? 喜欢这些帖子:https : //stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage https://auth0.com/docs/security/store-tokens
我理解其中大部分的要点,但我试图明确讨论全局变量的选项。
我想从Stormpath帖子中对JWT令牌和CSRF提出疑问,解释将JWT存储在localStorage或cookies中的优缺点.
[...]如果你使用JS从cookie中读取值,这意味着你不能在cookie上设置Httponly标志,所以现在你站点上的任何JS都可以读取它,从而使它完全相同的安全性 - 作为在localStorage中存储内容的级别.
我试图理解为什么他们建议将xsrfToken添加到JWT.是不是将JWT存储在cookie中然后将其解压出并将JWT放在HTTP头中并根据HTTP头验证请求与Angular的X-XSRF-TOKEN完成相同的操作?如果您根据标头中的JWT进行身份验证,则其他域无法代表用户发出请求,因为其他域无法从cookie中提取JWT.我不了解JWT中xsrfToken的目的 - 也许它只是一个额外的防御层 - 这意味着攻击者必须在您的站点上拥有受损的脚本,并且当时CSRF必须是用户.所以他们必须以两种方式击中你以便能够进行攻击.
帖子在这个答案中链接说:
最后一件事是确保您对每个HTTP请求都有CSRF保护,以确保启动对您站点的请求的外部域无法正常运行.
[...]然后,在每次进入服务器的请求中,确保您自己的JavaScript代码读取cookie值并将其设置在自定义标头中,例如X-CSRF-Token,并验证服务器中每个请求的值.外部域客户端无法为您的域的请求设置自定义标头,除非外部客户端通过HTTP选项请求获得授权,因此任何CSRF攻击尝试(例如在IFrame中,无论如何)都将失败.
即使他们可以设置自定义标头,他们也无法访问存储JWT令牌的cookie,因为只有在同一域上运行的JavaScript才能读取cookie.
唯一可行的方法是通过XSS,但如果存在XSS漏洞,JWT中的xsrfToken也会受到影响,因为在可信客户端域中运行的恶意脚本可以访问cookie中的JWT,并在请求中包含xsrfToken的标头.
所以等式应该是:
如果客户端和服务器在不同的域中运行,则服务器应发送JWT,客户端应使用JWT创建cookie.我认为这个等式对这种情况仍然有效.
更新: MvdD同意我的意见:
由于浏览器不会自动将标头添加到您的请求中,因此它不容易受到CSRF攻击
我想使用 来获取数据getInitialProps。我用的是isomorphic-unfetchlib.
import fetch from 'isomorphic-unfetch'
...My Component Page...
Component.getInitialProps = async () => {
const res = await fetch(<path>, {method: 'GET', headers: {
'Authorization': `bearer ${typeof Storage !== 'undefined' && localStorage.getItem('my_token')}`,
}})
const data = await res.data
return {stuff: data}
}
Run Code Online (Sandbox Code Playgroud)
它在客户端准确运行,但在服务器端返回 401。我认为问题出在本地存储上。无法从服务器访问 LocalStorage。据我了解,我需要等到页面安装完毕。如何解决这个问题呢?
补充问题,我可以用 theaxios代替 吗isomophic-unfetch?
我们希望在我们的应用程序中使用 Next.js,但我们将主要使用客户端渲染来获取数据。该 API 是我们将要调用的外部 API。只有主页将使用服务器端渲染。核心 API 需要登录才能访问仪表板,并且仪表板内容是特定于用户的。因此,我们想在 next.js 中使用客户端数据获取。JWT 在外部 API 中用于授予用户授权,用户的角色以及其他用户的详细信息存储在 JWT 访问令牌中。我们是 Nextjs 的新手,想知道如何进行此操作。我们需要每个用户在仪表板内发出 API 请求时发送其访问令牌作为其请求的一部分。我们是否可以将此访问令牌存储在其本地存储中,并在发出 API 请求时将其传递给标头承载者?
我是一名学习密码学的学生。在网上搜索后,我仍然无法找到我的问题的答案。我想知道如何安全地存储电子商务网站的会话 ID。如果可以的话,怎么可能呢?请用通俗易懂的语言解释一下。期待您的有用答案。
干杯
I have just started learning authorization and authentication in react, and I'm writing this after finishing my first simple login system using JWT, as most of you know you store a token in the browser and then you compare it with the saved tokens in your backend now when that validation is done truly I set Authenticated Boolean to true and gain access to the website, after finishing that simple system I checked react dev tools and I found out …
我在node js. 我正在为仪表板创建路线。
JWT token.如何验证后端管理员的路由?