小编Hen*_*rge的帖子

Web 应用程序在提供机密媒体文件时应如何确保安全?

问题:假设用户上传高度机密的信息。这被放置在第三方存储服务器中。此第三方存储桶对 Web 应用程序使用不同的身份验证系统。确保只有用户或管理员才能访问文件 URL 的最佳实践是什么?

更多上下文: Django Web 应用程序正在 Google App Engine Flexible 上运行。Google Storage 用于通过 Django 提供静态文件和媒体文件。高度机密的信息是护照、法律合同等。

静态文件的提供方式相当不安全。该/static/存储桶是公共的,文件通过 django 的静态文件系统提供。这有效是因为

  • 我们的任何静态文件中都没有机密或用户信息
    ,只有库存图像、CSS 和 JavaScript,并且
  • 文件在生产前经过丑化和缩小。

然而,对于媒体文件,我们需要用户特定的权限,如果用户 A 上传图像,则用户 A 可以查看它,工作人员可以查看它,但用户 B 和未经身份验证的用户在任何情况下都无法查看它。这包括他们是否有网址。

我的首选系统是,GCP 存储可以使用相同的 django 身份验证服务器,因此当浏览器请求时...google.storage..../media/user_1/verification/passport.png,我们可以检查该用户拥有哪些权限,将其与上传的用户 ID 进行比较,并决定是否显示 403 或实际文件。

此问题的行业标准/最佳实践解决方案是什么?

我是否可以使用服务帐户使两个存储桶只能由应用程序访问,并在内部确保仅当正确的用户正在查看页面时才共享链接?(有人喜欢静态,{用户或工作人员}喜欢媒体吗?)

我的问题,特别是(关于网络应用程序安全性):

  1. 从公共可读存储桶提供静态文件是否安全?
  2. 是否可以假设,如果我的应用程序请求一个文件 url,该文件来自经过身份验证的用户?
  3. 特别是关于 Django 和 GCP 存储,如果 2 为假(我相信是),我如何确保从存储桶提供的文件仅对具有正确权限的用户可见?

media django google-app-engine google-cloud-storage google-cloud-platform

6
推荐指数
1
解决办法
691
查看次数