【发布时间】:2010-10-02 01:06:58
【问题描述】:
背景:
我正在为 REST Web 服务设计身份验证方案。这并不“真的”需要安全(它更像是一个个人项目),但我想让它尽可能安全,就像锻炼/学习体验一样。我不想使用 SSL,因为我不想麻烦,而且主要是设置费用。
这些 SO 问题对我开始很有帮助:
- RESTful Authentication
- Best Practices for securing a REST API / web service
- Examples of the best SOAP/REST/RPC web APIs? And why do you like them? And what’s wrong with them?
我正在考虑使用Amazon S3's authentication 的简化版本(我喜欢OAuth,但它对我的需要来说似乎太复杂了)。我将服务器提供的随机生成的nonce 添加到请求中,以防止重放攻击。
回答问题:
S3 和 OAuth 都依赖于对请求 URL 以及一些选定的标头进行签名。 他们都不为 POST 或 PUT 请求签署请求正文。这是否容易受到中间人攻击,它会保留 url 和 headers 并用攻击者想要的任何数据替换请求正文?
似乎我可以通过在已签名的字符串中包含请求正文的哈希来防止这种情况。这安全吗?
【问题讨论】:
-
Amazon S3 可以包含 Content-MD5 作为标头字符串的一部分,以防止您描述的 MITM 攻击。
-
MD5 是一个非常弱的哈希函数,多年来一直不鼓励使用它:en.wikipedia.org/wiki/MD5。现在使用 SHA2。 MD5 是身份危机猪的口红。
-
Startcom 提供免费的 SSL 证书,不会在主流浏览器中抛出证书警告
-
@SeanKAnderson(咆哮:当互联网受到间谍机构的围攻时,我发现人们谈论 99.99999%s 的方式很荒谬,间谍机构在 2008 年就已经自动化了很多攻击——这是一种奇怪的方式处理一个真正的问题——“Naaah,不会有问题;我奶奶将无法破解它”
-
@Plato 这些天我推荐 LetsEncrypt 以获得免费的 SSL 证书
标签: rest authentication oauth amazon-s3 rest-security