为了避免热链接、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/