0

假设 Bob 将此 HTTP 请求发送到 API 以更新他的电子邮件:

/user/update?email=bob@example.com&userid=1234&sig=x1zz645

现在一个名为 Zerocool 的嗅探器记录了这个请求以供以后使用。

几天后,Bob 再次将他的电子邮件更新为email=newbob@example.com

几个小时后,Zerocool 现在决定使用他几天前嗅到的内容并运行请求:

/user/update?email=bob@example.com&userid=1234&sig=x1zz645

服务器接受了它,Bob 现在很困惑为什么旧的电子邮件又回来了。

我们如何在不使用 SSL 的情况下防止这种情况发生?

4

3 回答 3

2

记录最近的请求。在此类请求中嵌入时间戳,并拒绝日志中存在或比日志更早的任何请求。为了更好地衡量,使用私有 md5 校验和对时间戳进行签名,这样它们就不会被伪造。

于 2012-08-12T19:06:51.140 回答
0

按照标签中的说明使用 SSL。它已经免疫嗅探和重放攻击。它存在。使用它是免费的。有用。完成。

如果您不能使用 SSL,请将其从您的标签中删除。

于 2012-08-13T03:45:15.940 回答
0

您可以使用基于哈希的消息身份验证代码 (HMAC)来保护 API ,从而可以避免像您提到的那样的重放攻击。服务器和客户端都有一个共享的 API 密钥。

Amazon S3 Rest API 使用相同的过程来验证和验证请求。请参阅此处的文档

更新:正如布鲁诺指出的那样,HMAC 本身无法防止重放攻击。您必须在消息中包含一些使用密钥签名的唯一标识符,并在服务器上对其进行验证。

于 2012-08-13T09:16:29.007 回答