簡體   English   中英

帶有身份驗證的 REST API 中的 CSRF 令牌

[英]CSRF Token in REST API with authentication

我了解CSRF 令牌保護的目的。

但是,我認為這種保護是無用的,如果REST API要求每個操作的標頭中的身份驗證令牌,我們應該將其刪除。

這樣,即使 Mallory 偽造了 Alice 的惡意 HTML 鏈接,攻擊也無法完成。 原因是:

Alice 將她的身份驗證信息保存在 Mallory 不知道的標頭密鑰中。 與 cookie 不同的是,Alice 的瀏覽器不會自動提交此身份驗證令牌。

所以在這種情況下,我想請你談談這個問題:我們可以從這種 API 設計中刪除 CSRF 令牌保護嗎?

是的,當使用承載方案身份驗證時,您不需要 CSRF 保護,因為瀏覽器不會自動將 Authorization 標頭添加到請求中。

您確實需要針對 cookie、基本、Windows、摘要和客戶端證書身份驗證方案的 CSRF 保護,因為這些是由瀏覽器自動添加的。

另請參閱 Dominick Baier 關於隱式與顯式身份驗證的文章: http : //leastprivilege.com/2015/04/01/implicit-vs-explicit-authentication-in-browser-based-applications/

從理論上講,您不需要像您描述的那樣進行 CSRF 保護。 但我主要關心的問題之一是在哪里存儲訪問令牌。 瀏覽器的本地存儲沒有提供很好的安全性。 所以它通常存儲在 cookie 中。 因此,CSRF 漏洞又回來了。

Jean-Christophe Baey 在他的文章中描述了一種雙 cookie 機制,以防止來自 CSRF 的訪問令牌和被 XSS 竊取。

總結那篇文章:訪問令牌的有效負載存儲在 JavaScript 可訪問的 cookie 中。 訪問令牌的簽名存儲在 JavaScript 無法訪問的 cookie 中。 客戶端從 cookie 中讀取有效負載,並將其在 Authentication-Header 中傳遞給服務器。 服務器根據 HttpOnly cookie 中發送的簽名驗證令牌。

因此,它的 CSRF 保存和攻擊者無法通過 XSS 竊取整個令牌,因為沒有對簽名的 JS 訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM