Spring Security中防護(hù)CSRF功能詳解
CSRF是什么?
CSRF(Cross-site request forgery),中文名稱:跨站請(qǐng)求偽造,也被稱為:one click attack/session riding,縮寫為:CSRF/XSRF。
CSRF可以做什么?
你這可以這么理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義發(fā)送惡意請(qǐng)求。
CSRF能夠做的事情包括:以你名義發(fā)送郵件,發(fā)消息,盜取你的賬號(hào),甚至于購(gòu)買商品,虛擬貨幣轉(zhuǎn)賬…
造成的問題包括:個(gè)人隱私泄露以及財(cái)產(chǎn)安全。
CSRF的原理
下圖簡(jiǎn)單闡述了CSRF攻擊的思想:
從上圖可以看出,要完成一次CSRF攻擊,受害者必須依次完成兩個(gè)步驟:
- 1.登錄受信任網(wǎng)站A,并在本地生成Cookie。
- 2.在不登出A的情況下,訪問危險(xiǎn)網(wǎng)站B。
看到這里,你也許會(huì)說:“如果我不滿足以上兩個(gè)條件中的一個(gè),我就不會(huì)受到CSRF的攻擊”。
是的,確實(shí)如此,但你不能保證以下情況不會(huì)發(fā)生:
- 1.你不能保證你登錄了一個(gè)網(wǎng)站后,不再打開一個(gè)tab頁面并訪問另外的網(wǎng)站。
- 2.你不能保證你關(guān)閉瀏覽器了后,你本地的Cookie立刻過期,你上次的會(huì)話已經(jīng)結(jié)束。(事實(shí)上,關(guān)閉瀏覽器不能結(jié)束一個(gè)會(huì)話,但大多數(shù)人都會(huì)錯(cuò)誤的認(rèn)為關(guān)閉瀏覽器就等于退出登錄/結(jié)束會(huì)話了…)
- 3.上圖中所謂的攻擊網(wǎng)站,可能是一個(gè)存在其他漏洞的可信任的經(jīng)常被人訪問的網(wǎng)站。
Spring Security解決方案
將配置類中下面這段代碼注釋掉:
.and().csrf().disable(); //關(guān)閉csrf防護(hù)
然后,在登錄頁面添加一個(gè)隱藏域:
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
Spring Security實(shí)現(xiàn)防護(hù)csrf的原理
spring security在認(rèn)證之后會(huì)生成一個(gè)csrfToken保存到HttpSession或者Cookie中。
之后每次請(qǐng)求到來時(shí),從請(qǐng)求中提取csrfToken,和保存的csrfToken作比較,進(jìn)而判斷當(dāng)前請(qǐng)求是否合法。主要通過CsrfFilter過濾器來完成。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
簡(jiǎn)單了解SpringMVC與Struts2的區(qū)別
這篇文章主要介紹了簡(jiǎn)單了解SpringMVC與Struts2的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Eclipse中@SpringBootTest注解報(bào)紅的解決方案
這篇文章主要介紹了Eclipse中@SpringBootTest注解報(bào)紅的解決方案,文中給出了原因分析和解決方案,并通過圖文結(jié)合的方式介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03SpringBoot配置HTTPS及開發(fā)調(diào)試的操作方法
在實(shí)際開發(fā)過程中,如果后端需要啟用https訪問,通常項(xiàng)目啟動(dòng)后配置nginx代理再配置https,前端調(diào)用時(shí)高版本的chrome還會(huì)因?yàn)樽C書未信任導(dǎo)致調(diào)用失敗,通過摸索整理一套開發(fā)調(diào)試下的https方案,下面給大家分享SpringBoot配置HTTPS及開發(fā)調(diào)試,感興趣的朋友跟隨小編一起看看吧2024-05-05