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

将jwt作为GET请求的查询参数放入url是否安全?

乜飞航
2023-03-14

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

共有2个答案

彭烨熠
2023-03-14

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

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

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

这种安全性是有限的:

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

它充其量将与URL信息的传输一样安全,而且从未如此安全。

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

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

对于所有这些,这取决于。

对于其中的一些考虑,请参见另一个答案和JSON Web Token (JWT) - RFC-7519,包括那里引用的更新。

高溪叠
2023-03-14

在以下情况下可以是安全的:

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

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

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

 类似资料:
  • get请求参数放body里,post请求参数放url上这种是否合理? 有时候参数很少的情况我会让前端把参数放到post的url上,因为我感觉比如有两个参数,我后端要新建一个bean用@RequestBody接收完全没必要 我的想法是:如果get请求的参数可能比较复杂比如有bean的嵌套或者长度比较大超过了容器的限制(不考虑产品涉及是否合理),就可以放在body中,否则就放在url上;如果post请

  • 问题内容: 嗨,我想将get查询参数转换为Go中的结构,例如,我具有以下结构: 我有一个发送GET请求该情况下,用户可以指定可选参数,,,,,,,。 如果这些参数是在正文中发送的,那么我会这样做: 但是我无法在请求中发送正文,所以解决方案是什么呢?而不是单独获取每个参数然后将其放入结构中? 问题答案: 使用大猩猩的包装 该包装正是为此而发明的。 您可以使用struct标记]来告诉如何将URL参数映

  • 问题内容: 我需要构建一个GWT应用程序,该应用程序将由具有特定URL参数的外部应用程序调用。 例如: http://www.somehost.com/com.app.client.Order.html?orderId=99999。 如何在GWT应用程序中捕获orderId参数? 问题答案: 尝试, PS GWT可以调用本机javascript,这意味着如果javascript可以完成任务,那么G

  • 今天调用了一个接口,接口要求传一个日期过去,当时没仔细看(因为文档也没写请求参数和相应参数),以为是传一个data,里面有条件查询的参数之类的,结果第一次报错。 Required request parameter 'date' for method parameter type String is not present(方法参数类型字符串所需的请求参数“日期”不存在) 后面第二次调用的时候注意

  • Akka HTTP(正式名称为Spray)的一个特性是它能够自动地将数据从json封送和反封送到case类等中。 (我知道,如果我将它从GET改为POST,我可能会使它更像我希望的那样工作,这样我就可以将POST请求的内容从case类自动转换为json,但我并不希望在这里这样做。)

  • 问题内容: 我知道在php中,我只能用来检索以数组形式发送的GET数据,但是在Python中,可能是因为我只收到一个字符串,却无法识别为数组/列表。 如果需要的话,我会用flask/werkzeug。 问题答案: 参数名称的深度解析对于PHP AFAIK是唯一的。 如果你只需要一个简单的列表,只需传递几个具有相同名称的参数并使用(documentation)。 否则,你必须自己解析查询字符串。