Geo*_*sio 3 pre-signed-url backblaze
情况:我在网络中运行一个 Django 应用程序,登录用户还可以下载 .pdf 文件(非公开,有特定限制,具体取决于用户权限)。最方便的方法(例如在 S3 中)是使用有时间限制的预签名 URL,因为它们会立即在浏览器中打开,而且应用程序服务器无需处理额外的流量。
问题:Backblaze B2 显然没有提供明确的方法来创建预签名 URL 以直接在浏览器中下载非公开文件。生成 api URL 和授权令牌以及从对象存储中获取文件发生在应用程序服务器级别,并且该过程不会向“普通”用户公开。
但最终,API 操作“b2_download_file_by_name”仅使用 GET 请求,这意味着我可以使用“?Authorization=123xyz........”将授权令牌添加到请求的 URL。这样我就可以获得一个在浏览器中完美运行的预签名 URL,以允许在有限的时间内访问特定的非公开文件。(请注意:B2 下载可以限制为具有特定前缀的文件 [如 s3 伪文件夹],但如果指定的“前缀”足够长,我可以使身份验证令牌特定于一个文件。)
问题:正如我上面所写,通常授权令牌不会暴露给用户。现在,如果我使 URL 可见,这是否意味着存在安全风险?换句话说,拥有一个或多个令牌的用户是否可以从令牌中提取通用访问密钥,或者令牌是否加密得足以避免这种情况?
根据 b2_download_file_by_name 调用的文档,您可以按照您描述的方式在 URL 中使用下载授权。
授权令牌可以在 URL 查询字符串中提供,而不是在 HTTP 标头中传递。从 b2_authorize_account 获取的帐户授权令牌将允许访问私有存储桶中的所有文件。从 b2_get_download_authorization 获取的下载授权令牌将允许访问名称以用于生成下载授权令牌的文件名前缀开头的文件。
然而,似乎 b2_get_download_authorization 调用中设置的到期时间被忽略,因此生成的 URL 永远不会过期,这当然是不安全的。我向 B2 提交了一张关于此问题的支持票,因此希望能找到解决方案。
| 归档时间: |
|
| 查看次数: |
2535 次 |
| 最近记录: |