Art*_*kel 11 security obfuscation ruby-on-rails amazon-s3
我想通过rails app保护我的s3文件,如果我去:
www.myapp.com/attachment/5应在显示/下载文档之前对用户进行身份验证.
我已经在stackoverflow上读过类似的问题,但我不确定我是否看到了任何好的结论.
根据我的阅读,您可以采取一些措施来"保护"您的S3文档.
1)模糊URL.我做到了这一点.我认为这是一件好事,所以没有人可以猜到这个网址.例如,如果您的S3 URL明显,则可以轻松地"遍历"URL:https: //s3.amazonaws.com/myapp.com/attachments/1/document.doc.有一个URL,如:https: //s3.amazonaws.com/myapp.com/7ca/6ab/c9d/db2/727/f14/document.doc似乎好多了.这很好,但不能解决通过电子邮件或网站传递URL的问题.
2)使用如下所示的过期URL: Rails 3,paperclip + S3 - 如何存储实例并保护访问 对我而言,这不是一个很好的解决方案,因为URL是暴露的(即使只是很短的时间)并且另一个用户可能及时重用URL.您必须调整允许下载的时间,而不会提供太多的复制时间.这似乎是错误的解决方案.
3)通过应用程序代理文档下载.起初我尝试使用send_file:http: //www.therailsway.com/2009/2/22/file-downloads-done-right 但问题是这些文件只能是服务器上的静态/本地文件和不通过其他站点(S3/AWS)提供服务.但是,我可以使用send_data并将文档加载到我的应用程序中,并立即将文档提供给用户.这个解决方案的问题很明显 - 带宽的两倍和时间的两倍(将文档加载到我的应用程序然后再返回给用户).
我正在寻找一种能够提供#3完全安全性的解决方案,但不需要额外的带宽和时间来加载.看起来Basecamp正在"保护"他们应用程序背后的文档(通过身份验证),我认为其他网站正在做类似的事情,但我不认为他们正在使用我的#3解决方案.
建议将不胜感激.
更新:
我选择了第四个解决方案:
4)使用amazon存储桶策略来控制基于引用者的文件访问:http: //docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?UsingBucketPolicies.html
再次更新:
#4井可以通过浏览器开发人员的工具轻松解决.所以我仍然在寻找一个可靠的解决方案.
我会投票给第三种,这是唯一真正安全的方法。因为一旦您将用户传递到 S3 URL,该 URL 就在其过期时间之前有效。狡猾的用户可以利用这个漏洞,唯一的问题是,这会影响您的应用程序吗?也许您可以将过期时间设置得更短,从而将风险降到最低?看一下这篇文章的摘录: 从浏览器访问私有对象
所有私有对象都可以通过向 S3 服务器发出经过身份验证的 GET 请求来访问。您可以为对象生成经过身份验证的 url,如下所示:
S3Object.url_for('beluga_baby.jpg', 'marcel_molina')
Run Code Online (Sandbox Code Playgroud)
默认情况下,经过身份验证的 URL 在生成后 5 分钟后过期。
过期选项可以使用 :expires 选项指定自纪元以来的绝对时间,也可以使用 :expires_in 选项指定相对于现在的秒数:
归档时间: |
|
查看次数: |
1783 次 |
最近记录: |