什么是CRSF
CSRF(Cross-site request forgery)又碌,中文名稱:跨站請求偽造
CSRF攻擊原理解釋
當(dāng)你登錄一個網(wǎng)站A后敲街,在沒有登出的情況下备蚓,你又跑到一個其他的論壇上閑逛救巷,然后你看到一個美女的圖片何暇,你出于好奇心,點擊了美女圖片冀泻,這個時候常侣,可能就被攻擊了;原因是美女圖片的的超鏈接(link)可能是不法分子弄的弹渔,指向的可能是A網(wǎng)站胳施,由于你在A網(wǎng)站還是登陸態(tài),那么你點擊的這個link就是以你登錄態(tài)的進(jìn)行的肢专,比如可以用你的登錄態(tài)發(fā)布評論舞肆;嚴(yán)重的可能進(jìn)行轉(zhuǎn)賬。而你卻渾然不知博杖。
比如圖片的html代碼是:
<a ><img src='http://xx.com/beauty.jpg'/></a>
就這樣椿胯,由于看了一個美女,可能你就被卷入了一場官司剃根,xx可能告你誹謗哩盲。
攻擊流程圖
攻擊要點:
1、用戶在登錄授信網(wǎng)站后并在沒有登出的情況下訪問了危險網(wǎng)站狈醉。
2廉油、授信網(wǎng)站對CRSF攻擊沒有做好防備。
如果防止攻擊
1苗傅、要訪問其他網(wǎng)站時抒线,先登出你之前登錄的網(wǎng)站(這條貌似不現(xiàn)實)
2、不訪問危險網(wǎng)站(這個也不懼操作性)
3渣慕、授信網(wǎng)站做好CRSF攻擊的防備嘶炭,讓攻擊者無懈可擊抱慌。(可以實現(xiàn))
防CRSF攻擊的方法
之前說了攻擊者會精心構(gòu)造一個請求,并引導(dǎo)你發(fā)送這個請求旱物。如果我們讓攻擊者再怎么精心構(gòu)造遥缕,也沒法構(gòu)造一個有效的請求,那么就可以達(dá)到我們的目的了宵呛。
如果我們的服務(wù)每次都需要一個token单匣, 訪問的時候,服務(wù)端驗證一個這個token是否合法宝穗,如果不合法户秤,則拒絕訪問,那么這樣就達(dá)到了防crsf攻擊的目的逮矛。
具體做法:
1鸡号、一般操作數(shù)據(jù)都使用表單,在表單增加一個隱藏域须鼎,在渲染表單時候鲸伴,后臺給一個token作為這個隱藏域的值。(token可以存在緩存中)
2晋控、提交表單時汞窗,將這個隱藏域一起提交
3、后臺驗證請求中的token是否合法赡译,不合法則拒絕仲吏。(token使用 完成后可以刪除)。
為什么寫這篇文章
今天看代碼時蝌焚,發(fā)現(xiàn)代碼中也考慮了防crsf攻擊裹唆,是其實是防不住的。
我看到代碼的主要問題是:token不是放在請求參數(shù)中只洒,而是放在了cookie中许帐,這樣攻擊的請求同樣會帶上這個token(瀏覽器會將cookie自動帶上),就達(dá)不到防攻擊的作用了毕谴。