怎樣做好csrf防御?這三方面要注意
Admin 2021-12-15 群英技術(shù)資訊 1764 次瀏覽
這篇文章給大家分享的是有關(guān)怎樣做好csrf防御的方法。csrf是一種挾制用戶(hù)在當(dāng)前已登錄的Web應(yīng)用程序上執(zhí)行非本意的操作的攻擊方法。做好csrf防御是很重要的,下文我們就來(lái)看看目前防御 CSRF 攻擊主要策略。

csrf是一種挾制用戶(hù)在當(dāng)前已登錄的Web應(yīng)用程序上執(zhí)行非本意的操作的攻擊方法。
csrf防御方法:
目前防御 CSRF 攻擊主要有三種策略:
1、驗(yàn)證 HTTP Referer 字段;
2、在請(qǐng)求地址中添加 token 并驗(yàn)證;
3、在 HTTP 頭中自定義屬性并驗(yàn)證。
下面我們來(lái)具體說(shuō)一下:
(1)驗(yàn)證 HTTP Referer 字段
根據(jù) HTTP 協(xié)議,在 HTTP 頭中有一個(gè)字段叫 Referer,它記錄了該 HTTP 請(qǐng)求的來(lái)源地址。在通常情況下,訪問(wèn)一個(gè)安全受限頁(yè)面的請(qǐng)求來(lái)自于同一個(gè)網(wǎng)站。而如果黑客要對(duì)銀行網(wǎng)站實(shí)施 CSRF 攻擊,他只能在他自己的網(wǎng)站構(gòu)造請(qǐng)求,當(dāng)用戶(hù)通過(guò)黑客的網(wǎng)站發(fā)送請(qǐng)求到銀行時(shí),該請(qǐng)求的 Referer 是指向黑客自己的網(wǎng)站。
因此,要防御 CSRF 攻擊,銀行網(wǎng)站只需要對(duì)于每一個(gè)轉(zhuǎn)賬請(qǐng)求驗(yàn)證其 Referer 值,如果是以 bank.example 開(kāi)頭的域名,則說(shuō)明該請(qǐng)求是來(lái)自銀行網(wǎng)站自己的請(qǐng)求,是合法的。如果 Referer 是其他網(wǎng)站的話(huà),則有可能是黑客的 CSRF 攻擊,拒絕該請(qǐng)求。
這種方法的顯而易見(jiàn)的好處就是簡(jiǎn)單易行,網(wǎng)站的普通開(kāi)發(fā)人員不需要操心 CSRF 的漏洞,只需要在最后給所有安全敏感的請(qǐng)求統(tǒng)一增加一個(gè)攔截器來(lái)檢查 Referer 的值就可以。特別是對(duì)于當(dāng)前現(xiàn)有的系統(tǒng),不需要改變當(dāng)前系統(tǒng)的任何已有代碼和邏輯,沒(méi)有風(fēng)險(xiǎn),非常便捷。
(2)在請(qǐng)求地址中添加 token 并驗(yàn)證
CSRF 攻擊之所以能夠成功,是因?yàn)楹诳涂梢酝耆珎卧煊脩?hù)的請(qǐng)求,該請(qǐng)求中所有的用戶(hù)驗(yàn)證信息都是存在于 cookie 中,因此黑客可以在不知道這些驗(yàn)證信息的情況下直接利用用戶(hù)自己的 cookie 來(lái)通過(guò)安全驗(yàn)證。
要抵御 CSRF,關(guān)鍵在于在請(qǐng)求中放入黑客所不能偽造的信息,并且該信息不存在于 cookie 之中??梢栽?HTTP 請(qǐng)求中以參數(shù)的形式加入一個(gè)隨機(jī)產(chǎn)生的 token,并在服務(wù)器端建立一個(gè)攔截器來(lái)驗(yàn)證這個(gè) token,如果請(qǐng)求中沒(méi)有 token 或者 token 內(nèi)容不正確,則認(rèn)為可能是 CSRF 攻擊而拒絕該請(qǐng)求。
(3)在 HTTP 頭中自定義屬性并驗(yàn)證
這種方法也是使用 token 并進(jìn)行驗(yàn)證,和上一種方法不同的是,這里并不是把 token 以參數(shù)的形式置于 HTTP 請(qǐng)求之中,而是把它放到 HTTP 頭中自定義的屬性里。通過(guò) XMLHttpRequest 這個(gè)類(lèi),可以一次性給所有該類(lèi)請(qǐng)求加上 csrftoken 這個(gè) HTTP 頭屬性,并把 token 值放入其中。
這樣解決了上種方法在請(qǐng)求中加入 token 的不便,同時(shí),通過(guò) XMLHttpRequest 請(qǐng)求的地址不會(huì)被記錄到瀏覽器的地址欄,也不用擔(dān)心 token 會(huì)透過(guò) Referer 泄露到其他網(wǎng)站中去。
然而這種方法的局限性非常大。XMLHttpRequest 請(qǐng)求通常用于 Ajax 方法中對(duì)于頁(yè)面局部的異步刷新,并非所有的請(qǐng)求都適合用這個(gè)類(lèi)來(lái)發(fā)起,而且通過(guò)該類(lèi)請(qǐng)求得到的頁(yè)面不能被瀏覽器所記錄下,從而進(jìn)行前進(jìn),后退,刷新,收藏等操作,給用戶(hù)帶來(lái)不便。
另外,對(duì)于沒(méi)有進(jìn)行 CSRF 防護(hù)的遺留系統(tǒng)來(lái)說(shuō),要采用這種方法來(lái)進(jìn)行防護(hù),要把所有請(qǐng)求都改為 XMLHttpRequest 請(qǐng)求,這樣幾乎是要重寫(xiě)整個(gè)網(wǎng)站,這代價(jià)無(wú)疑是不能接受的。
以上就是關(guān)于“怎樣做好csrf防御”的解答,上述這三種防御策略有一定的參考價(jià)值,需要的朋友可以參考,想要了解更多csrf防御的相關(guān)內(nèi)容,大家可以關(guān)注群英網(wǎng)絡(luò)其它相關(guān)文章。
文本轉(zhuǎn)載自PHP中文網(wǎng)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:[email protected]進(jìn)行舉報(bào),并提供相關(guān)證據(jù),查實(shí)之后,將立刻刪除涉嫌侵權(quán)內(nèi)容。
猜你喜歡
CDN是什么與CDN加速的原理
本文主要給大家介紹的如何突破入侵檢測(cè)系統(tǒng),了解破入侵檢測(cè)系統(tǒng)的方法對(duì)于我們更好的防御以及完善入侵檢測(cè)系統(tǒng)都是有幫助的,下面我們一起來(lái)看看都有哪些方法。
CDN學(xué)習(xí)筆記一(CDN是什么?)
本文由web服務(wù)器安全欄目為大家推薦,文中通過(guò)三個(gè)案例為大家測(cè)試了javascript原型鏈攻擊與防御,希望可以幫助到大家。原型鏈污染來(lái)自一個(gè)在jquery中修復(fù)的漏洞,但是這個(gè)漏洞廣義的推廣的話(huà),無(wú)論前后端都會(huì)受到影響。
站群服務(wù)器在使用過(guò)程中常見(jiàn)的問(wèn)題有哪些
推薦內(nèi)容
相關(guān)標(biāo)簽
成為群英會(huì)員,開(kāi)啟智能安全云計(jì)算之旅
立即注冊(cè)關(guān)注或聯(lián)系群英網(wǎng)絡(luò)
7x24小時(shí)售前:400-678-4567
7x24小時(shí)售后:0668-2555666
24小時(shí)QQ客服
群英微信公眾號(hào)
CNNIC域名投訴舉報(bào)處理平臺(tái)
服務(wù)電話(huà):010-58813000
服務(wù)郵箱:[email protected]
投訴與建議:0668-2555555
Copyright ? QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版權(quán)所有
增值電信經(jīng)營(yíng)許可證 : B1.B2-20140078 ICP核準(zhǔn)(ICP備案)粵ICP備09006778號(hào) 域名注冊(cè)商資質(zhì) 粵 D3.1-20240008