【问题标题】:Is it safe to put a jwt into the url as a query parameter of a GET request?将 jwt 作为 GET 请求的查询参数放入 url 是否安全?
【发布时间】:2015-12-19 18:57:43
【问题描述】:

将 jwt(json Web 令牌)作为 GET 请求的查询参数放入 url 是否安全?

【问题讨论】:

    标签: security http jwt


    【解决方案1】:

    在以下情况下是安全的:

    1. JWT 仅限一次性使用
    2. jtiexp 声明存在于令牌中
    3. 接收器使用jtiexp 正确实施重放保护

    但如果它被用作可以重复使用的令牌,例如对于 API,然后将其作为查询参数提供不太可取,因为它可能最终出现在日志和系统进程信息中,可供有权访问服务器或客户端系统的其他人使用。在这种情况下,最好将其作为标头或 POST 参数的一部分呈现。

    此外,通过在查询参数中使用它,您可能会遇到浏览器或服务器上的 URL 大小限制;在标头中使用它可以提供更多空间,将其用作 POST 参数效果最好。

    【讨论】:

    • 此外,未经培训的用户可能会复制并粘贴带有令牌的 URL,这可能会导致基本上意外的会话劫持。
    • 如果端点是 REST 有很多情况你必须使用 GET 方法。此外,如果请求下载,你甚至不能使用ajax。
    • 一个相当短的exp jwt 之后)?第二个重定向只是为了防止复制和粘贴问题。如果您的浏览器遭到入侵,即使是标头也无法使您免于被盗令牌。
    • 因为作为查询参数,令牌可能最终出现在服务器日志、浏览器日志或引用标头中,并且有人可以从那里抓取它并尝试重新使用它。
    • @theprogrammer HTTPS 在传输过程中进行加密,但客户端计算机和服务器都可能会记录 URL。浏览器历史记录、Chrome/Firefox 扩展程序、服务器访问日志、性能监控工具等都可能出于充分的理由记录 URL,因此可能会无意中登录 URL 令牌。
    【解决方案2】:

    将 jwt(json Web 令牌)作为 GET 请求的查询参数放入 url 是否安全?

    是的,只要 JSON Web 令牌 (JWT) 的编码方式与 URL 中的查询参数编码透明:

    JWT 是 URL 编码安全的。就地使用时不会丢失数据;不需要额外的编码;它甚至本身就是 URL 编码安全的,在 JWT 上多次应用 url-encoding(百分比编码)不会破坏它。

    这种安全性是有限的:

    如果 URL 本身是此类数据泄漏的一部分,则在就地使用时可能存在数据泄漏。根据 URL 的普遍使用方式,您应该将 URL 查询参数中的任何 JWT 视为数据泄漏已经发生,因此已经为它准备好 JWT(例如,防止重放攻击)。

    而且它充其量与 URL 信息的传输一样安全,而且永远不会更安全。

    如果 URL 信息的传输不安全,那么 URL 中的所有内容也永远不会更安全,其中包括用作 GET 参数时的 JWT。


    除了在 URL 中使用它(在我看来,它是一种传输机制)之外,您可能还需要考虑其他数据保留、协议甚至您自己的系统属性,包括相关 JWT 本身的属性。

    所有这些都取决于。

    有关其中一些注意事项,请参阅 the other answerJSON Web Token (JWT) - RFC-7519 incl。那里引用的更新。

    【讨论】:

      猜你喜欢
      • 2018-10-16
      • 1970-01-01
      • 2018-09-22
      • 2011-12-05
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多