亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何分析Spring對CSRF的防范

發布時間:2021-12-16 18:17:05 來源:億速云 閱讀:140 作者:柒染 欄目:互聯網科技

這篇文章將為大家詳細講解有關如何分析Spring對CSRF的防范,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

什么是 CSRF

跨站請求偽造。經典場景是:

1)受害者首先登錄了銀行網站
2)用戶沒有 longout 的情況下
3)用同一個瀏覽器訪問了“壞”網站
4)“壞”網站有一個向銀行網站提交業務請求的頁面
5)誘使用戶發送這個請求。

實際上利用有 XSS 漏洞,完全可以無需受害者參與利用 javascript 而自動觸發第 4 第 5 步。

這個場景背后的邏輯:

這里我們把瀏覽器等同于用戶,有些數據是用戶自己可見的,有些數據是瀏覽器自動處理、發送而用戶對這些數據是無感知的(比如 SessionId)。
銀行網站以 cookie 的形式把 sessionId 發送給瀏覽器(set-cookie),瀏覽器每次請求都會再自動帶上 cookie(cookie)。
上面場景第 5 步雖然“壞”表單不是源于銀行網站頁面而是在第三方網站的頁面上,但是瀏覽器發現目標地址是銀行網站,因此會自動帶上相應的 cookie,比如 JSESSION 就會隨帶著被發送了。從服務器的角度看,來自第 4 步的數據與正常數據沒有任何差別,因為這個業務請求便會被執行。

歸根結底,這種 CSRF 的問題是因為早期的cookie設計過于簡單,沒有和現代瀏覽器同源策略等安全機制同步造成的。

解決方案

一個是主流的“Synchronizer Token Pattern”方法,另一個是漸成主流的“SameSite Attribute”。

1)SameSite Attribute
這個方式實施和理解比較容易,我們先說。
服務端利用 cookie 的 SameSite 屬性可以禁止瀏覽器從外部站點發送請求時帶上 cookie。比如下面的 cookie 就不會被放在由在第三方網頁發起而目標是銀行網站的請求上。這就自然解決了上面的 CSRF 的問題。SameSite還可設為Strict。

Set-Cookie: JSESSIONID=randomid; Domain=bank.example.com; Secure; HttpOnly; SameSite=Lax

2)Synchronizer Token Pattern
這個解決辦法的原理是對來自瀏覽器的請求我們都回送一個隨機數,下次瀏覽器再請求業務時需要在 header 里或者表單里帶上這個隨機數。這個隨機數就是 csrf token。Spring Security就是采用的這個方式。
這個辦法之所以能防范 CSRF,是因為 sessionId 來自 cookie,而 csrf token 來自 header 或者 form。相當于分別在兩條不同的路徑上傳遞

Spring Security 模塊生成 csrf token 后可放在兩個地方。Spring 默認的,隨機數與 sessionId 關聯,放在 session 里。另一個方式:隨機數放在 cookie 里。

a) 基于 Session 保存 csrf token

與 session 關聯比較容易理解,下次瀏覽器發送請求過來,服務端就可以從 header 或 form 里取出來的 csrf token 與 session 中的隨機數相比較來進行判斷。

b) 基于 Cookie 保存 csrf token

通過 cookie 保存 csrf 是怎么回事呢?如果 csrf token 通過 cookie 發送給瀏覽器,那這個隨機數不就跟 JSESSIONID 一樣了會被瀏覽器自動傳回到服務器了嗎?
是的,這個通過cookie傳給瀏覽器的 csrf token 一定會被瀏覽器傳回給服務器,我們也正是利用這一點“保存”了 csrf token。之所以使用基于 cookie 的方式,是因為要針對前后端分離的情形讓前端可以使用 javascript 獲得 csrf token,并把這個 token 作為下次請求的 header 參數或者 form 參數傳遞給服務端。服務端所要做的就是通過對比來自 cookie 和 header/form 這兩條路徑的 csrf token 來做出該請求是否為CSRF的判斷。

下面代碼設置使用 cookie 保存csrf token,使用 cookie 傳遞 token 需要把 cookie 的 HttpOnly 屬性設置為 false,以便讓 javascript 能讀到此值。

@EnableWebSecuritypublic class WebSecurityConfig extends        WebSecurityConfigurerAdapter {
   @Override    protected void configure(HttpSecurity http) {        http            .csrf(csrf -> csrf                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())            );    }}

關于如何分析Spring對CSRF的防范就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

柯坪县| 彭州市| 合水县| 元氏县| 惠安县| 永修县| 泰安市| 万安县| 彭水| 巫山县| 乡宁县| 洞头县| 洮南市| 无为县| 柏乡县| 宜昌市| 额尔古纳市| 高密市| 宣化县| 靖江市| 陇西县| 贵南县| 青龙| 盘山县| 乳山市| 莱西市| 许昌县| 吴川市| 衢州市| 抚顺市| 西青区| 多伦县| 博野县| 博湖县| 渭源县| 南城县| 清苑县| 焦作市| 合阳县| 平度市| 三穗县|