2012-08-12 48 views
0

假設Bob發送該HTTP請求的API來更新他的電子郵件:如何防止再次使用已簽名的請求?

/user/[email protected]&userid=1234&sig=x1zz645

現在,一個名爲Zerocool嗅探器記錄以備後用此請求。

幾天後,鮑勃再次將他的電子郵件更新爲[email protected]

幾個小時後Zerocool現在決定用什麼,他聞了聞,前幾天和運行要求:

/user/[email protected]&userid=1234&sig=x1zz645

服務器接受它,而Bob是現在困惑,爲什麼是舊的電子郵件回來。

如何在不使用SSL的情況下防止這種情況發生?

回答

2

保留最近請求的日誌。在此類請求中嵌入時間戳,並拒絕日誌中或日誌以前的任何內容。爲了更好的衡量,請使用私人md5校驗和簽名時間戳,以免造成錯誤。

+0

服務器應該允許一些時間差,除非服務器和客戶端完全同步。檢查日誌也可能很複雜。最好每個請求都生成一個隨機數(唯一字符串),並檢查隨機數是否有重複。 – 2013-04-04 12:25:12

+0

EJP的答案是正確的,你應該使用SSL。這個答案是不安全的。有了這個嘗試的解決方案,在中間人攻擊可以很容易地截取郵件,並將其重播到服務器,同時防止請求到達服務器。簽署時間戳沒有任何措施來防止這個漏洞。 – user1678406 2014-05-21 20:30:14

0

按照您的標籤中所述使用SSL。它對嗅探和重放攻擊都是免疫的。它存在。使用它是免費的。有用。完成。

如果您不能使用SSL,請將其從您的代碼中移除。

0

您可以使用Hash based message authentication code (HMAC)來確保API 的安全,以避免類似於您所提及的重播攻擊。 服務器和客戶端都有一個共享的祕密API密鑰。

Amazon S3 Rest API使用相同的過程來驗證和驗證請求。請參閱文檔here.

更新:由於布魯諾指出HMAC本身無法防止重放攻擊。您必須在消息中包含一些使用密鑰簽名的唯一標識符,並在服務器上對其進行驗證。

+2

如果再次播放相同的消息和HMAC,則HMAC不會阻止*重放*攻擊。 – Bruno 2012-08-13 09:47:18

+0

@布魯諾謝謝你指出。我不知道我在想什麼。我想包括[加密隨機](http://en.wikipedia.org/wiki/Cryptographic_nonce)可以解決問題。 – Obaid 2012-08-13 09:57:43

相關問題