我正在浏览以下security tutorial,并按照以下方式配置CsrfTokenRepository
:
.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
是否只需要让Ajax请求在所有库中运行? $http
的Angular文档说Angular读取Spring提供的CSRF cookie,并在发出请求时设置相应的头。所以我假设这样做是因为在发送Ajax请求时不会自动包含cookie?
我再次阅读了该文章,并表示CSRF保护由header
提供。因此,如果我以正确的方式解释这是因为客户端以独特的方式发回cookie值,这与提供CSRF保护的第一个地方发送的方式不同。换句话说,客户端收到cookie并改变它的发送方式,以便服务器知道客户端确实控制了cookie?
答案 0 :(得分:0)
使用Spring CookieCsrfTokenRepository进行CSRF保护的工作方式如下:
请注意,默认情况下,只有状态更改请求(POST,PUT,DELETE)受CSRF保护,并且只有在正确设计API后才需要保护这些请求(即GET请求没有副作用并修改应用程序的状态)例如)。
方法withHttpOnlyFalse
允许angular读取XSRF cookie。确保Angular在X withCreddentials
标志设置为true的情况下发出XHR请求。