2010-10-23 90 views
1

我的配置中有一条路线,说一个页面,比如/secure,需要登录(通过authlogic完成)。我的控制器中的before_filter负责处理这个问题。这工作正常,页面及其资源限制了访问 - 通过应用程序。AWS S3/Ruby on Rails/heroku:我的应用程序中的安全漏洞

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

但是,通过浏览器可以直接访问插入应用程序安全部分的任何资源。换句话说,/secure页面包含PDF文件等项目。虽然通过应用程序的资源是安全的,这些PDF文件可以从互联网上的任何地方访问(例如URL):http://s3.amazonaws.com/my_bucket/images/1234/the_file_which_should_be_secure.pdf

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

欢迎任何建议。

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

回答

4

最简单和最简单的解决方案就是用随机的,不可猜测的文件名命名您的S3资产,然后只揭露秘密应该有权访问的人员的网址。

这就是Facebook照片和许多其他网站的工作原理(没有任何隐私或安全性超出个人文件名的隐含范围)。

+0

有趣的方法,谢谢。我在AWS论坛上得到了回应,尝试了他们的ACL文档......如果这会显示出自己很多工作,我可能会这样! – faboolous 2010-10-24 00:42:07

+0

不客气。根据我对AWS ACL的了解,它们并不适合这种用途,但您应该调查它们。不要忘了回来接受这个答案,如果它帮助你。 – tfe 2010-10-24 01:08:25

+0

由于客户的预算紧张,我决定选择这个解决方案,因为它是最快的... – faboolous 2010-12-06 12:59:15

0

也许我很困惑你想完成什么,但S3有权限访问,需要加密密钥在你提供给用户的url中。使用aws-s3 gem时,默认情况下启用此选项。因此,除非用户使用内嵌有加密密钥的链接,否则不应该能够访问这些文件。这将要求您确保文件仅设置为授权访问。

更多信息可查询有关宝石的​​。寻找与访问控制相关的文档(我认为“authenticated_read”是你想要的)。

+0

对!我现在了解到我的存储桶上有ACL。在那里,我可以将权限设置为Everyone,Authenticated Users和my_username。对于“Everyone”和“Authenticated Users”,ACL表示'不读/写/全控制',因此我不明白我究竟能从浏览器中访问那些东西!我也很困惑... – faboolous 2010-10-24 14:41:28

+0

这不是一个加密的密钥,它被称为一个令牌。 – 2011-01-11 23:02:03

5

你可以试试,这是什么网页上说:

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

的specficics正在一节“没有更多的数据流,时间重定向”。

摘要: S3有四个罐头访问策略,通过身份验证的读取政策S3提供了一种用于生成只适用于指定的时间期间,私人内容的验证URL。

我实际上没有这样做,所以请让我知道它是否适合您。 :-)

+0

这看起来很有希望!非常感谢!我希望我能尽快赶到...... – faboolous 2010-10-28 13:15:40