0

我使用ReactJS +春季启动/社会/安全的web应用程序内置。Spring Security中authenticated()和csrf之间有什么区别?

我要确保当我放开,我免受CSRF。我使用的是最春季安全的开箱及以下是我的基本配置()重写:

@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社交插件与Facebook进行身份验证,我在后台的应用程序来处理登录成功呼叫重定向到端点(/登录/ Facebook的)。在这种方法中,我做到以下几点:

UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(theUser.getFacebookId(), null, null); 

SecurityContextHolder.getContext().setAuthentication(authentication); 

这可以确保通过身份验证到/ API进行的任何后续请求将被识别。

回答

2

认证是行为或确认,有人自称是他或她是谁的过程。

OWASP:跨站请求伪造(CSRF)是一款迫使终端用户在他们目前正在验证的Web应用程序执行不必要的行动的攻击。

不同之处在于,身份验证是一个确认过程,但CSRF是一种利用经过身份验证的用户的攻击,因为Web应用程序产生的事实实际上来自已经过身份验证的用户,但用户甚至没有知道恶意交易已经完成。这是一个非常正常的使用情况CSRF攻击:

  1. 用户去mybank.com
  2. 用户填写用户名和密码,并按下登录按钮(认证)
  3. mybank.com显示了一个欢迎页面和列表转账的选项
  4. 用户看到一个不寻常的弹出窗口访问一个非常酷的网站酷图片,并点击弹出消息(也许一个xss攻击)
  5. 用户返回到mybank.com,看到一个新的钱转移已经完成,$$$$的退出已成功完成(csrf攻击来自很酷的图片点击)

我想说的是认证不会减轻CSRF漏洞。有不同的方法可以避免使用Spring的CSRF漏洞,以获取有关如何配置CSRF并缓解此漏洞的非常有用的信息。 Spring Security CSRF attack,如果你想知道更多关于CSRF去OWASP网站OWASP CSRF attack

CSRF如何避免一些例子:用户可以做

  1. 列出所有的重要行动,例如更改密码,汇款,发送大量的邮件,删除行等,并使用双重认证过程,例如要求到只有用户知道用户的问题,最喜欢的食物,父亲的第二个名字,通常的那种问题,用户必须填补注册过程。在进行操作前询问问题以确认使用双重身份验证。
  2. 每个http请求使用一个安全令牌,该令牌应该为您的应用程序进行验证,它可以避免恶意站点向您发送有效请求,因为恶意站点不知道什么是令牌号码。
相关问题