整理常見(jiàn)實(shí)現(xiàn)防盜鏈功能的方案
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
在熱門(mén)平臺(tái)上有許多的熱點(diǎn)新聞,熱門(mén)的圖片、視頻等資源,每天都吸引大量的用戶(hù)觀看和下載。于是就有攻擊者通過(guò)爬蟲(chóng)等一系列技術(shù)手段,把熱門(mén)平臺(tái)上的資源拉取到自己的網(wǎng)站然后呈現(xiàn)給用戶(hù),從而攻擊者達(dá)到了即不用提供資源也能賺錢(qián)的目的,如下圖所示盜取資源的過(guò)程圖: ? 為此,熱門(mén)平臺(tái)為了防止其他的小站點(diǎn)盜取其資源,于是就使用防盜鏈來(lái)保護(hù)自身資源不被竊取。下面我們聊聊常見(jiàn)的幾種防盜鏈實(shí)現(xiàn)方案。 1、Nginx實(shí)現(xiàn)方案 在HTTP協(xié)議頭里有一個(gè)Referer的字段,Referer可以告訴服務(wù)器該網(wǎng)頁(yè)請(qǐng)求是從哪里鏈接過(guò)來(lái)的,如下的請(qǐng)求頭截圖: 那么可以利用請(qǐng)求頭上的Referer攜帶的值,使用Nginx在網(wǎng)關(guān)層做防盜鏈,這個(gè)也是最簡(jiǎn)單的實(shí)現(xiàn)防盜鏈功能的方式之一。 Nginx通過(guò)攔截訪問(wèn)資源的請(qǐng)求,通過(guò)valid_referers關(guān)鍵字定義的白名單,校驗(yàn)請(qǐng)求頭中Referer地址是否為本站,如不是本站請(qǐng)求,那么就拒絕這個(gè)請(qǐng)求的訪問(wèn),Nginx的配置如下所示:
Nginx的方式可以限制大多數(shù)普通的非法請(qǐng)求,但不能限制有針對(duì)性的攻擊請(qǐng)求,因?yàn)楣粽呖梢酝ㄟ^(guò)偽造Referer信息來(lái)繞過(guò)Nginx的檢查。 2、SpringBoot的過(guò)濾器實(shí)現(xiàn)方案 過(guò)濾器同樣是使用Referer的原理,在SpringBoot中聲明一個(gè)過(guò)濾器,然后獲取到當(dāng)前請(qǐng)求頭當(dāng)中的Referer,如下代碼所示:
過(guò)濾器中通過(guò)比對(duì)Referer中的來(lái)源,如果它不是我們?cè)试S的來(lái)源,那么就直接拒絕請(qǐng)求。其實(shí)攻擊者依然可以偽裝Referer,所以還是無(wú)法徹底解決資源被盜取的問(wèn)題。 3、token驗(yàn)證的實(shí)現(xiàn)方案 用戶(hù)登錄之后服務(wù)器通過(guò)生成一個(gè)token,然后每次用戶(hù)請(qǐng)求后端都需要將token攜帶給服務(wù)器,如果請(qǐng)求中沒(méi)有token或者token解析失敗,就直接拒絕請(qǐng)求的訪問(wèn)。 但是這種方式攻擊者依然可以通過(guò)先請(qǐng)求我們的登錄接口拿到token后,然后把token放在請(qǐng)求頭上,繼而達(dá)到偽裝成正常的用戶(hù)請(qǐng)求,這樣就繞過(guò)token驗(yàn)證。 4、時(shí)間戳驗(yàn)證方案 正常的用戶(hù)打開(kāi)一個(gè)網(wǎng)頁(yè)之后總會(huì)停留一定的時(shí)間,即使此用戶(hù)停留的再短也會(huì)比其他的竊取工具(如爬蟲(chóng))停留的時(shí)間長(zhǎng),利用這個(gè)特點(diǎn)在每次響應(yīng)客戶(hù)端的時(shí)候,后端給客戶(hù)端響應(yīng)一個(gè)時(shí)間戳,然后前端攜帶這個(gè)時(shí)間戳請(qǐng)求后端接口,后端拿到時(shí)間戳后與當(dāng)前的時(shí)間做比對(duì),核心的代碼如下所示:
請(qǐng)求種的時(shí)間戳與當(dāng)前的時(shí)間計(jì)算差值,如果差值大于設(shè)定的值,我們就認(rèn)為是正常用戶(hù)的請(qǐng)求,反之認(rèn)定為盜竊用戶(hù)請(qǐng)求,則拒絕訪問(wèn)。時(shí)間戳的方式也存在一定的誤判,用戶(hù)可能確實(shí)就在網(wǎng)頁(yè)上停留很短的時(shí)間。 5、圖形驗(yàn)證碼的實(shí)現(xiàn)方案 圖形驗(yàn)證碼是一種比較常規(guī)的限制辦法,在下載資源,瀏覽關(guān)鍵信息的時(shí)候,都必須要求用戶(hù)手動(dòng)操作驗(yàn)證碼,典型的圖形驗(yàn)證碼如下所示: 使用圖形驗(yàn)證碼使得一般的爬蟲(chóng)工具無(wú)法繞過(guò)校驗(yàn),從而起到保護(hù)資源的目的。 防盜鏈其實(shí)不是百分之百可以防住資源被盜竊的問(wèn)題,它只能增加破解的難度,因?yàn)橹灰W(wǎng)站的數(shù)據(jù)能夠正常訪問(wèn),那攻擊者就能偽裝成正常用戶(hù)來(lái)竊取數(shù)據(jù)。在一些大公司中,他們會(huì)去結(jié)合大數(shù)據(jù)分析用戶(hù)的行為,將一些不正常的用戶(hù)行為定義到黑名單中,然后在黑名單上的用戶(hù)請(qǐng)求會(huì)被攔截。 該文章在 2025/1/9 10:06:21 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |