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