我正在为我的网站构建一个非常基本的REST API。我目前使用的唯一动词是GET,它只是输出我网站上的帖子列表。
对于身份验证,我一直在阅读有关HMAC的内容,特别是本文:
http://websec.io/2013/02/14/API-Authentication-Public-Private-Hashes.html
我的问题在于“散列内容”应该是什么。因为我没有向API发布任何数据,所以我只是使用我的私钥对我的公钥(使用简单的盐)进行哈希处理。
这是一种安全的方法还是应该使用不同的“内容哈希”?数据在任何方面都不敏感 - 这只是一次学习练习。
答案 0 :(得分:0)
你会想要考虑“重播攻击者”。当攻击者在您的API客户端和服务器之间捕获数据包时,她在以后重播时会有什么损害?
在您的情况下,如果您仅在HMAC中使用用户的API密钥,则攻击者将能够在重播请求时模拟该用户。她可以调用任何API请求,只需将HMAC设置为她捕获的内容,因为它将验证。
如果没有包含请求的任何参数,攻击者将能够调用请求并指定自己的参数。因此,如果参数也包含在HMAC中,那就更好了。但是,它不会阻止使用这些特定参数重播请求。
您可以在请求和HMAC中包含timestamp参数。服务器将重新计算HMAC,包括传入的时间戳,并且还将验证时间戳是否足够新。由于攻击者无法凭空创造新的HMAC,因此她只能使用具有匹配时间戳的时间戳,这些时间戳将根据年龄拒绝。