CSRF的攻擊與防御
一、CSRF簡(jiǎn)介
CSRF(Cross-Site Request Forgery,跨站點(diǎn)偽造請(qǐng)求)是一種網(wǎng)絡(luò)攻擊方式,大體的意思就是黑客利用的你身份去偽造一個(gè)真實(shí)的請(qǐng)求,發(fā)送給服務(wù)器。比如用你的名字購(gòu)買商品、發(fā)送 郵件、盜取你的賬號(hào)等。
二、CSRF漏洞的原理
(M$V2XONOB@VR19Z79EAEA4.jpg
簡(jiǎn)單的身份驗(yàn)證只能保證請(qǐng)求發(fā)自某一個(gè)用戶的瀏覽器,去不能保證請(qǐng)求本自身是用戶自愿發(fā)出來(lái)的。
如上圖所示:
1.用戶C :瀏覽并登陸信任網(wǎng)站W(wǎng)eb(A);
2.web A (受信任的網(wǎng)站):驗(yàn)證通過(guò),在用戶處(C)產(chǎn)生A的Cookie;
3.用戶C在沒(méi)有登出網(wǎng)站A的情況下,訪問(wèn)了危險(xiǎn)網(wǎng)站W(wǎng)eb(B)
4.B要求訪問(wèn)第三方站點(diǎn)(A),發(fā)出一個(gè)請(qǐng)求(requset)給用戶(C)——
5.根據(jù)Web(B)惡意網(wǎng)站的請(qǐng)求,游覽器帶用戶C產(chǎn)生的cookie訪問(wèn)Web(A)受信任的網(wǎng)站并在用戶A毫不知情的情況下做惡意操作,如轉(zhuǎn)賬 購(gòu)買商品等.....
三、CSRF利用前提條件
1.登錄信任網(wǎng)站A,并在本地生成Cookie。
2.在不退出的情況下,訪問(wèn)危險(xiǎn)網(wǎng)站B。
不滿足以上兩個(gè)條件中的一個(gè),就不會(huì)收到CSRF的攻擊。
四、CSRF的防御
1.檢查HTTP頭部Refef信息,這是防范CSRF的最簡(jiǎn)單實(shí)現(xiàn)的一種方法。
2.使用一次性令牌,方式是對(duì)于GET請(qǐng)求,在URL里面加入一個(gè)令牌。對(duì)于Post請(qǐng)求,在隱藏域中加入一個(gè)令牌,
3.使用驗(yàn)證圖片,這種方法作用是對(duì)于機(jī)器人暴力攻擊的防止。
五、CSRF 攻擊的方法
1.對(duì)于GET 請(qǐng)求的 CSRF 漏洞的攻擊方式
GET請(qǐng)求方式使用的頻率最高,隱式的 GET 請(qǐng)求,例如 <img> <script><frame><iframe>,在頁(yè)面中引入上述頁(yè)面元素,并且設(shè)置 SRC 屬性就能在用戶未知的情況下發(fā)出一個(gè) GET 請(qǐng)求到想去攻擊的網(wǎng)站。
以 IMG 標(biāo)簽為例,攻擊者可以通過(guò)在圖 1 中的標(biāo)記-5、標(biāo)記-6、標(biāo)記-2、標(biāo)記-4 的途徑發(fā)起攻擊。這種攻擊的特征是無(wú)明顯提示,但是已經(jīng)發(fā)出一個(gè)具有完整合法的用戶請(qǐng)求。
1 <img src=http://UserSite/admin/deletepage?id=74NBCDSEFG/>
2.對(duì)于POST 請(qǐng)求的 CSRF 漏洞的攻擊方式
對(duì) CSRF有一種理解是把 GET 改為 POST 請(qǐng)求就認(rèn)是可以防止被攻擊實(shí)際上是一種錯(cuò)誤的理解,通過(guò)使用 <iframe> 一樣可以完成一個(gè)隱式的 CSRF 攻擊,具體腳本寫(xiě)法如下 ;
圖片.png
清單 2. IFrame.html
1 <IFRAME src=./frame1.html width=0 height=0></IFRAME>
這段代碼通過(guò)腳本構(gòu)造一個(gè)表單提交,通過(guò) IFRAME 加載頁(yè)面自動(dòng)執(zhí)行本例,IFRAME 寬高屬性設(shè)置成零的目的是為了達(dá)到隱式攻擊的效果,JAVASCRIPT 只對(duì)窗口的大小有不成文的規(guī)范,寬高不能小于 50 像素點(diǎn),但是對(duì) iframe 并沒(méi)有要求,這為隱式的跨域 Post 攻擊提供了一個(gè)量好的途徑。寫(xiě)成腳本的形式并不是說(shuō)明只要被檢測(cè)的站點(diǎn)沒(méi)有腳本注入就沒(méi)有任何問(wèn)題,POST 隱式攻擊方式一樣可以通過(guò)第 3 方。
六、關(guān)于CSRF的問(wèn)題小結(jié)
1.CSRF和XSS之間的區(qū)別?
CSRF:跨站請(qǐng)求偽造,是一種要挾用戶在當(dāng)前已登錄的Web應(yīng)用程序上執(zhí)行非本意的操作的攻擊手法,
XSS: 跨站腳本,是一種網(wǎng)站應(yīng)用程序的安全漏洞攻擊,是代碼的一種,它允許惡意用戶將代碼注入到網(wǎng)頁(yè)上,其他用戶瀏覽時(shí)會(huì)受到影響。(XSS跟CSRF不同的是它傾向與sql注入針對(duì)的是服務(wù)器或所有用戶,獲取用戶的cookie)
2.CSRF是怎么要挾用戶的?
利用用戶現(xiàn)在登錄網(wǎng)站,發(fā)送一個(gè)惡意的鏈接誘導(dǎo)用戶訪問(wèn),從而得到用戶登陸網(wǎng)站的cookie做惡意的操作。
3.如何利用brup構(gòu)造CSRF表單?


點(diǎn)擊Submit按鈕之后構(gòu)造的CSRF觸發(fā)成功。


