Spring Security,无状态REST服务和CSRF

robjwilkins:

我有一个REST服务,它使用Java,Spring-boot和带有基本访问身份验证的Spring Security构建。没有视图,没有JSP等,没有“登录”,只有可以从单独托管的React应用调用的无状态服务。

我已经阅读了许多有关CSRF保护的文档,但是无法决定我应该使用spring-security CSRF配置还是仅禁用它?如果禁用csrf保护,则可以使用我的基本身份验证使用curl调用服务,如下所示:

curl -H "authorization:Basic c35sdfsdfjpzYzB0dDFzaHA=" -H "content-type:application/json" -d '{"username":"user","password":"password","roles":"USER"}' localhost:8081/api/v1/user

如果我启用了csrf保护并提供了x-csrf-token标头,则春季CsrfFilter会尝试根据(我认为)会话cookie中的值进行交叉检查HttpServletRequest但是,由于它是无状态的REST服务,所以我没有会话,也没有“登录”。

我有一个配置类,看起来像这样:

@EnableWebSecurity
@Configuration
public class ServiceSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest().fullyAuthenticated()
                .and().httpBasic();
        if (!serviceProperties.isCsrfEnabled()) {
            http.csrf().disable();
        }
    }

我考虑得越多,似乎越需要禁用CSRF保护。还有另一种配置spring安全性的方法,它可以工作吗?

谢谢

塞尔班·佩特雷斯库(Serban Petrescu):

要回答您的第一个问题,在您描述的上下文中,您不需要CSRF保护。CSRF保护的背景是确保不会诱骗用户执行某些不必要的操作。

例如,按照纯粹的理论,您可能已经登录到银行的网站(因此建立了会话),然后访问了一些黑幕网站。该站点可以具有向银行的API发出POST请求的表单。因为那里有一个会话,所以如果端点不受CSRF保护,则该请求可能会通过。

因此,CSRF主要充当针对基于浏览器+基于会话的攻击的防护。如果您公开了具有OAuth保护的纯REST API,那么我看不到CSRF的任何原因。

使用Spring Boot时,还可以使用application.properties/ application.yaml配置文件禁用CSRF

security.enable-csrf=false

您可以查看“ 通用应用程序属性”文档页面,以获取更多现成的配置选项。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring 中的无状态服务层

Spring Security无状态暴力保护防止凭证猜测

Spring Security和REST API?

Spring Boot:在同一项目中同时验证无状态REST API和有状态“登录” Web控制器?

Spring SAML扩展和Spring Security CSRF保护冲突

Spring Security CSRF CORS

Spring Security Basic Auth带有基于HTTP的摘要,用于无状态API

禁用Spring Security Basic登录-Spring REST Web服务

Spring Boot中的无状态会话

使用Vaadin和Spring Security的403 CSRF令牌错误

Spring Boot + Security + Thymeleaf和CSRF令牌不会自动注入

启用csrf时,AngularJS和Spring Security给出405错误

如何使用Spring Boot和Spring Security保护REST API?

禁用 csrf 的 Spring Security 403

Angular HTTP和Spring Boot Rest服务

Spring Session和Spring Security

Spring Security REST登录

Spring Security REST API

带有REST服务的Spring Integration Security示例

从Android调用受Spring Security保护的REST Web服务

Spring Boot和Spring Security启用CSRF后,如何解决无法解决的登录问题?

Spring Security在身份验证和未经身份验证的用户中获得REST服务中的用户信息

Spring REST服务的LazyInitializationException

春季安全和无状态宁静服务

REST /无状态:CSRF攻击并记住已登录的用户

rest和Http中“无状态”的含义

Spring Security和EnableGlobalMethodSecurity

如何使用Spring MVC扩展具有Tomcat和无状态J2EE架构的应用程序?

无状态和有状态服务之间的可靠服务通信