這篇文章將為大家詳細(xì)講解有關(guān)什么是CSRF?文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
什么是 CSRF
在了解 CSRF 之前我們需要科普兩個(gè)前提。首先是登錄權(quán)限驗(yàn)證的方式有很多種,目前絕大多數(shù)網(wǎng)站采用的還是 session 會(huì)話任務(wù)的方式。session 機(jī)制簡(jiǎn)單的來說就是服務(wù)端使用一個(gè)鍵值對(duì)記錄登錄信息,同時(shí)在 cookie 中將 session id(即剛才說的鍵)存儲(chǔ)到 cookie 中。另外我們又知道瀏覽器中 HTTP(s) 請(qǐng)求是會(huì)自動(dòng)幫我們把 cookie 帶上傳給服務(wù)端的。這樣在每次請(qǐng)求的時(shí)候通過 cookie 獲取 session id,然后通過它在服務(wù)端獲取登錄信息即可完成用戶權(quán)限的校驗(yàn)。
本來這也是個(gè)不錯(cuò)的功能。但是由于 cookie 實(shí)在是太開放了,如果一個(gè)用戶在 A 網(wǎng)站登錄了,如果用戶在 B 網(wǎng)站訪問的時(shí)候發(fā)送了一個(gè) A 網(wǎng)站的請(qǐng)求,那么這個(gè)請(qǐng)求其實(shí)是帶有這個(gè)用戶在 A 網(wǎng)站的登錄信息的。如果這時(shí)候 B 站的 A 網(wǎng)站請(qǐng)求是用戶不知道的,那就是非常嚴(yán)重的危害了。以上的過程就是跨站請(qǐng)求攻擊,即 Cross-Site Request Forgery,即 CSRF。
CSRF 的危害
簡(jiǎn)單總結(jié) CSRF 漏洞就是利用網(wǎng)站權(quán)限校驗(yàn)方面的漏洞在用戶不知覺的情況下發(fā)送請(qǐng)求,達(dá)到“偽裝”用戶的目的。攻擊者利用 CSRF 實(shí)現(xiàn)的攻擊主要有以下幾種:
攻擊者能夠欺騙受害用戶完成該受害者所允許的任一狀態(tài)改變的操作,比如:更新賬號(hào)細(xì)節(jié),完成購物,注銷甚至登錄等操作
獲取用戶的隱私數(shù)據(jù)
配合其他漏洞攻擊
CSRF 蠕蟲
其中 CSRF 蠕蟲如其名所指就是產(chǎn)生蠕蟲效果,會(huì)將 CSRF 攻擊一傳十,十傳百。如:某社區(qū)私信好友的接口和獲取好友列表的接口都存在CSRF漏洞,攻擊者就可以將其組合成一個(gè)CSRF蠕蟲——當(dāng)一個(gè)用戶訪問惡意頁面后通過CSRF獲取其好友列表信息,然后再利用私信好友的CSRF漏洞給其每個(gè)好友發(fā)送一條指向惡意頁面的信息,只要有人查看這個(gè)信息里的鏈接,CSRF蠕蟲就會(huì)不斷傳播下去,其可能造成的危害和影響非常巨大!
防御方法
從上文的描述中我們可以知道 CSRF 有兩個(gè)特點(diǎn):利用 cookie 自動(dòng)攜帶的特性以及跨站攻擊。那么針對(duì)這兩個(gè)特性可以使用如下解決方法。
檢查 Referer 字段
大家都知道 HTTP 頭中有一個(gè) Referer 字段,這個(gè)字段用以標(biāo)明請(qǐng)求來源于哪個(gè)地址。通過在網(wǎng)站中校驗(yàn)請(qǐng)求的該字段,我們能知道請(qǐng)求是否是從本站發(fā)出的。我們可以拒絕一切非本站發(fā)出的請(qǐng)求,這樣避免了 CSRF 的跨站特性。
const { parse } = require('url');module.exports = class extends think.Logic { indexAction() { const referrer = this.ctx.referrer(); const {host: referrerHost} = parse(referrer); if(referrerHost !== 'xxx') { return this.fail('REFERRER_ERROR'); } }}
同樣以 ThinkJS 為例,只要在 Logic 中簡(jiǎn)單判斷下即可。這種方式利用了客戶端無法構(gòu)造 Referrer 的特性,雖然簡(jiǎn)單,不過當(dāng)網(wǎng)站域名有多個(gè),或者經(jīng)常變換域名的時(shí)候會(huì)變得非常的麻煩,同時(shí)也具有一定的局限性。
Token 驗(yàn)證
由于 CSRF 是利用了瀏覽器自動(dòng)傳遞 cookie 的特性,另外一個(gè)防御思路就是校驗(yàn)信息不通過 cookie 傳遞,在其他參數(shù)中增加隨機(jī)加密串進(jìn)行校驗(yàn)。這里又有兩種辦法:
隨機(jī)字符串:為每一個(gè)提交增加一個(gè)隨機(jī)串參數(shù),該參數(shù)服務(wù)端通過頁面下發(fā),每次請(qǐng)求的時(shí)候補(bǔ)充到提交參數(shù)中,服務(wù)端通過校驗(yàn)該參數(shù)是否一致來判斷是否是用戶請(qǐng)求。由于 CSRF 攻擊中攻擊者是無從事先得知該隨機(jī)字符串的值,所以服務(wù)端就可以通過校驗(yàn)該值拒絕可以請(qǐng)求。
JWT:實(shí)際上除了 session 登錄之外,現(xiàn)在越來越流行 JWT token 登錄校驗(yàn)。該方式是在前端記錄登錄 token,每次請(qǐng)求的時(shí)候通過在 Header 中添加認(rèn)證頭的方式來實(shí)現(xiàn)登錄校驗(yàn)過程。由于 CSRF 攻擊中攻擊者無法知道該 token 值,通過這種方式也是可以防止 CSRF 攻擊的。當(dāng)然 token 登錄方式除了 JWT 之外還有 OAuth 等很多種方式。
關(guān)于什么是CSRF?就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
新聞標(biāo)題:什么是CSRF?-創(chuàng)新互聯(lián)
路徑分享:http://www.chinadenli.net/article40/dgchho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、Google、微信公眾號(hào)、企業(yè)網(wǎng)站制作、移動(dòng)網(wǎng)站建設(shè)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容