0

我有一个存储视频的网络应用程序。我正在使用验证用户名和密码的 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"&Password="randomletters" 的来源。乍一看,假设我给位于 AWS s3 的文件名提供足够随机的名称,它似乎应该和其他任何东西一样安全?

4

2 回答 2

3

明显的安全漏洞是任何人都可以检测到身份验证 servlet 重定向到哪个 URL,并与他的所有朋友共享这个 URL,从而允许任何人直接访问资源,而无需通过身份验证 servlet。

不幸的是,我根本不了解 S3,所以我不能推荐任何解决安全问题的方法。

于 2013-04-05T17:34:50.710 回答
0

所有这些机制所做的只是提供非常有限的混淆 - 在大多数现代浏览器(或诸如 Fiddler 之类的代理)中使用开发人员工具,用户将能够观看正在加载的视频的 URL,如果它位于公共 S3 存储桶中,然后简单地分享链接。

使用 S3,您唯一真正的解决方案是保护存储桶,然后要求用户登录或使用临时令牌进行访问 [http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication。 html] ...虽然这确实使您的解决方案复杂化

我还要提到,在指向视频资产的链接(来自上面的问题)中以明文形式包含密码和用户名是非常不安全的

于 2013-04-07T15:08:07.370 回答