簡體   English   中英

spring如何使用_csrf參數或X-CSRF-TOKEN標頭在內部驗證csrf令牌?

[英]How does the spring internally validate the csrf token with _csrf parameter or X-CSRF-TOKEN header?

我正在使用spring並通過HttpSessionCsrfTokenRepository啟用了csrf,我清楚地知道客戶端是否以_csrf參數或X-CSRF-TOKEN標頭的形式發送csrf令牌,春季請求了該令牌並使用通過generateToken(HttpServletRequest request)的令牌進行了驗證generateToken(HttpServletRequest request)但是我的問題是spring在內部如何做到這一點。 我對此問題的原因是:

1.我有一個Rest POST呼叫,該呼叫需要憑證並驗證用戶的身份。 但是由於我想將csrf令牌作為安全性層添加到rest調用中,因此我想將其添加到post正文中以防止csrf令牌泄漏。

因此,如果我知道Spring Security如何在內部過濾這些令牌,將很有幫助。 我修訂了Spring文檔,但這主要是我們如何在具有隱藏字段或元標記以及帶有標頭的Ajax調用的形式中使用CSRF令牌。

而且我也想聽聽對我的設計的任何評論,如果將標記放在主體中是一件好事(我堅信這不是泄漏標記的簡單url參數),還是應該在標頭中使用它。 我只是不想僅僅因為它簡單而傾向於使用頭文件。 尋找最佳解決方案。

請說明一下。

如果您想研究一下CsrfTokenRepository在春季有多種實現方式。 例如:

https://github.com/rwinch/spring-security/blob/master/web/src/main/java/org/springframework/security/web/csrf/HttpSessionCsrfTokenRepository.java

https://github.com/rwinch/spring-security/blob/master/web/src/main/java/org/springframework/security/web/csrf/CsrfFilter.java

https://github.com/rwinch/spring-security/tree/master/web/src/main/java/org/springframework/security/web/csrf

https://docs.spring.io/spring-security/site/docs/4.2.7.RELEASE/apidocs/org/springframework/security/web/csrf/CookieCsrfTokenRepository.html

https://docs.spring.io/spring-security/site/docs/4.2.7.RELEASE/apidocs/org/springframework/security/web/csrf/CookieCsrfTokenRepository.html

IMO將標記保留在標頭上的好處(更安全-可能是?),因為我能想到的原因很少。

  1. 您無法在主體上為GET請求設置令牌。 您希望與所有端點保持一致(您今天可能不需要,但是情況變化很快)

  2. 明天,如果您想更改Auth模型,則不想更改請求正文。 當請求主體更改時,您與客戶違約

  3. 如果您將身份驗證模型更改為授權服務器,則可以在服務之前添加代理服務器(例如ngnix?),並將其稱為auth-proxy。 您可以將所有與安全相關的內容留給此auth-proxy,它將檢查標頭並為您進行驗證。 您不希望代理調查您的請求正文,而是可以專注於業務實施

  4. 請求正文與您的業務完全相關,因此您可以專注於它,而不是處理正文中與安全性相關的事情。
  5. 每次為新端點創建新請求時,您都不想在所有請求中繼續添加令牌

根據我的經驗,這只是我的意見。

暫無
暫無

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

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