跨站點(diǎn)請(qǐng)求偽造 (CSRF),也稱為 XSRF、Sea Surf 或 Session Riding,是一種攻擊媒介,可誘使 Web 瀏覽器在用戶登錄的應(yīng)用程序中執(zhí)行不需要的操作。成功的 CSRF 攻擊對(duì)企業(yè)和用戶來說都是毀滅性的。它可能導(dǎo)致客戶關(guān)系受損、未經(jīng)授權(quán)的資金轉(zhuǎn)移、密碼更改和數(shù)據(jù)盜竊——包括會(huì)話 cookie 被盜。CSRF 通常使用惡意社會(huì)工程進(jìn)行,例如誘使受害者向服務(wù)器發(fā)送偽造請(qǐng)求的電子郵件或鏈接。由于毫無戒心的用戶在受到攻擊時(shí)通過其應(yīng)用程序進(jìn)行了身份驗(yàn)證,因此無法區(qū)分合法請(qǐng)求和偽造請(qǐng)求。
CSRF 示例
在執(zhí)行攻擊之前,犯罪者通常會(huì)研究應(yīng)用程序,以使偽造的請(qǐng)求看起來盡可能合法。
例如,一個(gè)典型的 100 美元銀行轉(zhuǎn)賬的 GET 請(qǐng)求可能如下所示:
獲取 http://netbank.com/transfer.do?acct=PersonB&amount=$100 HTTP/1.1
黑客可以修改此腳本,從而將 100 美元轉(zhuǎn)入他們自己的帳戶。現(xiàn)在惡意請(qǐng)求可能看起來像:
獲取 http://netbank.com/transfer.do?acct=AttackerA&amount=$100 HTTP/1.1
壞人可以將請(qǐng)求嵌入到看起來無辜的超鏈接中:
<a >了解更多!</a>
接下來,他可以通過電子郵件將超鏈接分發(fā)給大量銀行客戶。那些在登錄銀行賬戶時(shí)點(diǎn)擊鏈接的人將無意中發(fā)起 100 美元的轉(zhuǎn)賬。請(qǐng)注意,如果銀行的網(wǎng)站僅使用 POST 請(qǐng)求,則不可能使用 <a> href 標(biāo)記構(gòu)建惡意請(qǐng)求。但是,攻擊可以在自動(dòng)執(zhí)行嵌入式 JavaScript 的 <form> 標(biāo)記中進(jìn)行。
這種形式可能是這樣的:
<body onload="document.forms[0].submit()"> <form action="http://netbank.com/transfer.do" method="POST"> <input type="hidden" name="acct" value="攻擊者A"/> <input type="hidden" name="amount" value="$100"/> <input type="submit" value="查看我的圖片!"/> </表格> </body>
緩解 CSRF 的方法
存在許多有效的方法來預(yù)防和緩解 CSRF 攻擊。從用戶的角度來看,預(yù)防是保護(hù)登錄憑證和拒絕未經(jīng)授權(quán)的行為者訪問應(yīng)用程序的問題。
最佳實(shí)踐包括:
- 在不使用時(shí)注銷 Web 應(yīng)用程序
- 保護(hù)用戶名和密碼
- 不允許瀏覽器記住密碼
- 避免在登錄應(yīng)用程序時(shí)同時(shí)瀏覽
對(duì)于 Web 應(yīng)用程序,存在多種解決方案來阻止惡意流量和防止攻擊。最常見的緩解方法之一是為每個(gè)會(huì)話請(qǐng)求或 ID生成唯一的隨機(jī)令牌。這些隨后由服務(wù)器檢查和驗(yàn)證。具有重復(fù)標(biāo)記或缺失值的會(huì)話請(qǐng)求將被阻止。或者,與其會(huì)話 ID 令牌不匹配的請(qǐng)求將被阻止到達(dá)應(yīng)用程序。
雙重提交 cookie 是另一種眾所周知的阻止 CSRF 的方法。與使用唯一令牌類似,隨機(jī)令牌被分配給 cookie 和請(qǐng)求參數(shù)。然后,服務(wù)器在授予對(duì)應(yīng)用程序的訪問權(quán)限之前驗(yàn)證令牌是否匹配。雖然有效,但如果受保護(hù)站點(diǎn)鏈接到外部 URL,則令牌可以在多個(gè)點(diǎn)暴露,包括在瀏覽器歷史記錄、HTTP 日志文件、記錄 HTTP 請(qǐng)求第一行的網(wǎng)絡(luò)設(shè)備和引薦來源網(wǎng)址標(biāo)頭中。這些潛在的弱點(diǎn)使代幣成為一種不完全證明的解決方案。
使用自定義規(guī)則防止 CSRF 攻擊
CSRF 攻擊的高度個(gè)性化特性阻礙了通用解決方案的開發(fā)。但是,可以采用自定義安全策略來防止可能的 CSRF 場景。IncapRules是 Imperva 云專有的自定義規(guī)則引擎,可讓客戶創(chuàng)建自己的安全策略。這些策略是使用直觀的語法生成的,可以即時(shí)修改,從而增強(qiáng)我們默認(rèn)的?Web 應(yīng)用程序防火墻?配置。
使用 IncapRules,您可以創(chuàng)建一個(gè)策略,根據(jù)您的 HTTP 引用標(biāo)頭內(nèi)容過濾對(duì)敏感頁面和功能的請(qǐng)求。這樣做允許從一個(gè)簡短的安全域列表中執(zhí)行請(qǐng)求。這種方法完全對(duì)抗 CSRF 攻擊的社會(huì)工程方面。無論內(nèi)容如何,??它都可以防止在安全范圍之外執(zhí)行惡意請(qǐng)求?;蛘撸梢栽凇皟H警報(bào)”模式下運(yùn)行規(guī)則以跟蹤可能的利用嘗試,或提供驗(yàn)證碼以提醒粗心的用戶。