反应并在本地存储中存储jwt令牌

时间:2020-07-05 18:17:25

标签: reactjs cookies jwt local-storage xss

我最近刚开始在react + express应用中使用jwt,并遇到了将jwt令牌存储在何处的问题。似乎两个主要选项是localStorage和cookie,它们都易于受到各种攻击(XSS和CRSF)的攻击。<​​/ p>

但是我发现React应该是XSS安全的(What does it mean when they say React is XSS protected?),所以可以使用localStorage来存储jwt吗?如果不是,行业标准是什么?

1 个答案:

答案 0 :(得分:2)

cookie和localStorage都是可以接受的选项,许多应用程序都使用它们。您需要了解他们的利弊,并选择最适合您的用例的

曲奇饼

  • 可以设置为httpOnly,因此javascript将无权访问。这使得无法在XSS攻击中访问令牌。请注意,这并不意味着该应用程序不受XSS攻击。这仅意味着,即使在成功进行XSS攻击的情况下,攻击者也将无法访问令牌。
  • 有必要明确保护您的应用免受CSRF的攻击,因为身份验证信息将随请求自动发送。
  • 只能发送到其来源(更不用说不同域上的API)。
  • 该令牌可能会被该Cookie中的一个普通的旧会话ID取代,因为您的应用可能并不是真正无状态的。这样可以减少复杂性并提高安全性。
  • 在身份提供者有自己的起源,并且该应用与不同域中的多个后端通信的情况下,不能用于复杂的单点登录方案中的访问令牌存储。在这种情况下,短暂的访问令牌通常存储在localStorage中,而在httpOnly cookie中为身份提供者域设置了较长的刷新令牌。

localStorage

  • 可以通过javascript访问,其中包括成功的xss攻击。
  • 如果令牌是作为请求标头发送的,则通常无需针对CSRF采取进一步的保护措施(该应用程序本身就受到保护,因为身份验证信息不会自动发送)。
  • 令牌可以发送到不同的来源。这是主要优点,也是最重要的原因,您通常会使用localStorage或JWT。如果您只想将令牌发送到单个应用程序源,则可能根本不需要JWT,并且绝对不想使用localStorage。

保持“ XSS安全”

不是。对于开发人员来说,使它容易受到攻击可能更难,但是任何中等复杂度的React应用程序很可能都具有XSS漏洞。 React绝对不受不同形式的XSS的影响。只要开发人员有多种选择可以将用户输入插入DOM,就会有XSS,因为有时以“使之起作用”的方式解决问题是最容易的。如果您的应用可行,Content-Security-Policy在现代浏览器中可能会有所帮助。尽管默认情况下React是相当安全的,但这确实是正确的,这意味着通常可以。这是目前任何现代框架的相当标准的要求,并不意味着React中的XSS是不可能的。是的。

最终,一般来说,存储在httpOnly cookie中的会话ID(具有正确实施的会话管理,例如您的语言或框架所提供的会话管理)是最安全的 ,后跟httpOnly cookie中的令牌,但这还取决于您的威胁模型和确切的用例。