來自百度百科
CSRF(Cross-site request forgery)跨站請求偽造,也被稱為“One Click Attack”或者Session Riding,通常縮寫為CSRF或者XSRF,是一種對網(wǎng)站的惡意利用。盡管聽起來像跨站腳本(XSS),但它與XSS非常不同,XSS利用站點內(nèi)的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求來利用受信任的網(wǎng)站。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防范的資源也相當稀少)和難以防范,所以被認為比XSS更具危險性。
例子
CSRF攻擊攻擊原理及過程如下:
1. 用戶打開瀏覽器,訪問受信任銀行網(wǎng)站,輸入用戶名和密碼請求登錄網(wǎng)站;
2.在用戶信息通過驗證后,銀行網(wǎng)站產(chǎn)生Cookie信息并返回給瀏覽器,此時用戶登錄網(wǎng)站成功,可以正常發(fā)送請求到網(wǎng)站;
3. 用戶未退出銀行網(wǎng)站之前,在同一瀏覽器中,打開一個TAB頁訪問其他網(wǎng)站B
4. 這時候網(wǎng)站B 已被黑客注入誘導信息,加入是一張圖片,圖片地址指向
src=”http://bank.example/withdraw?account=bob&amount=1000000&for=黑客
點擊之后轉(zhuǎn)賬給黑客這個賬戶
5. 瀏覽器在接收到這些攻擊性代碼請求后,根據(jù)網(wǎng)站B的請求,在用戶不知情的情況下攜帶Cookie信息,根據(jù)用戶的Cookie信息以C的權(quán)限處理該請求,導致來自黑客請求惡意代碼被執(zhí)行。
這是原理, 攻擊者盜用了你的身份,以你的名義發(fā)送惡意請求
,對服務器來說這個請求是完全合法的,但是卻完成了攻擊者所期望的一個操作,比如以你的名義發(fā)送郵件、發(fā)消息,盜取你的賬號,添加系統(tǒng)管理員,甚至于購買商品、虛擬貨幣轉(zhuǎn)賬等。
如何防御CSRF攻擊
1、驗證 HTTP Referer 字段
釋:referer : 來路;提交方;來源網(wǎng)址
根據(jù) HTTP 協(xié)議,在 HTTP 頭中有一個字段叫 Referer,它記錄了該 HTTP 請求的來源地址。
也就是說,服務器會驗證客戶端的請求來源,如果本網(wǎng)站請求的則響應,否則不響應。
但是即使這樣,驗證 HTTP Referer 字段 這種方式也存在安全隱患
1.對于某些瀏覽器,比如 IE6 或 FF2,目前已經(jīng)有一些方法可以篡改 Referer 值
2.用戶自己可以設置瀏覽器使其在發(fā)送請求時不再提供 Referer
2.加驗證碼驗證
但這種方式涉及到頁面交互,在通常情況下,驗證碼能很好遏制CSRF攻擊。但是出于用戶體驗考慮,網(wǎng)站不能給所有的操作都加上驗證碼。因此驗證碼只能作為一種輔助手段,不能作為主要解決方案。
3.使用 token (Anti CSRF Token)
可以理解是防偽
例子:
用戶訪問某個表單頁面。
服務端生成一個Token,放在用戶的Session中,或者瀏覽器的Cookie中。
在頁面表單附帶上Token參數(shù)。
用戶提交請求后, 服務端驗證表單中的Token是否與用戶Session(或Cookies)中的Token一致,一致為合法請求,不是則非法請求。
這個Token的值必須是隨機的
。由于Token的存在,攻擊者無法再構(gòu)造一個帶有合法Token的請求實施CSRF攻擊。另外使用Token時應注意Token的保密性,盡量把敏感操作由GET改為POST
,以form或AJAX形式提交,避免Token泄露。
總結(jié)
通常使用Anti CSRF Token
來防御CSRF攻擊,同時要注意Token的保密性和隨機性。
參考文獻: