我有一个。由于安全策略,我需要为浏览器访问的端点启用CSRF保护。然而,这个API也将被非浏览器访问.是否有一种方法可以创建两组端点,一个只有启用CSRF的浏览器才能访问,另一个只有禁用CSRF的非浏览器才能访问?
发布于 2022-03-18 16:42:51
当您使用DSL配置您的CSRF保护时,像这个http.csrf()...一样,您可以通过传递一个RequestMatcher来判断哪些请求要应用CSRF保护,如下所示:
http.csrf(csrf -> csrf.requireCsrfProtectionMatcher(new MyBrowserRequestMatcher()));RequestMatcher的实现可以验证HttpServletRequest是否包含标头X-Requested-With: XMLHttpRequest或检查User-Agent。
请记住,标题可以更改,您无法保证请求实际上来自浏览器或非浏览器应用程序。
发布于 2022-03-18 15:51:24
发布于 2022-09-05 11:12:04
正如@ferrouskid所说,我创建了两个URL,一个用于浏览器,另一个用于非浏览器:
在spring安全配置中:
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.csrf().ignoringAntMatchers("/withoutCsrf/**")
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.and()
.cors().disable();
//complete your configuration }在主计长:
@Controller
@RequestMapping({"books","withoutCsrf/books"})
public class BookController {}https://stackoverflow.com/questions/71529268
复制相似问题