我正在設計一個REST服務,需要很好的保護以防未經授權的訪問。我在考慮需要一個安全摘要,它是通過散列所有請求參數和SHA-256的祕密密鑰生成的,並且只能通過https使用該服務。誰能告訴我這是否足夠安全?保護休息服務
保護休息服務
回答
首先,請確保您使用的是en HMAC,而不是普通的SHA-256來生成「安全摘要」。
接下來,你打算把這個摘要的輸入放入什麼?您至少需要擁有方法,URI,有效負載以及請求的大部分頭文件(有許多頭文件影響HTTP請求的含義,這在REST上下文中很重要)。這可能很難,具體取決於您使用的HTTP客戶端,因爲客戶端可能以您不直接控制的方式設置或更改標頭。
最後,你要把這個摘要放在哪裏?自定義標題(例如X-Request-Authenticator
)似乎很明智,或者如果客戶端在Web瀏覽器中運行,則可能是cookie。
如果可以的話,我會推薦使用現有的工具,而不是自己創建一些東西。使用SSL已經爲您提供了消息完整性保護,所以從此開始。然後,如果您只需要簡單的訪問控制,HTTP基本身份驗證就可以在REST請求中正常工作。或者你可以讓客戶提交證書並驗證它。
謝謝您將我指向HMAC,我不知道這一點。 我曾想過將摘要和請求參數一起放入消息正文中,並使用基本的xml格式。 API僅用於服務器到服務器的通信。我在亞馬遜(http://docs.amazonwebservices.com/AmazonS3/latest/dev/RESTAuthentication.html)S3實現中看到它也被放在標題中,但我不明白它的優點是什麼。 我是否正確理解你認爲使用SSL和安全哈希結合使用會導致問題? – stevenvr 2012-03-09 08:45:26
您不能將摘要放入正文並仍保持REST屬性。例如,GET和DELETE這樣的方法沒有主體,而在PUT請求中,主體應該表示要存儲在由URI指定的地址的對象,並且不會更多(或更少)。消息認證摘要在概念上不是該對象的一部分。至於SSL加上散列是過度殺毒,是的,你理解我是正確的:消息完整性保護已由SSL提供,並且僅由您決定是否允許(基於身份驗證)請求。 – Celada 2012-03-10 15:52:15
- 1. 保護休息的網絡服務
- 2. 保護MVC休息+ SOAP服務與單個鍵策略
- 3. 使用球衣保護休息Web服務
- 4. 休息Wcf服務
- 5. WCF休息服務
- 6. 保護JSON服務
- 7. 保護Web服務
- 8. 保護Web服務
- 9. 保護ServiceStack服務
- 10. 保護Web服務
- 11. 保護WCF服務
- 12. 保護中間人服務的公共服務信息
- 13. PHP:使用帶有時間戳的令牌來保護休息服務
- 14. 服務路由休息JSON服務
- 15. 休息服務問題
- 16. 春天和休息服務
- 17. Mulrereading Java休息服務
- 18. 質疑休息服務
- 19. 如何休息服務
- 20. 代理休息服務
- 21. 寧靜+休息服務
- 22. Xamarin.Forms使用休息服務
- 23. WCF,Web服務或休息
- 24. .NET中的休息服務
- 25. HttpsURLConnection休息服務電話
- 26. 的Python:休息服務器
- 27. JSON驗證休息服務
- 28. Openbravo休息網絡服務
- 29. WCF休息服務defaultconnectionlimit
- 30. 測試休息服務
[保護REST API/Web服務的最佳實踐]的可能重複(http://stackoverflow.com/questions/7551/best-practices-for-securing-a-rest-api-web-service) – Gian 2012-03-08 10:28:48
「足夠」是一個相對術語。 [根據你所保護的價值,你需要考慮權衡(http://prezi.com/7gi-uyhtwwiq/information-security-aspects-for-message-exchange/)。 – 2012-03-08 11:37:53
@Tom:謝謝。這是一個非常有用的演示文稿。 來自不同第三方的隱私敏感客戶數據將被提交給服務,這就是爲什麼我想使用SSL。我想過結合SSL使用摘要來處理身份驗證並確保消息的完整性。這種組合非常安全(使用另一個相關術語),對於不同的客戶端來說,它們仍然不會太難實施。 – stevenvr 2012-03-08 13:25:57