我想使用HTTP代码303将用户浏览器重定向到使用HMAC保护的GET URL。由于请求将来自用户浏览器,因此我不会对请求标头有所了解。所以我只使用HTTP方法和URL的值生成HMAC哈希。例如,我希望浏览器执行的URL可能是:
GET /download
?name=report.pdf
&include=http://url1
&include=http://url2
这为我创建report.pdf,包含使用include查询参数指定的所有网址的内容。
我的HMAC代码会将此网址更改为
GET /download
?name=report.pdf
&include=http://url1
&include=http://url2
&hmac-algorithm=simple-hmac
&hmac-signature=idhihhoaiDOICNK
我可以使用此URL向用户发出HTTP 303,用户将获得他们的report.pdf。
由于我没有在签名中包含请求标头,我想知道两件事:
1)潜在攻击者可以利用我没有签署请求标头的事实吗?
2)有没有更好的方法来实现我想要做的事情?
答案 0 :(得分:0)
当我意识到我在这里谈论的是签名URL时,我检查了Amazon Docs并在本文档中找到了“REST身份验证示例3:查询字符串身份验证示例”:http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html。
此示例是关于通过浏览器使用的签名URL。关于签名标题,文档说:
您知道当浏览器发出GET请求时,它不会提供Content-Md5或Content-Type标头,也不会设置任何x-amz-header,因此这些部分都保持为空。< / p>
换句话说,亚马逊将标题排除在签名之外。
亚马逊没有提到潜在的安全漏洞,所以在我听到其他情况(或被黑客攻击:)之前,我会假设我的方法很好。