当前位置: 首页 > 知识库问答 >
问题:

JWT+cookies+HTTPS+CSRF

刘奇
2023-03-14

我已经在移动应用程序上使用了智威汤逊,但我将第一次在网站上实现它来进行身份验证,我有一点我仍然不明白:

  • 如果将JWT令牌与localStorage一起使用,就有可能发生XSS攻击
  • 如果我将JWT令牌与cookie一起使用,就有可能发生CRSF攻击

共有1个答案

穆景辉
2023-03-14

如果您使用JWT作为身份验证令牌,它应该存储为标记为httponlysecure的cookie,就像使用本地/会话存储一样。正如您所提到的,这可以防止XSS攻击,在这种攻击中,我们担心恶意JavaScript被注入到我们的页面并窃取我们的会话令牌。

  • 标记为httponly的cookie不能被JavaScript读取,因此不能在XSS攻击中被盗。
  • 但是,本地/会话存储可以由JavaScript读取,因此将会话令牌放在那里会使其容易受到XSS攻击。

但是,使会话令牌cookiehttponlysecure仍然容易受到CSRF攻击。要了解其中的原因,请记住cookie是用它们产生的域标记的,浏览器只发送与请求发送到的域匹配的cookie(与发送请求的页面的域无关)。例如,假设我在一个选项卡中登录到stackoverflow.com,在另一个选项卡中登录到evil.com。如果evil.comstackoverflow.com/delete-my-account进行ajax调用,我的stackoverflow身份验证令牌cookie将被发送到stackoverflow服务器。除非该endpoint对CSRF进行保护,否则我的帐户将被删除。

有防止CSRF攻击的技术。我建议阅读这个关于CSRF攻击和预防的OWASP页面。

 类似资料:
  • 我使用djangorestframework jwt对用户进行身份验证。我重写了内置的<code>JSONWebTokenAPIView</code>,以便在响应中返回用户详细信息。我也在我的视图中设置cookie中的令牌。 它在Django服务器上运行良好。当我使用REST可浏览api视图验证api时,我可以在cookies中看到令牌。但是我的前端(React)应用程序运行在localhost:

  • Cookie是简单的小文件/数据,通过服务器请求发送到客户端并存储在客户端。 每次用户加载网站时,都会随请求一起发送此cookie。 这有助于我们跟踪用户的操作。 以下是HTTP Cookie的众多用途 - 会话管理 个性化(推荐系统) User tracking 要在Express中使用cookie,我们需要cookie-parser中间件。 要安装它,请使用以下代码 - npm install

  • 问题内容: 我知道以前已经以各种形式询问过这个问题,但是我似乎无法解决这个问题。我尝试使用jQuery和本机JS API发出Ajax请求。 我的情况如下(参见附图): 浏览器发出HTTP请求 服务器响应并设置持久性Cookie 浏览器发出HTTP Ajax请求,Cookie在那里 服务器响应预期,更新Cookie 浏览器发出HTTPS Ajax请求,Cookie不再存在(?!) 由于没有Cooki

  • 有时,您可能希望根据Web应用程序的要求在每个站点访问者的基础上存储一些数据。 请记住,cookie是保存在客户端的,并且根据您的客户端浏览器安全级别,设置cookie有时可能会工作,有时可能不会。 为了说明Django中的cookie处理,让我们使用之前创建的登录系统创建一个系统。 系统将让您保持登录X分钟的时间,超过该时间,您将退出应用程序。 为此,您需要设置两个cookie,last_con

  • 什么是饼干? Web浏览器和服务器使用HTTP协议进行通信,HTTP是无状态协议。 但对于商业网站,需要在不同页面之间维护会话信息。 例如,一个用户注册在完成许多页面后结束。 但是如何在所有网页上维护用户的会话信息。 在许多情况下,使用Cookie是记住和跟踪偏好,购买,佣金以及更好的访问者体验或网站统计所需的其他信息的最有效方法。 这个怎么运作 ? 您的服务器以cookie的形式向访问者的浏览器

  • Web浏览器和服务器使用HTTP协议进行通信。 HTTP是无状态协议,即它不会在客户端发出的多个请求中维护客户端的数据。 客户端和服务器之间的完整请求 - 响应周期被定义为session 。 Cookie是浏览器用于存储与用户会话相关的数据的默认机制。 它是如何工作的 (How It Works?) 您的服务器以cookie的形式向访问者的浏览器发送一些数据。 浏览器可以接受cookie。 如果是