CSRF (Cross Site Request Forgery)攻擊运杭,中文名:跨站請(qǐng)求偽造夫啊。
其原理是攻擊者構(gòu)造網(wǎng)站后臺(tái)某個(gè)功能接口的請(qǐng)求地址,誘導(dǎo)用戶去點(diǎn)擊或者用特殊方法讓該請(qǐng)求地址自動(dòng)加載辆憔。用戶在登錄狀態(tài)下這個(gè)請(qǐng)求被服務(wù)端接收后會(huì)被誤以為是用戶合法的操作撇眯。對(duì)于 GET 形式的接口地址可輕易被攻擊,對(duì)于 POST 形式的接口地址也不是百分百安全虱咧,攻擊者可誘導(dǎo)用戶進(jìn)入帶 Form 表單可用POST方式提交參數(shù)的頁面熊榛。
CSRF攻擊是源于WEB的隱式身份驗(yàn)證機(jī)制,WEB的身份驗(yàn)證機(jī)制雖然可以保證一個(gè)請(qǐng)求是來自于某個(gè)用戶的瀏覽器腕巡,但卻無法保證該請(qǐng)求是用戶批準(zhǔn)發(fā)送的玄坦。
對(duì)于CSRF的防御也分為服務(wù)端防御與客戶端防御,服務(wù)端防御典型的譬如給某個(gè)頁面添加隨機(jī)數(shù)绘沉,使得無法從第三方頁面直接提交煎楣。在客戶端防御的話可以利用譬如Firefox提供的一些檢查工具。
CSRF漏洞檢測(cè):
抓取一個(gè)正常請(qǐng)求的數(shù)據(jù)包车伞,去掉Referer字段后再重新提交择懂,如果該提交還有效,那么基本上可以確定存在CSRF漏洞另玖。
也可以使用專門針對(duì)CSRF漏洞進(jìn)行檢測(cè)的工具困曙,如CSRFTester表伦,CSRF Request Builder等。
以CSRFTester工具為例慷丽,CSRF漏洞檢測(cè)工具的測(cè)試原理如下:使用CSRFTester進(jìn)行測(cè)試時(shí)蹦哼,首先需要抓取我們?cè)跒g覽器中訪問過的所有鏈接以及所有的表單等信息,然后通過在CSRFTester中修改相應(yīng)的表單等信息要糊,重新提交纲熏,這相當(dāng)于一次偽造客戶端請(qǐng)求。如果修改后的測(cè)試請(qǐng)求成功被網(wǎng)站服務(wù)器接受杨耙,則說明存在CSRF漏洞赤套,當(dāng)然此款工具也可以被用來進(jìn)行CSRF攻擊。
防范措施: anti-csrf-token方案
?目前防御 CSRF 攻擊主要有三種策略:驗(yàn)證 HTTP Referer 字段珊膜;在請(qǐng)求地址中添加 token 并驗(yàn)證容握;在 HTTP 頭中自定義屬性并驗(yàn)證。
驗(yàn)證 HTTP Referer 字段
服務(wù)端在收到路由請(qǐng)求時(shí)车柠,生成一個(gè)隨機(jī)數(shù)剔氏,在渲染請(qǐng)求頁面時(shí)把隨機(jī)數(shù)埋入頁面(一般埋入 form 表單內(nèi),)
服務(wù)端設(shè)置setCookie竹祷,把該隨機(jī)數(shù)作為cookie或者session種入用戶瀏覽器
當(dāng)用戶發(fā)送 GET 或者 POST 請(qǐng)求時(shí)帶上_csrf_token參數(shù)(對(duì)于 Form 表單直接提交即可谈跛,因?yàn)闀?huì)自動(dòng)把當(dāng)前表單內(nèi)所有的 input 提交給后臺(tái),包括_csrf_token)
后臺(tái)在接受到請(qǐng)求后解析請(qǐng)求的cookie獲取_csrf_token的值塑陵,然后和用戶請(qǐng)求提交的_csrf_token做個(gè)比較感憾,如果相等表示請(qǐng)求是合法的。
?這種方法的顯而易見的好處就是簡(jiǎn)單易行令花,網(wǎng)站的普通開發(fā)人員不需要操心 CSRF 的漏洞阻桅,只需要在最后給所有安全敏感的請(qǐng)求統(tǒng)一增加一個(gè)攔截器來檢查 Referer 的值就可以。特別是對(duì)于當(dāng)前現(xiàn)有的系統(tǒng)兼都,不需要改變當(dāng)前系統(tǒng)的任何已有代碼和邏輯嫂沉,沒有風(fēng)險(xiǎn),非常便捷扮碧。
? ? ? ? 然而趟章,這種方法并非萬無一失。Referer 的值是由瀏覽器提供的慎王,雖然 HTTP 協(xié)議上有明確的要求蚓土,但是每個(gè)瀏覽器對(duì)于 Referer 的具體實(shí)現(xiàn)可能有差別,并不能保證瀏覽器自身沒有安全漏洞赖淤。使用驗(yàn)證 Referer 值的方法北戏,就是把安全性都依賴于第三方(即瀏覽器)來保障,從理論上來講漫蛔,這樣并不安全嗜愈。事實(shí)上,對(duì)于某些瀏覽器莽龟,比如 IE6 或 FF2蠕嫁,目前已經(jīng)有一些方法可以篡改 Referer 值。如果 bank.example 網(wǎng)站支持 IE6 瀏覽器毯盈,黑客完全可以把用戶瀏覽器的 Referer 值設(shè)為以 bank.example 域名開頭的地址剃毒,這樣就可以通過驗(yàn)證,從而進(jìn)行 CSRF 攻擊搂赋。