2

我正在尝试从 ASP.NET 应用程序访问 Amazon S3 内容。我正在使用适用于 .NET 的 AWS 开发工具包。目前,我正在使用 GetpreSignedURL() 函数对我的请求进行签名,然后将我的 IFrame src 设置为 URL。

s3Placeholder.Text = ListingObjects();

GetPreSignedUrlRequest request = new GetPreSignedUrlRequest()
    .WithBucketName(bucketName)
    .WithKey("notebook.htm");

request.WithExpires(DateTime.Now.Add(new TimeSpan(7, 0, 0, 0)));

string url = S3.GetPreSignedURL(request);    
this.Iframe2.Attributes.Add("src", url);

问题是,如果您查看 IFrame 的来源,您可以看到完整的字符串,包括访问密钥和签名。我想知道是否有更好的方法通过 HTTP 标头执行此操作,以便登录安全信息不会通过查询字符串传递。

4

1 回答 1

2

您不能使用 http 标头对请求进行身份验证,因此唯一的其他潜在选择是通过您的 Web 服务器代理任何请求,但这会变得复杂并消除 S3 的许多好处。

但是,您所做的并不是不安全的。预签名的 url不会公开您的密钥。它只显示您的密钥(不需要保密)和使用密钥生成的签名(哈希)。

您无法从 url 返回获取密钥。

您可以通过使用Amazons IAM创建一个仅对单个存储桶具有只读访问权限的用户并使用这些凭证来创建您的 url,从而使事情变得更加安全。这样,即使攻击者以某种方式设法从 url 对您的密钥进行逆向工程,他们所拥有的只是对单个存储桶的只读访问。

于 2012-05-16T09:03:39.153 回答