Java 是否有必要针对CSRF保护JAX-RS请求?

Java 是否有必要针对CSRF保护JAX-RS请求?,java,rest,spring-security,jax-rs,csrf,Java,Rest,Spring Security,Jax Rs,Csrf,有必要保护JAX-RS请求免受攻击吗 REST是无状态的,因此不存在会话id(会话cookie),因为根本没有会话(另请参阅) 我的Spring安全Java配置: @Configuration @EnableWebSecurity public class SecurityConfig { @Configuration @Order(1) public static class JaxRsWebSecurityConfigurationAdapter extends W

有必要保护JAX-RS请求免受攻击吗

REST是无状态的,因此不存在会话id(会话cookie),因为根本没有会话(另请参阅)

我的Spring安全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);
             }
        }
    }
}
但我发现例如以下博客:。不幸的是,博客没有解释为什么需要CSRF保护


在没有会话cookie的情况下是否存在其他CSRF攻击?

访问令牌有时存储在cookie中(充其量仅限安全http),因此客户端不必费心手动将其添加到每个请求中:浏览器会自动将cookie附加到请求中。这就是需要实施CSRF保护的原因

您链接的文章建议让客户端在Cookie和自定义HTTP头中生成并发送相同的唯一机密值,这非常聪明:

考虑到一个网站只允许读/写它自己的Cookie 在自己的域中,只有真实的站点才能在这两个域中发送相同的值 标题


也就是说,如果您收到一封带有虚假图像定位的电子邮件
http://yourserver.com/admin/deleteAll
例如(服务器通过
GET
..进行处理),请求头中不会设置唯一的机密(cookie中可能仍然存在旧的机密):服务器必须拒绝该请求。

CSRF攻击不需要存在会话。CSRF攻击是指通过诱骗用户单击链接或提交表单,将表单发送到用户登录的应用程序,从而代表用户进行操作

是否使用基本身份验证或会话cookie来标识用户无关紧要


请注意,使用cookie并不意味着应用程序不是无状态的。cookie与基本身份验证一样,只是在每个HTTP请求中发送一个附加的头。

谢谢。因为我在以下内容中找到了相关部分:“客户端应假定位于请求URI路径字段中最后一个符号元素深度或更深的所有路径也在当前质询的基本领域值指定的保护空间内。客户端可以在不接收来自服务器的另一个质询的情况下,先发制人地发送相应的授权报头以及对该空间中的资源的请求。“我知道浏览器会自动将cookie附加到请求中,但我不知道浏览器也会自动附加授权标头。最后一个问题确实是无状态(无cookie)JAX-RS请求的问题。如果您的站点被web浏览器使用,您只需要保护它们不受CSRF的影响。如果它只用于say curl,那么您就不需要担心CSRF