Hmac
對深層連結使用 HMAC 或加密?
在某些情況下,我將通過會話 cookie 進行身份驗證的 URL 轉換為沒有 cookie 身份驗證的深度連結 URL。這些是帶有簡單 id 的 URL,例如
/download/pdf/1
.我通過附加 ID ( ) 的 HMAC或使用 AEAD 加密 ID 並從 url ( ) 中
/download/pdf/1/7e3aefd25fb9…
省略 id將它們轉換為深層連結。/download/pdf/7e3aefd25fb9…
在這兩種情況下,我都會在伺服器上儲存一個長期密鑰,用於所有深度連結。
我想知道:這些方法中的哪一種(如果有的話)是最佳實踐?
- 我喜歡 HMAC 方法,因為它清楚地說明了意圖。
- 我喜歡 AEAD 方法,因為程序員無法從 url 讀取 ID,然後不小心忘記了身份驗證。
(我意識到還有第三種選擇,即使用完全隨機數進行深度連結。這是最簡單的加密方式,也是我懷疑的最佳實踐。但它有缺點,因為您必須儲存這些數字和對它們的資源的引用不能再“現場”生成URL,必須推送到集中儲存。)
使用場景:
- URL 必須在 iframe 中工作,其中 cookie 不能在某些瀏覽器中使用
- 該 URL 由另一個應用程序自動打開,例如無法訪問您的瀏覽器 cookie 的 Androids PDF 閱讀器
- 我們發送帶有資源 URL 的電子郵件,而收件人在系統中沒有帳戶
- 我們希望使用者能夠在不共享憑據的情況下共享資源
攻擊者描述:
- 他使用 HTTP
- 他可能以 cookie 身份驗證使用者的身份訪問該網站,但不能訪問所有資源
- 他可能擁有一些有效的深層連結
- 他可以很容易地猜出一個有效的身份證
- 除非向他提供了 ID,否則他應該無法從 ID 創建有效 URL
- 他應該無法訪問該資源
在我看來,您的選擇應該歸結為是否要隱藏 ID。如果沒有,使用加密只是額外的複雜性並且沒有用處。如果程序員真的嘗試過,大多數 AEAD 方案都允許在沒有身份驗證的情況下進行解密,所以即使是這樣的好處對我來說也不是很有說服力。
另一方面,MAC 非常適合這個問題。
(當然,HTTP 和純文字電子郵件意味著您的系統存在漏洞。尤其是前者,因為如果您不使用 TLS,任何連接的竊聽者都會知道 URL 和內容。)