1、 什么是CSRF:
CSRF (Cross-site request forgery,跨站請求偽造)也被稱為One Click Attack或者Session Riding,通??s寫為CSRF或者XSRF,是一種對網(wǎng)站的惡意利用。盡管聽起來像跨站腳本(XSS),但它與XSS非常不同,XSS利用站點(diǎn)內(nèi)的信任用戶,而CSRF則通過偽裝成受信任用戶請求受信任的網(wǎng)站。
2、CSRF漏洞挖掘:
l 最簡單的方法就是抓取一個(gè)正常請求的數(shù)據(jù)包,如果沒有Referer字段和token,那么極有可能存在CSRF漏洞。
l 如果有Referer字段,但是去掉Referer字段后再重新提交,如果該提交還有效,那么基本上可以確定存在CSRF漏洞。
l 隨著對CSRF漏洞研究的不斷深入,不斷涌現(xiàn)出一些專門針對CSRF漏洞進(jìn)行檢測的工具,如CSRFTester,CSRF Request Builder等。以CSRFTester工具為例,CSRF漏洞檢測工具的測試原理如下:
使用CSRFTester進(jìn)行測試時(shí),首先需要抓取我們在瀏覽器中訪問過的所有鏈接以及所有的表單等信息,然后通過在CSRFTester中修改相應(yīng)的表單等信息,重新提交,這相當(dāng)于一次偽造客戶端請求。
如果修改后的測試請求成功被網(wǎng)站服務(wù)器接受,則說明存在CSRF漏洞,當(dāng)然此款工具也可以被用來進(jìn)行CSRF攻擊。
3、分類:
1. GET類型的CSRF
2. POST類型的CSRF
4、攻擊:
1、客戶端通過賬戶密碼登錄訪問網(wǎng)站A。
2、網(wǎng)站A驗(yàn)證客戶端的賬號(hào)密碼,成功則生成一個(gè)sessionlD,并返回給客戶端存儲(chǔ)在瀏覽器中。
3、該客戶端Tab—個(gè)新頁面訪問了網(wǎng)站B。
4、網(wǎng)站B自動(dòng)觸發(fā)要求該客戶端訪問網(wǎng)站A。(即在網(wǎng)站B中有鏈接指向網(wǎng)站A)
5、客戶端通過網(wǎng)站B中的鏈接訪問網(wǎng)站A。(此時(shí)攜帶有合法的SessionID進(jìn)行訪問站A的)
6、此時(shí)網(wǎng)站A只需檢驗(yàn)sessionIlD是否合法,合法則執(zhí)行相應(yīng)的操作。(因此具體啥工具就得看鏈接,以及網(wǎng)站B要求訪問時(shí)攜帶的數(shù)據(jù))
總結(jié)、所以要被CSRF攻擊,必須同時(shí)滿足兩個(gè)條件:
登錄受信任網(wǎng)站A,并在本地生成Cookie。
在不登出A的情況下,訪問危險(xiǎn)網(wǎng)站B。
5、防御:
1、驗(yàn)證碼
2、在請求地址中添加 token 并驗(yàn)證
3、在 HTTP 頭中自定義屬性并驗(yàn)證
4、驗(yàn)證 HTTP Referer 字段
總結(jié):
CSRF攻擊是攻擊者利用用戶的身份操作用戶賬戶的一種攻擊方式。設(shè)計(jì)CSRF的防御方案必須先理解CSRF攻擊的原理和本質(zhì)。我們通常使用Anti CSRF Token來防御CSRF攻擊,在使用Token時(shí),要注意Token的保密性和隨機(jī)性。