【问题标题】:jwt: Why is my token shown in Chrome DevTools?jwt:为什么我的令牌会显示在 Chrome DevTools 中?
【发布时间】:2018-05-04 06:51:13
【问题描述】:

我在 Express.js 中有一个 API,它将创建博客文章并将它们添加到我的数据库中。当我从 DevTools 中的 React 应用程序发出请求时,它会显示我的 JWT。我担心当我的网站上线时,人们会看到我的令牌并从他们的网站发出请求以添加不需要的帖子。请告诉我发生了什么以及如何防止出现安全错误。

【问题讨论】:

  • 您在开发者工具中的哪个位置看到令牌?
  • @MikaS Network > [我的请求] > 标头 > 授权

标签: security express google-chrome-devtools jwt


【解决方案1】:

可以在 Chrome 开发工具上看到 JWT,因为您在 API 上创建新博客文章时将其作为授权标头发送,并且您是直接从 React 应用程序发出此请求。

如果 JWT 是敏感的,它不应该在前端可用,你必须有一个充当代理的服务器,它应该接收来自 React 应用程序的请求,然后将带有 JWT 作为授权标头的请求转发到你的 API。

这样做可以避免泄露 JWT,但仍然有可能有人向您的代理发出请求,这些请求将被转发到您的 API。

如果您希望只有您的 react 应用程序能够向您的代理执行请求,您可以创建一个中间件来验证传入请求的 IP 地址(更多详细信息 here),如果它与您的 React 应用程序地址匹配那么你接受请求,否则,你返回一个未经授权的错误。

如果您希望只有特定的人能够创建博客文章,那么您应该在 react 应用程序上进行身份验证。

【讨论】:

  • 哇,这对我帮助很大。你是救生员。
  • @NathanielFredericks 是的,这是一种方法。如果您在该文章中看到“代理的工作原理”部分,则表明您的 React 应用将调用localhost:3000/api/users,并将请求转发到your-server/api/users
  • 好的。这种代理也适用于 Django 吗?
  • 是的,你可以使用 Django,但通常建议代理尽可能薄(没有太多逻辑),Django 似乎是一个大框架,用于如此简单的事情,我建议看看到烧瓶。
【解决方案2】:

当您在标头中发送带有令牌的请求时,它在开发者工具的标头窗格中将如下所示:

我想这就是你想知道的是否安全。

当您使用普通 HTTP 时,React 应用程序和 API 之间的连接是未加密的。这使得replay attack 成为可能——前端和 API 之间的 ISP 或其他服务器可以读取令牌,并在稍后使用读取的令牌伪装成您。

最重要的解决方案是使用 HTTPS,它是加密的 HTTP。当您使用 HTTPS 时,潜在的攻击者无法嗅探和窃取令牌。在处理用户名、密码等时,应始终使用 HTTPS。

HTTPS 可以免费使用,而且设置起来并不难。有关详细信息,请参阅here。还有一个有趣的讨论here,您可能想阅读。

【讨论】:

  • 好吧,如果我添加 HTTPS 授权标头不会显示?
  • @NathanielFredericks 标头将显示在开发工具中,但数据包将被加密,其他人看不到。
  • 好的,但是人们不能拿端点和令牌然后仍然提出自己的请求吗?
  • @NathanielFredericks 令牌对客户端(例如使用浏览器的用户)来说不是秘密。他们可以用令牌做任何他们想做的事情。他们可以将令牌复制/粘贴到 Postman 中并在那里使用 API。因此,您必须确保不会将令牌发放给不应该拥有它的任何人。 HTTPS 阻止客户端以外的人使用令牌,因为在将令牌从客户端发送到服务器时无法嗅探它。
  • 这完全没有抓住问题的重点,SSL与实际提出的问题无关。
猜你喜欢
  • 1970-01-01
  • 2018-02-05
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 2017-10-04
  • 2019-05-29
  • 2016-05-03
相关资源
最近更新 更多