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)文章
Eclipse中@SpringBootTest注解報紅的解決方案
這篇文章主要介紹了Eclipse中@SpringBootTest注解報紅的解決方案,文中給出了原因分析和解決方案,并通過圖文結(jié)合的方式介紹的非常詳細,需要的朋友可以參考下2024-03-03
SpringBoot配置HTTPS及開發(fā)調(diào)試的操作方法
在實際開發(fā)過程中,如果后端需要啟用https訪問,通常項目啟動后配置nginx代理再配置https,前端調(diào)用時高版本的chrome還會因為證書未信任導(dǎo)致調(diào)用失敗,通過摸索整理一套開發(fā)調(diào)試下的https方案,下面給大家分享SpringBoot配置HTTPS及開發(fā)調(diào)試,感興趣的朋友跟隨小編一起看看吧2024-05-05

