簡體   English   中英

Spring 安全性:激活 csrf 會禁用 /logout

[英]Spring security: activating csrf disables /logout

我正在嘗試啟用 csrf 保護,但僅適用於登錄頁面。 我添加了以下 spring 安全配置( <http>標簽已經存在)

<http ... >
  <sec:csrf request-matcher-ref="myBean" />
  ...
</http>

<bean id="myBean" class="org.springframework.security.web.util.matcher.AntPathRequestMatcher">
  <constructor-arg name="pattern" value="/login"/>
  <constructor-arg name="httpMethod" value="POST"/>
</bean>

登錄頁面現在確實有 csrf 保護。 然而,出於一個奇怪的原因, /logout現在給出了 404 錯誤。 事實上,如果我將/login替換為/foobar ,我仍然會在 /logout 上出現 404 錯誤。 但是如果我在<sec:csrf/>標簽中添加disabled="true" ,它會再次工作。

知道為什么嗎?

謝謝

如果啟用了 csrf,POST 請求將執行注銷,如本問題所述。 也許這( 注銷在 Spring Security 中不起作用)可以提供幫助。

https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#servlet-thinkations-csrf-logout中說:

如果啟用了 CSRF 保護(默認),Spring Security 的 LogoutFilter 將只處理 HTTP POST。 這確保注銷需要 CSRF 令牌,並且惡意用戶無法強行注銷您的用戶。 最簡單的方法是使用表單注銷。 如果你真的想要一個鏈接,你可以使用 JavaScript 讓鏈接執行 POST(即可能在隱藏的表單上)。 對於禁用 JavaScript 的瀏覽器,您可以選擇讓鏈接將用戶帶到將執行 POST 的注銷確認頁面。

本節還解釋了如何執行 HTTP GET 請求以注銷,盡管通常不推薦這樣做。

暫無
暫無

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

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