1、 什么是CSRF:
CSRF (Cross-site request forgery,跨站請求偽造)也被稱為One Click Attack或者Session Riding,通??s寫為CSRF或者XSRF,是一種對網站的惡意利用。盡管聽起來像跨站腳本(XSS),但它與XSS非常不同,XSS利用站點內的信任用戶,而CSRF則通過偽裝成受信任用戶請求受信任的網站。
2、CSRF漏洞挖掘:
l 最簡單的方法就是抓取一個正常請求的數據包,如果沒有Referer字段和token,那么極有可能存在CSRF漏洞。
l 如果有Referer字段,但是去掉Referer字段后再重新提交,如果該提交還有效,那么基本上可以確定存在CSRF漏洞。
l 隨著對CSRF漏洞研究的不斷深入,不斷涌現出一些專門針對CSRF漏洞進行檢測的工具,如CSRFTester,CSRF Request Builder等。以CSRFTester工具為例,CSRF漏洞檢測工具的測試原理如下:
使用CSRFTester進行測試時,首先需要抓取我們在瀏覽器中訪問過的所有鏈接以及所有的表單等信息,然后通過在CSRFTester中修改相應的表單等信息,重新提交,這相當于一次偽造客戶端請求。
如果修改后的測試請求成功被網站服務器接受,則說明存在CSRF漏洞,當然此款工具也可以被用來進行CSRF攻擊。
3、分類:
1. GET類型的CSRF
2. POST類型的CSRF
4、攻擊:

1、客戶端通過賬戶密碼登錄訪問網站A。
2、網站A驗證客戶端的賬號密碼,成功則生成一個sessionlD,并返回給客戶端存儲在瀏覽器中。
3、該客戶端Tab—個新頁面訪問了網站B。
4、網站B自動觸發要求該客戶端訪問網站A。(即在網站B中有鏈接指向網站A)
5、客戶端通過網站B中的鏈接訪問網站A。(此時攜帶有合法的SessionID進行訪問站A的)
6、此時網站A只需檢驗sessionIlD是否合法,合法則執行相應的操作。(因此具體啥工具就得看鏈接,以及網站B要求訪問時攜帶的數據)
總結、所以要被CSRF攻擊,必須同時滿足兩個條件:
登錄受信任網站A,并在本地生成Cookie。
在不登出A的情況下,訪問危險網站B。
5、防御:
1、驗證碼
2、在請求地址中添加 token 并驗證
3、在 HTTP 頭中自定義屬性并驗證
4、驗證 HTTP Referer 字段
總結:
CSRF攻擊是攻擊者利用用戶的身份操作用戶賬戶的一種攻擊方式。設計CSRF的防御方案必須先理解CSRF攻擊的原理和本質。我們通常使用Anti CSRF Token來防御CSRF攻擊,在使用Token時,要注意Token的保密性和隨機性。