ruby-on-rails - 如何通过 Rails 应用程序从 S3 代理文件以避免窃取?

标签 ruby-on-rails ruby-on-rails-3 proxy amazon-s3 paperclip

为了避免热链接、S3 带宽窃取等,我想将我的存储桶设为私有(private)并通过 Rails 应用程序提供文件。一般来说,概念听起来很简单,但我不完全确定哪种方法最适合这种情况。

我正在使用回形针进行一般 Assets 管理。有没有内置的方法来实现这种类型的代理?

一般来说,我可以轻松地从回形针中解析 url,并将它们指向我自己的 Controller 。从这一点上应该发生什么?我是否应该简单地使用 Net::HTTP 下载图像,然后使用 send_data 提供它?在这两者之间我想记录引用并设置正确的 Control-Cache header ,因为我在应用程序前面有一个反向代理。在这种情况下,Net::HTTP + send_data 是合理的方式吗?

由于我目前不知道的某些原因,也许整个想法真的很糟糕?我一般我认为,将 S3 直接链接到公共(public)存储桶是危险的,并且在出现窃取/热链接的情况下会产生一些严重的问题......

更新:

如果您有任何其他可以减少 S3 费用并防止热链接窃取的想法,请分享,即使它们与 Rails 没有直接关系。

最佳答案

使用(私有(private)存储桶|私有(private)文件)并将签名 URL 用于存储在 S3 上的文件。

签名包括过期时间(例如,从现在起 10 分钟,无论您想设置什么),以及一个加密哈希。如果签名无效或过期时间已过,S3 将拒绝提供文件。

这很有用,因为只有您可以在 S3 中为您的私有(private)文件创建有效 URL,并且您可以控制 URL 保持有效的时间。这可以防止盗取,因为盗取者无法签署他们自己的 URL,并且如果他们获得您签署的 URL,该 URL 将很快过期,之后将无法使用。

关于ruby-on-rails - 如何通过 Rails 应用程序从 S3 代理文件以避免窃取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4038078/

相关文章:

node.js - npm 警告无效配置代理配置必须是带有 'http://' 的完整 url

ruby-on-rails - 在 HTTParty 响应中访问文件名?

ruby-on-rails-3 - 如何在 Rails 中使用 Sendgrid Parse API

ruby-on-rails - 将元数据添加到使用 Wicked PDF 生成的 PDF

ruby-on-rails - Rails 3.1 和 Ruby EE

ruby-on-rails - 用 cucumber 和 rails 设置工厂女孩3

python - 在共享状态多处理中访问管理器对象

java - 泽西客户端 + 设置代理

ruby-on-rails - 每隔这么多字符向字符串添加换行符的功能?

ruby-on-rails - 渲染的用例是什么(:update)