簡體   English   中英

沒有 jsp 的 csrf 令牌(spring mvc)

[英]csrf token without jsp (spring mvc)

我在 Spring 安全配置中啟用了 csrf 令牌。 但是移動設備如何接收 csrf 令牌? 當我有 jsp 時,它看起來像:

<input type='hidden' name='${_csrf.parameterName}' value='${_csrf.token}'/>

但是現在我沒有 jsp... 那么有什么方法可以手動發送 csrf 嗎?

一種流行的做法是對過濾器進行編碼,以將令牌作為cookie附加。 然后,您的客戶端首先發送GET請求以獲取該Cookie。 對於后續請求,該Cookie然后作為標頭發送回。

您可以查看官方的Spring Angular指南 ,並參考Spring Lemon的源代碼以獲取詳細的實現。

您可以實施無狀態CSRF保護。 Robbert van Waveren很好地解釋了一種解決方案即讓客戶端在Cookie和自定義HTTP標頭中生成並發送相同的唯一秘密值

考慮到僅允許網站為其自己的域讀取/寫入Cookie,因此只有真實網站才能在兩個標頭中發送相同的值。 使用這種方法,您的服務器要做的就是在每個請求無狀態的基礎上檢查兩個值是否相等!

您可以通過查看_csrf屬性來獲取它。

import javax.servlet.http.HttpServletRequest;
import org.springframework.security.web.csrf.CsrfToken;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/csrf_token")
public class CsrfTokenController {
    @GetMapping
    public String getToken(HttpServletRequest request) {
        CsrfToken token = (CsrfToken) request.getAttribute("_csrf");

        return token.getToken();
    }
}

如果啟用了CSRF,則必須在要登錄或注銷的頁面中包含_csrf.token。 否則,登錄和注銷功能都將失敗。

請參閱此以獲得更多幫助。

編輯:您可以從請求中獲取csrf令牌,並根據需要發送它。 我共享了兩個有關CSRF令牌的參考,請仔細閱讀它們。 它會幫助你。

第一參考
第二參考

暫無
暫無

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

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