繁体   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