是否有必要保护 JAX-RS 请求免受攻击CSRF https://en.wikipedia.org/wiki/Cross-site_request_forgery?
By 定义 https://en.wikipedia.org/wiki/Representational_state_transfer#StatelessREST 是无状态的,因此不存在会话 id(会话 cookie),因为根本不存在会话(另请参阅https://stackoverflow.com/a/15746639/5277820 https://stackoverflow.com/a/15746639/5277820).
我的 Spring Security Java 配置:
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Configuration
@Order(1)
public static class JaxRsWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(final HttpSecurity http) throws Exception {
http
.antMatcher("/services/**")
.csrf().disable()
.authorizeRequests()
.antMatchers(HttpMethod.OPTIONS, "/services/**").permitAll()
.anyRequest().hasAuthority("ROLE_user")
.and()
.httpBasic()
.and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
}
}
}
但我发现例如以下博客:无状态 Spring Security 第 1 部分:无状态 CSRF 保护 http://blog.jdriven.com/2014/10/stateless-spring-security-part-1-stateless-csrf-protection/。不幸的是,该博客没有解释为什么需要 CSRF 保护。
是否还有其他没有会话 cookie 的 CSRF 攻击?
CSRF 攻击不需要会话的存在。 CSRF 攻击包括代表用户执行某些操作,方法是诱骗他/她单击链接或提交转到用户登录的应用程序的表单。
无论是使用基本身份验证还是会话 cookie 来识别用户都是无关紧要的。
请注意,使用 cookie 并不意味着应用程序不是无状态的。 Cookie 与基本身份验证一样,只是随每个 HTTP 请求发送一个附加标头。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)