視頻直播支持通過設置Referer黑白名單、User-Agent黑白名單、IP黑白名單進行訪問控制,本文介紹視頻直播訪問控制功能、適用場景和使用方式。
簡介
訪問控制是在云端配置視頻資源的訪問策略,達到基本的保護目的,具有使用門檻低(僅云端配置不需要額外開發)、快速生效等優點,主要手段有:
Referer黑白名單
User-Agent黑白名單
IP黑白名單
User-Agent黑白名單,由于配置繁瑣且存在誤操作風險,暫未開放控制臺設置,如有需求可以提交工單聯系阿里云技術支持。關于如何提交工單,請參見聯系我們。
適用場景
訪問控制的使用門檻很低,只需簡單配置即可使用,能起到一定的保護作用,特別是Web端。
Referer和User-Agent都基于HTTP Header,容易被偽造,安全性低。
IP黑白名單機制,無法實現內容分發給大量C端用戶,不適合廣泛的內容消費場景。
Referer黑白名單
介紹
基于HTTP協議支持的Referer機制,通過Referer跟蹤來源,對來源進行識別和判斷,用戶可配置訪問的Referer黑、白名單來限制視頻資源被訪問的情況。
訪客對資源發起請求后,請求到達CDN節點,節點會根據用戶預設的防盜鏈黑名單或白名單進行過濾:符合規則可順利請求到視頻數據;若不符合,請求會被拒絕,并返回403響應碼。
Referer黑白名單是可選配置,默認不啟用。
配置后會自動添加泛域名支持。例如填寫
example.com
,最終配置生效的是*.example.com
,所有子級域名都會生效。支持設置是否允許空Referer字段訪問資源,即允許通過瀏覽器地址欄直接訪問資源URL。
使用方式
控制臺:具體操作請參見防盜鏈。
API:通過調用BatchSetLiveDomainConfigs接口,可批量配置直播域名,包括Referer黑白名單。
java sdk設置Referer防盜鏈的示例代碼如下:
//需要<>內容替換成實際使用的值 DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>"); IAcsClient client = new DefaultAcsClient(profile); BatchSetLiveDomainConfigsRequest batchSetLiveDomainConfigsRequest =new BatchSetLiveDomainConfigsRequest(); batchSetLiveDomainConfigsRequest.setDomainNames("<DomainNames>"); batchSetLiveDomainConfigsRequest.setFunctions("[{\"functionArgs\":[{\"argName\":\"refer_domain_allow_list\",\"argValue\":\"<referer_white_domain_list>\"},{\"argName\":\"allow_empty\",\"argValue\":\"<off>\"}],\"functionName\":\"referer_white_list_set\"}]"); try { BatchSetLiveDomainConfigsResponse response = client.getAcsResponse(batchSetLiveDomainConfigsRequest); System.out.println(new Gson().toJson(response)); //todo something } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); }
說明以上示例代碼表示:為<DomainNames>設置Referer防盜鏈白名單,白名單域名列表為<referer_white_domain_list>,且不允許空Referer訪問(allow_empty值為<off>)。
使用JAVA SDK,具體請參見Java SDK使用說明。
注意事項
重要黑、白名單互斥,同一時間您只能選擇一種方式。
由于移動端一般拿不到Referer,當前默認支持空Referer訪問,可選擇關閉。如果設置為不允許空referer訪問,在移動端可以配合阿里云播放器設置referer。
當您設置不允許空Referer訪問時,請務必配置HTTPS安全加速,并開啟強制跳轉HTTPS(HTTP>HTTPS)。部分瀏覽器處理HTTPS請求HTTP的資源時,會移除Referer,導致無法訪問。
示例
當設置播流域名
demo.developer.aliyundoc.com
的Referer白名單為example.com
,且不允許空Referer訪問。請求數據:
curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000'
返回中包含:
X-Tengine-Error:denied by Referer ACL
當請求帶上允許的Referer后即正常返回:
curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000' \ -H 'Referer: http://www.example.com'
User-Agent黑白名單
介紹
User-Agent是一個特殊字符串頭,幫助服務端識別用戶使用的操作系統及版本、CPU類型、瀏覽器及版本、瀏覽器渲染引擎&語言和插件等??赏ㄟ^User-Agent黑白名單來限制特定瀏覽器或終端的訪問。
使用方式
提交工單聯系阿里云技術支持。關于如何提交工單,請參見聯系我們。
示例
如PC端IE9瀏覽器:
User-Agent:Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0;
可模擬HTTP請求驗證:
curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000' \ -H 'User-Agent: iPhone OS;MI 5'
IP黑白名單
介紹
支持配置IP黑名單或白名單,拒絕或只允許特定IP的訪問。
添加IP到黑名單,那么該IP無法訪問當前加速域名。
添加IP到白名單,那么只有該IP能夠訪問當前加速域名。
支持IP列表添加,并支持添加IP網段。
例如:網段127.0.0.0/24,24表示采用子網掩碼中的前24位為有效位,即用32-24=8bit來表示主機號,該子網可以容納28-2=254臺主機,故可表示IP網段范圍:127.0.0.0~127.0.0.254。
支持IPV6地址。
使用方式
控制臺:具體操作,請參見IP黑白名單。
API:通過調用BatchSetLiveDomainConfigs接口,可批量配置直播域名,包括IP黑白名單。
java sdk設置IP黑白名單的示例代碼如下:
//需要<>內容替換成實際使用的值 DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>"); IAcsClient client = new DefaultAcsClient(profile); BatchSetLiveDomainConfigsRequest batchSetLiveDomainConfigsRequest =new BatchSetLiveDomainConfigsRequest(); batchSetLiveDomainConfigsRequest.setDomainNames("<DomainNames>"); batchSetLiveDomainConfigsRequest.setFunctions("[{\"functionArgs\":[{\"argName\":\"ip_list\",\"argValue\":\"<127.0.0.0/24>\"}],\"functionName\":\"ip_allow_list_set\"}]"); try { BatchSetLiveDomainConfigsResponse response = client.getAcsResponse(batchSetLiveDomainConfigsRequest); System.out.println(new Gson().toJson(response)); //todo something } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); }
說明以上示例代碼表示:為<DomainNames>設置IP白名單,白名單IP列表為<127.0.0.0/24>。
使用JAVA SDK,具體請參見Java SDK使用說明。
注意事項
重要黑、白名單互斥,同一時間您只能選擇一種方式。
最多可配置1000個IPv6地址,或者3000個IPv4地址。IPv6地址中的英文字母不區分大小寫,不支持::縮寫格式。