9

嗨,目前我有一个角度应用程序和 java 后端。在我的角度组件 html 中,我有一些图像,例如个人资料照片。提供图像文件的资源由 spring security 保护。所以我的问题是将 json Web 令牌作为图像 url 的一部分附加是不是很糟糕?它会导致安全漏洞吗?这是不好的做法吗?

以下是我的角度代码在 chrome 开发人员工具中的样子。

<div _ngcontent-c5="" class="avatar-circle bg-secondary text-brand-secondary" ng-reflect-klass="avatar-circle" ng-reflect-ng-class="bg-secondary,text-brand-second" style="background-image: url(&quot;http://localhost:8080/api/files/4eb81fa8-9c5d-4920-b0f5-c9239fb1cae7?access_token=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJnbG9iYWxhZG1pbkBsb2NhbGhvc3QiLCJhdXRoIjoiUk9MRV9HTE9CQUxfQURNSU4iLCJleHAiOjE1NjExOTkwNTh9.UFvdgZNxs_O1uTjtUh64ko3A47R2fxZxYFX0aXv2Jp_TkVrmlBT1mzN40JwclGk3m0sCZONKbnVhgXXKy69DfQ&quot;);">
  <!--bindings={
  "ng-reflect-ng-if": "false"
}-->
</div>

任何帮助表示赞赏。我很想将 access_token 作为 http get 请求标头的一部分传递,但我无法在任何地方找到合适的代码。任何帮助表示赞赏。

4

1 回答 1

21

根据图像的不同,您可能希望将其公开或考虑使用不同的方式将令牌发送到服务器(cookie 可能会有所帮助)。

它会导致安全漏洞吗?这是一个坏习惯吗?

正如我之前的回答中提到的,JWT 令牌在语法方面是 URL 安全的。这是来自RFC 7519的引用:

JWT 表示为由句点 ( .) 字符分隔的 URL 安全部分序列。每个部分都包含一个 base64url 编码的值。[...]

但是,当使用 JWT 作为不记名令牌时,建议避免在 URL 中发送它们。请参阅RFC 6750中的以下引用:

不要在页面 URL 中传递不记名令牌:不应该在页面 URL 中传递不记名令牌(例如,作为查询字符串参数)。

相反,不记名令牌应该在采取保密措施的 HTTP 消息头或消息体中传递。

浏览器、Web 服务器和其他软件可能无法充分保护浏览器历史记录、Web 服务器日志和其他数据结构中的 URL。如果不记名令牌在页面 URL 中传递,攻击者可能能够从历史数据、日志或其他不安全的位置窃取它们。

于 2019-05-23T11:11:06.223 回答