使用防盜鏈策略避免非法流量盜用
通過在OSS中配置基于請求標(biāo)頭Referer的訪問規(guī)則,可以阻止某些Referer訪問您的OSS文件,從而防止其他網(wǎng)站盜用您的文件,并避免由此引起的不必要的流量費(fèi)用增加。
使用場景
禁止未經(jīng)授權(quán)的使用:保護(hù)圖片、視頻、音頻等敏感或有版權(quán)的文件不被未經(jīng)授權(quán)的網(wǎng)站下載或訪問。
節(jié)省帶寬和資源消耗:通過防止盜鏈,避免其他網(wǎng)站直接鏈接到自己的資源文件,減少了非法訪問帶來的帶寬消耗和服務(wù)器資源壓力。
付費(fèi)內(nèi)容保護(hù):在提供付費(fèi)內(nèi)容的場景中,防盜鏈可以確保只有購買者才能訪問和使用付費(fèi)內(nèi)容,防止非法傳播和盜版。
合作伙伴授權(quán)訪問:某些情況下,需要與合作伙伴網(wǎng)站共享資源或數(shù)據(jù),通過防盜鏈可以限制只有特定合作伙伴可以訪問和使用共享資源。
基本概念
盜鏈:是指在一個網(wǎng)頁內(nèi),以鏈接的形式嵌入另一個網(wǎng)頁的內(nèi)容,從而獲取他人的資源而不經(jīng)過授權(quán)。
防盜鏈:在OSS中,是指通過配置Referer來防止其他非法網(wǎng)站或用戶盜用您的OSS資源。
Referer:HTTP請求頭部中的一個字段,包含了請求的來源頁面的URL。通過檢查Referer頭部的值,可以判斷請求的來源頁面。Referer檢查通常用于以下兩種場景:防盜鏈。例如,網(wǎng)站訪問自己的圖片服務(wù)器,圖片服務(wù)器通過Referer來判斷是否為自己的域名,如果是就繼續(xù)訪問,不是則攔截;數(shù)據(jù)統(tǒng)計(jì)。例如,統(tǒng)計(jì)用戶是從哪個鏈接過來訪問的。
空Referer:HTTP請求中Referer頭部的內(nèi)容為空,或者HTTP請求中不包含Referer頭部。如果存在以下兩種情況,則Referer為空:當(dāng)請求并不是由鏈接觸發(fā)產(chǎn)生。例如直接通過瀏覽器輸入地址打開頁面;從HTTPS頁面上的鏈接訪問到非加密的HTTP頁面時(shí),在HTTP頁面上是檢查不到Referer的。
白名單:一種限制只允許特定來源訪問資源的列表。在防盜鏈中,可以配置一個白名單來定義允許訪問資源的Referer來源。
黑名單:一種限制阻止特定來源訪問資源的列表。在防盜鏈中,可以配置一個黑名單來定義阻止訪問資源的Referer來源。
QueryString:HTTP請求中的一部分,用于在URL中傳遞參數(shù)信息。它通常包含在URL的問號后面,以鍵值對的形式表示。
功能原理
當(dāng)瀏覽器向OSS發(fā)送請求時(shí),請求標(biāo)頭中將包含Referer,用于告知OSS該請求的頁面鏈接來源。如果配置了防盜鏈,OSS將根據(jù)請求的Referer與配置的Referer規(guī)則來判斷是否允許此請求:
如果瀏覽器附帶的Referer與黑名單Referer匹配,或與白名單Referer不匹配,則OSS將拒絕該請求的訪問。
如果瀏覽器附帶的Referer與白名單Referer匹配,則OSS將允許該請求的訪問。
例如,某個Bucket配置了白名單Referer為https://10.10.10.10
。
用戶A在
https://10.10.10.10
嵌入test.jpg圖片,當(dāng)瀏覽器請求訪問此圖片時(shí)會帶上https://10.10.10.10
的Referer,此場景下OSS將允許該請求的訪問。用戶B盜用了test.jpg的圖片鏈接并將其嵌入
https://192.168.0.0
,當(dāng)瀏覽器請求訪問此圖片時(shí)會帶上https://192.168.0.0
的Referer,此場景下OSS將拒絕該請求的訪問。
判斷邏輯
開啟防盜鏈后,OSS會根據(jù)請求Header中的Referer地址判斷訪問來源的方式,確定是否允許當(dāng)前請求。具體判斷邏輯如下。
判斷請求Referer是否為空。
如果請求Referer為空,則查看是否允許空Referer。
如果允許空Referer,則請求被允許。
如果不允許空Referer,且白名單Referer列表為空,則請求被允許。
如果不允許空Referer,且白名單Referer列表不為空,則請求被拒絕。
如果請求Referer不為空,則執(zhí)行步驟2。
判斷黑名單Referer列表是否為空。
遍歷黑名單Referer列表。
如果黑名單Referer列表存在匹配條目,則請求被拒絕。
如果黑名單Referer列表不存在匹配條目,則執(zhí)行步驟4。
遍歷白名單Referer列表。
如果白名單Referer列表存在匹配條目,則請求被允許。
如果白名單Referer列表不存在匹配條目,則請求被拒絕。
注意事項(xiàng)
僅支持針對整個Bucket設(shè)置防盜鏈,不支持為Bucket的某一個文件或文件夾設(shè)置防盜鏈。
僅當(dāng)通過簽名URL訪問Object(調(diào)用GetObject接口)或者匿名訪問Object時(shí),OSS會進(jìn)行防盜鏈驗(yàn)證。
當(dāng)請求的Header中包含
Authorization
字段,OSS不會進(jìn)行防盜鏈驗(yàn)證。一個Bucket可以支持多個Referer參數(shù),這些參數(shù)之間通過
,
分隔。為Bucket開啟防盜鏈后,所有權(quán)限(private、public-read、public-read-write)的Bucket都會檢查Referer字段。
為Bucket開啟防盜鏈后,使用OSS的Bucket域名或自定義域名預(yù)覽MP4文件時(shí),必須在Referer白名單中添加相應(yīng)的域名,并允許空Referer。因?yàn)闉g覽器會發(fā)送一個帶Referer和一個不帶Referer的請求,兩個請求都成功才能正常播放視頻。預(yù)覽非MP4文件時(shí),只需允許空Referer。