我有一个存储视频的网络应用。我正在使用java servlet(通过https)来验证用户名和密码。验证详细信息后,我会将用户重定向到存储在AWS S3中的视频。对于那些不知道S3如何工作的人来说,它只是一个存储对象的Web服务(基本上将其视为存储文件)。它还使用https。现在显然要使这个工作,s3对象(文件)是公共的。我给它一个随机的名字,上面写着数字和字母。
所以servlet基本上是这样的:
void doGet(request, response){
if (authenticateUser(request.getParameter("Username"), request.getParameter("Password")){
response.sendRedirect("https://s3.amazonaws.com/myBucket/xyz1234567.mp4");
}
}
这显然已经简化了,但它得到了重点。这里有任何非常明显的安全漏洞吗?视频代码显然会有https://www.mysite.com/getVideo?Username=“Me”和密码=“randomletters”之类的来源。乍一看,似乎它应该像其他任何东西一样安全,假设我给AWS s3的文件名提供足够随机的名字?
答案 0 :(得分:3)
明显的安全漏洞是,任何人都可以检测到身份验证servlet重定向到哪个URL,并与所有朋友共享此URL,从而允许任何人直接访问资源,而无需通过身份验证servlet。
不幸的是,我根本不认识S3,因此我不建议修复安全问题。
答案 1 :(得分:0)
所有这些机制都提供了非常有限的混淆 - 在大多数现代浏览器(或代理商,如Fiddler)中使用开发人员工具,用户将能够观看正在加载的视频的URL,如果它在公共S3存储桶,然后简单地共享链接。
使用S3,您唯一真正的解决方案是保护存储桶,然后要求用户登录或使用临时令牌进行访问[http://docs.aws.amazon.com/AmazonS3/latest/dev /RESTAuthentication.html] ...虽然这确实使您的解决方案复杂化
我还要提一下,在视频资产链接上的明文中包含密码和用户名(来自上面的问题)是非常不安全的