php – 安全地提供来自Amazon S3的文件

我有一个将用户文件上传到S3的应用程序.目前,文件夹和文件的ACL设置为私有.

我创建了一个存储以下信息的db表(称为docs):

id
user_id
file_name (original file as specified by the user)
hash_name (random hash used to save the file on amazon)

因此,当用户想要下载文件时,我首先在db表中检查他们是否有权访问文件.我宁愿不先将文件下载到我的服务器然后发送给用户 – 我希望他们能够直接从亚马逊获取文件.

是否可以依赖非常长的hashname(任何人都无法随机猜出文件名)?在这种情况下,我可以将每个文件的ACL设置为public-read.

或者,我可以使用其他选项来提供文件,同时保持文件的私密性吗?

请记住,一旦链接在那里,没有什么可以阻止用户与他人共享该链接.然后,没有什么能阻止用户文件保存到别处并共享指向文件副本的链接.

最好的方法取决于您的具体需求.

选项1 – 限时下载URL

如果适用于您的方案,您还可以创建到S3内容的过期(有时间限制)自定义链接.这将允许用户在有限的时间内下载内容,之后他们将不得不获得新的链接.

http://docs.amazonwebservices.com/AmazonS3/latest/dev/S3_QSAuth.html

选项2 – 混淆的URL

如果您重视通过Web服务器运行文件,而不是有意识地共享URL(无论多么模糊),那么请使用难以猜测的链接名称.这将允许链接“永远”保持有效,这意味着链接可以“永久”共享.

选项3 – 通过您的服务器下载

如果您担心要共享的链接并且当然希望用户通过您的网站进行身份验证,请在验证用户凭据后通过您的网站提供内容.

此选项还允许链接“永久”保持有效,但要求用户登录(或者可能只是在浏览器中有一个身份验证cookie)才能访问该链接.

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...