來自百度百科
CSRF(Cross-site request forgery)跨站請求偽造酗捌,也被稱為“One Click Attack”或者Session Riding垢乙,通常縮寫為CSRF或者XSRF阿纤,是一種對網(wǎng)站的惡意利用甚负。盡管聽起來像跨站腳本(XSS)否淤,但它與XSS非常不同喉恋,XSS利用站點內的信任用戶沃饶,而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=黑客
點擊之后轉賬給黑客這個賬戶
5. 瀏覽器在接收到這些攻擊性代碼請求后,根據(jù)網(wǎng)站B的請求诸狭,在用戶不知情的情況下攜帶Cookie信息券膀,根據(jù)用戶的Cookie信息以C的權限處理該請求,導致來自黑客請求惡意代碼被執(zhí)行驯遇。
這是原理, 攻擊者盜用了你的身份芹彬,以你的名義發(fā)送惡意請求
,對服務器來說這個請求是完全合法的叉庐,但是卻完成了攻擊者所期望的一個操作舒帮,比如以你的名義發(fā)送郵件、發(fā)消息陡叠,盜取你的賬號玩郊,添加系統(tǒng)管理員,甚至于購買商品枉阵、虛擬貨幣轉賬等译红。
如何防御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的存在,攻擊者無法再構造一個帶有合法Token的請求實施CSRF攻擊抹凳。另外使用Token時應注意Token的保密性遏餐,盡量把敏感操作由GET改為POST
,以form或AJAX形式提交却桶,避免Token泄露境输。
總結
通常使用Anti CSRF Token
來防御CSRF攻擊,同時要注意Token的保密性和隨機性颖系。
參考文獻: