gpt4 book ai didi

ruby-on-rails - Rails 3,回形针 + S3 - 如何存储实例并保护访问

转载 作者:行者123 更新时间:2023-12-03 11:05:38 29 4
gpt4 key购买 nike

我有一个带有回形针的 Rails 3 应用程序,目的是将数据存储在 S3 上。

在应用程序中,用户属于一个实例。

我希望每个实例的所有模型都存储数据。并希望阻止来自实例 A 的用户访问或能够从实例 B 加载数据。

处理这个问题的最佳方法是什么?谢谢

最佳答案

我实际上只是在我的 中实现了授权的 S3 url。 Ruby on Rails 3 申请与 回形针 .让我分享一下我是如何做到这一点的。

所以我所做的,以及你可能想要的很容易实现。
让我给你举个例子:

文件对象 模型

has_attached_file :attachment,
:path => "files/:id/:basename.:extension",
:storage => :s3,
:s3_permissions => :private,
:s3_credentials => File.join(Rails.root, 'config', 's3.yml')

文件对象 Controller Controller
  def download
@file_object = FileObject.find(params[:id])
redirect_to(@file_object.attachment.expiring_url(10))
end

我相信这很简单。您将回形针附件添加到 文件对象 模型,然后在 中有一个 Action (例如 下载 )文件对象 Controller .通过这种方式,您可以使用 从您的 Controller 中进行一些应用程序级别的授权。 before_filter 或者其他的东西。

expiring_url() 方法(由 回形针 提供)在 上@file_object.attachment 基本上请求 Amazon S3 提供一个 key ,该 key 使文件可以使用该特定 key 访问。 的第一个参数expiring_url() 方法取一个整数表示 的数量秒 您希望提供的 URL 过期。

在我的应用程序中,它当前设置为 10 ( @file_object.attachment.expiring_url(10) ) 所以当用户请求一个文件时,用户总是必须通过我的应用程序,例如 myapp.com/file_objects/3/download 从亚马逊获取新的有效 URL,然后用户将立即使用该 URL 下载文件,因为我们使用的是 重定向到 中的方法下载行动。所以基本上是在用户点击 后 10 秒下载操作,链接已经过期并且用户已经(或仍在)愉快地下载文件,同时它仍然受到任何非授权用户的保护。

我什至尝试设置 expiring_url(1) 以便在用户触发对 URL 的 Amazon S3 请求后,该 URL 立即过期。这在本地对我有用,但从未在生产中使用过,您也可以尝试一下。但是,我将其设置为 10 秒,以便让服务器在短时间内做出响应。到目前为止效果很好,我怀疑有人会在创建 URL 后的 10 秒内劫持它,更不用说知道 URL 是什么了。

我采取的额外安全措施只是生成一个 key 对于创建的每个文件,我的 URL 始终如下所示:
has_attached_file :attachment,
:path => "files/:id/:secret_key/:basename.:extension"

这样每个 URL 都有唯一的 secret_key 在它的路径中,使得在 URL 可访问的时间内更难劫持。请注意,虽然文件的 URL 保持不变,但可访问性来自 Amazon S3 提供的其他过期参数:
http://s3.amazonaws.com/mybucket/files/f5039a57acc187b36c2d/my_file.pdf?AWSAccessKeyId=AKIAIPPJ2IPWN5U3O1OA&Expires=1288526454&Signature=5i4%2B99rUwhpP2SbNsJKhT/nSzsQ%3D

请注意这部分,这是亚马逊生成并过期的 key ,它使文件可以临时访问:
my_file.pdf?AWSAccessKeyId=AKIAIPPJ2IPWN5U3O1OA&Expires=1288526454&Signature=5i4%2B99rUwhpP2SbNsJKhT/nSzsQ%3D

那就是关于它的一切。如果通过 请求,这会随着对文件的每个请求而改变。下载行动。

希望这可以帮助!

关于ruby-on-rails - Rails 3,回形针 + S3 - 如何存储实例并保护访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3897837/

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