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請求使用一個安全令牌,該令牌應該爲您的應用程序進行驗證,它可以避免惡意站點向您發送有效請求,因爲惡意站點不知道什麼是令牌號碼。
相關問題