我有一个使用ReactJS + Spring Boot / Social / Security构建的Web应用程序。
我想确保当我发布它时,我受到CSRF的保护。我正在使用弹出的大部分Spring Security,下面是我的基本configure()覆盖:
@Configuration
@Order (SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login/facebook").permitAll()
.antMatchers("/logout").permitAll()
.antMatchers("/api/**").authenticated()
.and().csrf().disable();
}
}
我的问题是,由于我的所有(/ api / **)请求仅在经过身份验证时才允许后端,这是否可以保护我免受CSRF的侵害?
要明确的是,当用户通过Spring Social插件对Facebook进行身份验证时,我会将呼叫重定向到我的后端应用程序中的端点(/ login / facebook)以处理成功登录。在此方法中,我执行以下操作:
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(theUser.getFacebookId(), null, null);
SecurityContextHolder.getContext().setAuthentication(authentication);
这可确保对/ api发出的任何后续请求都将被识别为已通过身份验证。
答案 0 :(得分:2)
身份验证是确认某人声称自己是谁的行为或过程。
Owasp:跨站点请求伪造(CSRF)是一种攻击,它会强制最终用户在当前对其进行身份验证的Web应用程序上执行不需要的操作。
不同之处在于身份验证是一个确认过程,但CSRF是利用经过身份验证的用户的攻击,因为强制Web应用程序进行实际上来自已经过身份验证的用户的事务,但用户甚至不知道邪恶的交易已经完成。这是CSRF攻击的一个非常正常的用例:
我想说的是,身份验证不会减轻CSRF漏洞。有一些方法可以避免使用Spring转到Spring文档来避免CSRF漏洞,以获取有关如何配置CSRF和缓解此漏洞的非常有用的信息。 Spring Security CSRF attack,如果您想了解有关CSRF的更多信息,请访问OWASP网站OWASP CSRF attack
如何避免CSRF的一些例子: