背景:
我正在为REST web服务设计身份验证方案。这并不“真的”需要安全(这更像是一个个人项目),但我想让它尽可能安全,就像一个练习/学习经验一样。我不想使用SSL,因为我不想要设置SSL的麻烦,主要是不想要设置SSL的费用。
这些SO问题对我的开始特别有用:
宁静的身份验证 保护REST API / web服务的最佳实践 最好的SOAP/REST/RPC web api的例子?你为什么喜欢它们?他们有什么问题?
我正在考虑使用简化版的Amazon S3身份验证(我喜欢OAuth,但对我的需求来说似乎太复杂了)。我在请求中添加了一个由服务器提供的随机生成的nonce,以防止重放攻击。
回到这个问题:
S3和OAuth都依赖于对请求URL和一些选定的头进行签名。它们都不为POST或PUT请求签名请求体。这难道不容易受到中间人攻击吗?中间人攻击会保留url和头部,并用攻击者想要的任何数据替换请求体。
似乎我可以通过在签名的字符串中包含请求体的散列来防止这种情况。这安全吗?