背景:
我正在为 REST Web 服务设计身份验证方案。这并不“真的”需要安全(它更像是一个个人项目),但我想让它尽可能安全,就像锻炼/学习体验一样。我不想使用 SSL,因为我不想要麻烦,而且主要是设置它的费用。
这些 SO 问题对我开始特别有用:
我正在考虑使用简化版本的Amazon S3 身份验证(我喜欢OAuth,但它似乎对我的需求来说太复杂了)。我将服务器提供的随机生成的nonce添加到请求中,以防止重放攻击。
要解决这个问题:
S3 和 OAuth 都依赖于对请求 URL 以及一些选定的标头进行签名。他们都没有为 POST 或 PUT 请求签署请求正文。这是否容易受到中间人攻击,它保留 url 和 headers 并用攻击者想要的任何数据替换请求正文?
似乎我可以通过在签名的字符串中包含请求正文的哈希来防止这种情况。这安全吗?