gpt4 book ai didi

ruby-on-rails - 用于保护 S3 文档的 Rails 实现

转载 作者:行者123 更新时间:2023-12-04 02:29:54 25 4
gpt4 key购买 nike

我想通过 rails 应用程序保护我的 s3 文档,这样如果我去:

www.myapp.com/attachment/5 应该在显示/下载文档之前对用户进行身份验证。

我已经阅读了关于 stackoverflow 的类似问题,但我不确定我是否看到了任何好的结论。

根据我的阅读,您可以做几件事来“保护”您的 S3 文档。

1) 混淆 URL。我已经做到了。我认为这是一件好事,所以没有人能猜出 URL。例如,如果您的 S3 URL 很明显,则很容易“遍历”该 URL:https://s3.amazonaws.com/myapp.com/attachments/1/document.doc .有一个 URL,例如:
https://s3.amazonaws.com/myapp.com/7ca/6ab/c9d/db2/727/f14/document.doc似乎好多了。
这很好,但不能解决通过电子邮件或网站传递 URL 的问题。

2) 使用如下所示的过期 URL:Rails 3, paperclip + S3 - Howto Store for an Instance and Protect Access
然而,对我来说,这不是一个很好的解决方案,因为 URL 是公开的(即使只是很短的时间),另一个用户可能会及时快速地重用 URL。您必须调整时间以允许下载,而不会为复制提供太多时间。这似乎是错误的解决方案。

3)通过应用代理文件下载。起初我尝试只使用 send_file: http://www.therailsway.com/2009/2/22/file-downloads-done-right但问题是这些文件只能是您服务器上的静态/本地文件,不能通过其他站点(S3/AWS)提供。但是,我可以使用 send_data 并将文档加载到我的应用程序中,然后立即将文档提供给用户。这个解决方案的问题很明显 - 两倍的带宽和两倍的时间(将文档加载到我的应用程序然后返回给用户)。

我正在寻找一种提供#3 的完全安全性但不需要额外带宽和加载时间的解决方案。看起来 Basecamp 正在他们的应用程序背后“保护”文档(通过身份验证),我认为其他网站也在做类似的事情,但我认为他们没有使用我的 #3 解决方案。

建议将不胜感激。

更新 :

我选择了第四个解决方案:

4)使用亚马逊存储桶策略来控制基于referer的文件的访问:
http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?UsingBucketPolicies.html

再次更新:

那么#4 可以通过浏览器开发人员的工具轻松解决。所以我仍在寻找可靠的解决方案。

最佳答案

你想做两件事:

  • 将存储桶和其中的所有对象设为私有(private)。命名约定实际上并不重要,越简单越好。
  • 生成签名 URL,并从您的应用程序重定向到它们。这样,您的应用程序可以检查用户是否经过身份验证和授权,然后生成新的签名 URL 并使用 301 HTTP 状态代码将其重定向到该 URL。这意味着文件永远不会通过您的服务器,因此您没有负载或带宽。以下是签署 GET_OBJECT 请求的文档:

  • https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Presigner.html

    关于ruby-on-rails - 用于保护 S3 文档的 Rails 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6399149/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com