2016-12-16 66 views
0

這是情景:預期CSRF令牌沒有發現春季安全

我使用Spring Security的4.0.1,已默認啓用CSRF,和一切工作確定,直到昨天。

昨天我添加了Spring Security Tags,登錄(和其他表單工作正常),但是一個特殊的表單停止工作。

這種形式的多,因爲上傳兩個文件,這種形式有CSRF參數,但服務器返回:

HTTP狀態403 - 預期CSRF令牌沒有找到。您的會話 是否已過期?

這是基本形式:

<form id="documentForm" class="card-panel" method="POST" enctype="multipart/form-data" action="<c:url value="/documents/signDocument?${_csrf.parameterName}=${_csrf.token}"/>"> 
    <input type="file" name="document"/> 
    <input type="text" name="signer"/> 
</form> 

當然,這是形式的完全切斷的版本,但是請注意CSRF參數正在通過行動網址發送。是的,我試着將CSRF參數放在隱藏的輸入中,結果相同。

在一個側面說明,這種形式可以爲匿名用戶訪問

+0

爲了避免將令牌放入URL中,可以將標記添加到HTML標頭的元標記中,然後將其添加到XHR請求標頭中,就像我在這裏描述的那樣http://stackoverflow.com/questions/21514074/彈簧CSRF令牌此結果不功時最請求待發送-是-A-多部分熱曲/ 43122490#43122490 –

回答

0

你所面臨的例外

org.springframework.security.web.csrf.CsrfFilter#doFilterInternal 

將拋出一個斷點,你可以看到在預期的CSRF令牌當前會話,以及從頭部或請求參數收到的令牌。

如果沒有找到正確的會話或會話cookie錯誤,也可能會發生此錯誤,因此您可能還需要檢查該錯誤。