2012-03-08 118 views
0

我正在設計一個REST服務,需要很好的保護以防未經授權的訪問。我在考慮需要一個安全摘要,它是通過散列所有請求參數和SHA-256的祕密密鑰生成的,並且只能通過https使用該服務。誰能告訴我這是否足夠安全?保護休息服務

+0

[保護REST API/Web服務的最佳實踐]的可能重複(http://stackoverflow.com/questions/7551/best-practices-for-securing-a-rest-api-web-service) – Gian 2012-03-08 10:28:48

+0

「足夠」是一個相對術語。 [根據你所保護的價值,你需要考慮權衡(http://prezi.com/7gi-uyhtwwiq/information-security-aspects-for-message-exchange/)。 – 2012-03-08 11:37:53

+0

@Tom:謝謝。這是一個非常有用的演示文稿。 來自不同第三方的隱私敏感客戶數據將被提交給服務,這就是爲什麼我想使用SSL。我想過結合SSL使用摘要來處理身份驗證並確保消息的完整性。這種組合非常安全(使用另一個相關術語),對於不同的客戶端來說,它們仍然不會太難實施。 – stevenvr 2012-03-08 13:25:57

回答

0

首先,請確保您使用的是en HMAC,而不是普通的SHA-256來生成「安全摘要」。

接下來,你打算把這個摘要的輸入放入什麼?您至少需要擁有方法,URI,有效負載以及請求的大部分頭文件(有許多頭文件影響HTTP請求的含義,這在REST上下文中很重要)。這可能很難,具體取決於您使用的HTTP客戶端,因爲客戶端可能以您不直接控制的方式設置或更改標頭。

最後,你要把這個摘要放在哪裏?自定義標題(例如X-Request-Authenticator)似乎很明智,或者如果客戶端在Web瀏覽器中運行,則可能是cookie。

如果可以的話,我會推薦使用現有的工具,而不是自己創建一些東西。使用SSL已經爲您提供了消息完整性保護,所以從此開始。然後,如果您只需要簡單的訪問控制,HTTP基本身份驗證就可以在REST請求中正常工作。或者你可以讓客戶提交證書並驗證它。

+0

謝謝您將我指向HMAC,我不知道這一點。 我曾想過將摘要和請求參數一起放入消息正文中,並使用基本的xml格式。 API僅用於服務器到服務器的通信。我在亞馬遜(http://docs.amazonwebservices.com/AmazonS3/latest/dev/RESTAuthentication.html)S3實現中看到它也被放在標題中,但我不明白它的優點是什麼。 我是否正確理解你認爲使用SSL和安全哈希結合使用會導致問題? – stevenvr 2012-03-09 08:45:26

+0

您不能將摘要放入正文並仍保持REST屬性。例如,GET和DELETE這樣的方法沒有主體,而在PUT請求中,主體應該表示要存儲在由URI指定的地址的對象,並且不會更多(或更少)。消息認證摘要在概念上不是該對象的一部分。至於SSL加上散列是過度殺毒,是的,你理解我是正確的:消息完整性保護已由SSL提供,並且僅由您決定是否允許(基於身份驗證)請求。 – Celada 2012-03-10 15:52:15