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

问题描述 投票:0回答:1

我正在尝试启用csrf保护,但仅用于登录页面。我添加了以下春季安全性配置(<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错误。但是,如果我在disabled="true"标记中添加<sec:csrf/>,它将再次起作用。

知道为什么吗?

谢谢

java spring spring-security csrf
1个回答
1
投票

如果启用了csrf,则如该问题所述,POST请求将执行注销。也许这个(Logout is not working in Spring Security)可以帮助您。

https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#servlet-considerations-csrf-logout中据说:

如果启用了CSRF保护(默认),Spring Security的LogoutFilter仅处理HTTP POST。这样可以确保注销需要CSRF令牌,并且恶意用户不能强制注销用户。最简单的方法是使用表单注销。如果您确实想要一个链接,则可以使用JavaScript来使该链接执行POST(即可能以隐藏形式)。对于禁用了JavaScript的浏览器,您可以选择使该链接将用户带到将执行POST的注销确认页面。

在本节中,虽然通常不建议这样做,但也说明了如何执行HTTP GET请求以注销。

© www.soinside.com 2019 - 2024. All rights reserved.