[英]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.