【问题标题】:AWS S3/Ruby on Rails/ heroku: Security hole in my appAWS S3/Ruby on Rails/heroku:我的应用程序中的安全漏洞
【发布时间】:2011-04-29 13:32:11
【问题描述】:

我的配置中有一条路由,它表示对于一个页面,比如/secure,需要登录(通过 authlogic 完成)。我的控制器中的 before_filter 会处理这个问题。这很好用,页面及其资源的访问受到限制 - 通过应用程序。

问题是,我们正在使用 Amazon S3 存储部署到 heroku 的这个应用程序(基于炼油厂cms)。我有一个桶,它工作正常。

但是,插入应用程序安全部分的任何资源都可以通过浏览器直接访问。换句话说,/secure 页面包含诸如 pdf 文件之类的项目。虽然通过应用程序可以保护资源,但可以从 Internet 上的任何位置访问这些 pdf 文件(示例 URL):http://s3.amazonaws.com/my_bucket/images/1234/the_file_which_should_be_secure.pdf

我可以在 S3 上进行细粒度的访问控制吗?我必须创建一个新的存储桶吗?理想情况下,我想在我的资源上设置一个标志,使其在 Internet 中不可见 - 不知道。

欢迎提出任何建议。

附: openid.org 有一个过期的 ssl 证书,所以需要创建一个新的空帐户,因为我无法登录

【问题讨论】:

    标签: ruby-on-rails amazon-s3 heroku refinerycms


    【解决方案1】:

    最简单和最简单的解决方案就是用随机的、不可猜测的文件名命名您的 S3 资产,然后只将秘密 URL 公开给应该有权访问的人。

    这就是 Facebook 照片和许多其他网站的工作方式(除了单个文件名的模糊性之外,没有隐私或安全性)。

    【讨论】:

    • 有趣的方法,谢谢。我确实在 AWS 论坛上得到了回复,尝试了他们的 ACL 文档……如果这表明工作量很大,我可能会走这条路!
    • 不客气。根据我对 AWS ACL 的了解,它们并不真正适合这种用途,但您应该调查它们。如果对您有帮助,请不要忘记返回并接受此答案。
    • 由于客户预算紧张,我决定选择这个解决方案,因为它是最快的......
    【解决方案2】:

    也许我对您要完成的工作感到困惑,但 S3 具有权限访问,需要在您提供给用户的 url 中包含加密密钥。使用 aws-s3 gem 时,默认启用此选项。因此,除非用户使用嵌入了加密密钥的链接,否则您应该无法访问这些文件。这将要求您确保将文件设置为仅授权访问。

    更多信息可以在http://amazon.rubyforge.org/找到关于宝石的信息。查找与访问控制相关的文档(我认为“authenticated_read”是您想要的)。

    【讨论】:

    • 对!我现在了解到我的存储桶上有一个 ACL。在那里,我可以为所有人、经过身份验证的用户和 my_username 设置权限。对于“所有人”和“经过身份验证的用户”,ACL 说“没有读/写/完全控制”。因此我不明白我实际上是如何从浏览器访问这些东西的!我也很困惑......
    • 它不是加密密钥,它被称为令牌。
    【解决方案3】:

    你可以试试这个页面上所说的:

    http://thewebfellas.com/blog/2009/8/29/protecting-your-paperclip-downloads

    具体内容在“不再流式传输,重定向时间”部分下。

    总结: S3 有四个固定访问策略,通过使用身份验证读取策略,S3 提供了一种为仅在指定时间段内有效的私有内容生成经过身份验证的 URL 的方法。 p>

    我实际上并没有这样做,所以请告诉我它是否适合你。 :-)

    【讨论】:

      【解决方案4】:

      如果您使用回形针,您可以通过使 url 过期来限制对存储在 Amazon S3 上的对象的访问。 (如果您不介意使用过期网址)

      这是来自 GitHub 上的 thinkbot/paperclip 的 Wiki

      https://github.com/thoughtbot/paperclip/wiki/Restricting-Access-to-Objects-Stored-on-Amazon-S3

      此外,该页面底部还有一些您可能不想错过的有用链接。

      【讨论】:

        猜你喜欢
        • 2011-09-08
        • 1970-01-01
        • 1970-01-01
        • 2013-12-23
        • 1970-01-01
        • 2011-10-19
        • 2013-02-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多