天天看點

security CSRF漏洞保護

一、CSRF概述

跨站請求僞造或者一鍵式攻擊通常縮寫為csrf或者xsrf,通過挾持目前浏覽器已經登入使用者發送惡意請求的攻擊煩方法

xss利用使用者對網站的信任

csrf利用網站對使用者浏覽器的信任

舉例

security CSRF漏洞保護

二、CSRF防禦

1、防禦政策

通過令牌同步模式 在每一次http請求中除了預設的cookie參數之外,服務端生成一個随機字元串稱為csrf令牌,開啟後httpsession儲存一份, 前端請求到達時會将請求的csrf令牌資訊和服務端對比 ,如果不相等則拒絕http請求

考慮到網站可能放置外部連結,是以要求請求時幂等的 這樣對于HEAD OPTIONS TRACE 等方法就沒有必要使用CSRF令牌了 強行使用可能會導緻令牌洩露

2、傳統web開發配置

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .and()
                //開啟csrf
                .csrf();
    }
}      
security CSRF漏洞保護

3、前後端分離配置

預設是csrf是儲存在服務端httpsession中,前後端分離中需要将生成csrf放入到cookie中 并在請求時擷取cookie中令牌進行送出即可

修改csrf放入到cookie

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .and()
                //開啟csrf
                .csrf()
                //将令牌儲存到cookie 并且允許cookie前端擷取
                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
    }
}      

通路登入界面檢視cookie

security CSRF漏洞保護

發送請求攜帶令牌

第一種:請求其他接口 在請求頭中攜帶

X-XSRF-TOKEN:cookie中得值