關(guān)于spring-security(記住密碼,CSRF)
注冊(cè)PersistentTokenRepository
- PersistentTokenRepository實(shí)現(xiàn)類
- InMemoryTokenRepositoryImpl基于內(nèi)存實(shí)現(xiàn)
- JdbcTokenRepositoryImpl基于數(shù)據(jù)庫(kù)實(shí)現(xiàn)
基于內(nèi)存實(shí)現(xiàn)
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public PersistentTokenRepository persistentTokenRepository() {
PersistentTokenRepository tokenRepository = new InMemoryTokenRepositoryImpl();
return tokenRepository;
}
}修改安全配置類
http.rememberMe().tokenRepository(persistentTokenRepository())
.tokenValiditySeconds(120)//設(shè)置有效時(shí)長(zhǎng),單位秒
.userDetailsService(userDetailsService)頁(yè)面添加記住我復(fù)選框
記住我:
<input type="checkbox"name="remember-me"title="記住密碼"/><br/>
此處:name 屬性值必須位remember-me.不能改為其他值
CSRF 理解(默認(rèn)開(kāi)啟)
跨站請(qǐng)求偽造(英語(yǔ):Cross-site request forgery),也被稱為 one-click attack 或者 session riding,通??s寫為 CSRF 或者 XSRF, 是一種挾制用戶在當(dāng)前已登錄的Web應(yīng)用程序上執(zhí)行非本意的操作的攻擊方法。
跟跨網(wǎng)站腳本(XSS)相比,XSS利用的是用戶對(duì)指定網(wǎng)站的信任,CSRF 利用的是網(wǎng)站對(duì)用戶網(wǎng)頁(yè)瀏覽器的信任。
跨站請(qǐng)求攻擊,簡(jiǎn)單地說(shuō),是攻擊者通過(guò)一些技術(shù)手段欺騙用戶的瀏覽器去訪問(wèn)一個(gè)自己曾經(jīng)認(rèn)證過(guò)的網(wǎng)站并運(yùn)行一些操作(如發(fā)郵件,發(fā)消息,甚至財(cái)產(chǎn)操作如轉(zhuǎn)賬和購(gòu)買商品)。
由于瀏覽器曾經(jīng)認(rèn)證過(guò),所以被訪問(wèn)的網(wǎng)站會(huì)認(rèn)為是真正的用戶操作而去運(yùn)行。
這利用了web中用戶身份驗(yàn)證的一個(gè)漏洞:簡(jiǎn)單的身份驗(yàn)證只能保證請(qǐng)求發(fā)自某個(gè)用戶的瀏覽器,卻不能保證請(qǐng)求本身是用戶自愿發(fā)出的。
從Spring Security 4.0開(kāi)始,默認(rèn)情況下會(huì)啟用CSRF保護(hù),以防止CSRF攻擊應(yīng)用程序,Spring Security CSRF會(huì)針對(duì)PATCH,POST,PUT和DELETE方法進(jìn)行防護(hù)。

解決方案
檢查Referer字段
Referer字段通常由瀏覽器在HTTP請(qǐng)求中發(fā)送,告訴服務(wù)器用戶是從哪個(gè)頁(yè)面鏈接過(guò)來(lái)的。然而,由于Referer字段可以被用戶修改或禁用,因此不能完全信任它來(lái)確保請(qǐng)求是從指定頁(yè)面發(fā)起的。
以下是檢查Referer字段的一些常見(jiàn)缺點(diǎn):
- 用戶可以修改Referer字段:一些用戶可能會(huì)修改HTTP請(qǐng)求頭中的Referer字段,以試圖繞過(guò)安全檢查。
- Referer字段可能被緩存:某些代理服務(wù)器或緩存服務(wù)器可能會(huì)緩存Referer字段
CSRFToken

由于CSRF 是開(kāi)啟的所以我們?cè)诘顷懯俏礄z出token,則被認(rèn)定為csrf攻擊,報(bào)異常
security實(shí)現(xiàn)
在登錄頁(yè)面添加一個(gè)隱藏域:
<input type="hidden"th:if="${_csrf}!=null" th:value="${_csrf.token}" name="_csrf"/>關(guān)閉安全配置的類中的csrf
// http.csrf().disable();
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Seata集成Mybatis-Plus解決多數(shù)據(jù)源事務(wù)問(wèn)題
當(dāng)進(jìn)行業(yè)務(wù)操作時(shí),訂單發(fā)生異常 ,進(jìn)行了回滾操作,因?yàn)樵诓煌臄?shù)據(jù)庫(kù)實(shí)例中,余額卻扣除成功,此時(shí)發(fā)現(xiàn)數(shù)據(jù)不一致問(wèn)題,本文給大家介紹Seata集成Mybatis-Plus解決多數(shù)據(jù)源事務(wù)問(wèn)題,感興趣的朋友一起看看吧2023-11-11
Java使用Tess4J實(shí)現(xiàn)圖像識(shí)別方式
這篇文章主要介紹了Java使用Tess4J實(shí)現(xiàn)圖像識(shí)別方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
Java實(shí)現(xiàn)樹(shù)形List與扁平List互轉(zhuǎn)的示例代碼
在平時(shí)的開(kāi)發(fā)中,我們時(shí)常會(huì)遇到需要將"樹(shù)形List"與"扁平List"互轉(zhuǎn)的情況,本文為大家整理了Java實(shí)現(xiàn)樹(shù)形List與扁平List互轉(zhuǎn)的示例代碼,希望對(duì)大家有所幫助2023-05-05
java實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12
SpringBoot獲取配置文件中的配置項(xiàng)的常用方式
這篇文章主要介紹了SpringBoot獲取配置文件中的配置項(xiàng)的常用方式,并通過(guò)代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-11-11
java application maven項(xiàng)目打自定義zip包實(shí)例(推薦)
下面小編就為大家?guī)?lái)一篇java application maven項(xiàng)目打自定義zip包實(shí)例(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
SpringBoot參數(shù)校驗(yàn)的最佳實(shí)戰(zhàn)教程
開(kāi)發(fā)過(guò)程中,后臺(tái)的參數(shù)校驗(yàn)是必不可少的,下面這篇文章主要給大家介紹了關(guān)于SpringBoot參數(shù)校驗(yàn)的最佳實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08
淺談利用Spring的AbstractRoutingDataSource解決多數(shù)據(jù)源的問(wèn)題
本篇文章主要介紹了淺談利用Spring的AbstractRoutingDataSource解決多數(shù)據(jù)源的問(wèn)題,具有一定的參考價(jià)值,有需要的可以了解一下2017-08-08

