一、CSRF概述
跨站請求僞造或者一鍵式攻擊通常縮寫為csrf或者xsrf,通過挾持目前浏覽器已經登入使用者發送惡意請求的攻擊煩方法
xss利用使用者對網站的信任
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();
}
}
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
發送請求攜帶令牌
第一種:請求其他接口 在請求頭中攜帶
X-XSRF-TOKEN:cookie中得值