快速說明:儘管存在一些重疊,但這不是具有自定義標頭(且沒有驗證令牌)的CSRF保護的重複。那篇文章討論瞭如何在Rest端點上執行CSRF保護,而不討論是否確實必要。確實,我在該站點上閱讀的許多CSRF / Rest問題都涉及通過CSRF令牌保護端點,而沒有實際討論是否有必要。因此就是這個問題。
Rest API端點是否需要CSRF保護?
我已經看到了很多有關保護REST端點不受CSRF攻擊的討論,但是考慮了很多話題之後,我非常確定REST端點上的CSRF令牌會給予零附加保護。因此,在REST端點上啟用CSRF保護只會向您的應用程序引入一些無用的代碼,我認為應該跳過這些代碼。我可能會丟失一些東西,因此這個問題出現了。我認為這將有助於記住為什麼首先需要CSRF保護以及它所針對的攻擊媒介:
為什麼要使用CSRF?
這實際上歸結為瀏覽器通過發送cookie來自動顯示任何請求的登錄憑據的能力。如果會話ID存儲在cookie中,瀏覽器將自動將其與所有返回原始網站的請求一起發送。這意味著攻擊者實際上不必知道身份驗證詳細信息即可採取行動作為受害者用戶。相反,攻擊者只需誘使受害者瀏覽器發出請求,身份驗證請求的憑據將免費使用。
輸入REST API
其他API終結點與其他請求有一個非常重要的區別:它們特別是無狀態的,絕不應該接受/使用cookie或會話中的數據。結果,遵循標準的REST API會自動免受此類攻擊。即使瀏覽器發送了cookie,與cookie關聯的所有憑據也將被完全忽略。 REST API調用的身份驗證以完全不同的方式完成。最常見的解決方案是具有某種身份驗證密鑰(OAuth令牌等),該身份驗證密鑰隨標頭一起發送,或者可能在請求主體本身中發送。
由於身份驗證是特定於應用程序的,而且由於瀏覽器本身不知道身份驗證令牌是什麼,因此即使有人被誘騙訪問API端點,瀏覽器也無法自動提供身份驗證證書。結果,無cookie的REST端點完全不受CSRF攻擊。
還是我錯過了一些東西?