Spring Security中防護CSRF功能詳解
CSRF是什么?
CSRF(Cross-site request forgery),中文名稱:跨站請求偽造,也被稱為:one click attack/session riding,縮寫為:CSRF/XSRF。
CSRF可以做什么?
你這可以這么理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義發(fā)送惡意請求。
CSRF能夠做的事情包括:以你名義發(fā)送郵件,發(fā)消息,盜取你的賬號,甚至于購買商品,虛擬貨幣轉(zhuǎn)賬…
造成的問題包括:個人隱私泄露以及財產(chǎn)安全。
CSRF的原理
下圖簡單闡述了CSRF攻擊的思想:
從上圖可以看出,要完成一次CSRF攻擊,受害者必須依次完成兩個步驟:
- 1.登錄受信任網(wǎng)站A,并在本地生成Cookie。
- 2.在不登出A的情況下,訪問危險網(wǎng)站B。
看到這里,你也許會說:“如果我不滿足以上兩個條件中的一個,我就不會受到CSRF的攻擊”。
是的,確實如此,但你不能保證以下情況不會發(fā)生:
- 1.你不能保證你登錄了一個網(wǎng)站后,不再打開一個tab頁面并訪問另外的網(wǎng)站。
- 2.你不能保證你關(guān)閉瀏覽器了后,你本地的Cookie立刻過期,你上次的會話已經(jīng)結(jié)束。(事實上,關(guān)閉瀏覽器不能結(jié)束一個會話,但大多數(shù)人都會錯誤的認為關(guān)閉瀏覽器就等于退出登錄/結(jié)束會話了…)
- 3.上圖中所謂的攻擊網(wǎng)站,可能是一個存在其他漏洞的可信任的經(jīng)常被人訪問的網(wǎng)站。
Spring Security解決方案
將配置類中下面這段代碼注釋掉:
.and().csrf().disable(); //關(guān)閉csrf防護
然后,在登錄頁面添加一個隱藏域:
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
Spring Security實現(xiàn)防護csrf的原理
spring security在認證之后會生成一個csrfToken保存到HttpSession或者Cookie中。
之后每次請求到來時,從請求中提取csrfToken,和保存的csrfToken作比較,進而判斷當(dāng)前請求是否合法。主要通過CsrfFilter過濾器來完成。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java遞歸調(diào)用如何實現(xiàn)數(shù)字的逆序輸出方式
這篇文章主要介紹了Java遞歸調(diào)用如何實現(xiàn)數(shù)字的逆序輸出方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04SpringBoot從0到1整合銀聯(lián)無跳轉(zhuǎn)支付功能附源碼
這篇文章主要介紹了SpringBoot從0到1整合銀聯(lián)無跳轉(zhuǎn)功能支付附源碼,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11深入淺出重構(gòu)Mybatis與Spring集成的SqlSessionFactoryBean(上)
通常來講,重構(gòu)是指不改變功能的情況下優(yōu)化代碼,但本文所說的重構(gòu)也包括了添加功能。這篇文章主要介紹了重構(gòu)Mybatis與Spring集成的SqlSessionFactoryBean(上)的相關(guān)資料,需要的朋友可以參考下2016-11-11Springboot接收?Form?表單數(shù)據(jù)的示例詳解
這篇文章主要介紹了Springboot接收?Form?表單數(shù)據(jù)的實例代碼,本文通過圖文實例代碼相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08java easyUI實現(xiàn)自定義網(wǎng)格視圖實例代碼
這篇文章主要給大家介紹了關(guān)于java easyUI實現(xiàn)自定義網(wǎng)格視圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10