古詩詞大全網 - 個性簽名 - 如何實現網站的防盜鏈?

如何實現網站的防盜鏈?

可以基於OSS的防盜鏈,目前OSS提供的防盜鏈的方法主要有兩種:

設置Referer。控制臺,SDK都可以操作,適合不想寫代碼的用戶,也適合喜歡開發的用戶;

簽名URL,適合喜歡開發的用戶。 本文會給壹個控制臺設置Referer防盜鏈的具體事例,也會基於PHP SDK給壹個動態生成簽名URL防盜鏈的示例。

通過Referer防盜鏈的具體步驟

第壹步:進入 OSS 管理控制臺界面。

第二步:單擊目標存儲空間的名稱進入存儲空間管理頁面。

第三步:單擊 Bucket 屬性 > 防盜鏈設置。

第四步:單擊“設置”添加白名單網址並設置是否允許其為空。

請點擊輸入圖片描述

第五步:單擊“提交”保存對防盜鏈的設置。

舉例

對於壹個名為test-1-001的存儲空間,設置其referer 白名單為 -hangzhou.aliyuncs.com";#Endpoint,根據Bucket創建的區域來選擇,本文中是杭州$bucket = 'referer-test';#Bucket,需要用用戶自己的$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);$object = "aliyun-logo.png";#需要簽名的Object$timeout = 300;#期望鏈接失效的時間,這裏表示從代碼運行到這壹行開始的當前時間往後300秒$signedUrl = $ossClient->signUrl($bucket, $object, $timeout); #簽名URL實現的函數$img= $signedUrl;#將簽名URL動態放到圖片資源中並打印出來$my_html = "<html>";$my_html .= "<img src=\"".$img. "\" />";$my_html .= "<p>".$img."</p>";$my_html .= "</html>";echo $my_html;?>

第三步:通過瀏覽器訪問 多請求幾次會發現簽名的URL會變,這是正常的。主要是因為過期時間的改變導致的。這個過期時間是鏈接失效的時間,是以unix time的形式展示的。 如:Expires=189999,可以將這個時間轉換成本地時間。在Linux下的命令為date -d@189999,也可以在網絡上找工具自行轉換。

特別說明

簽名URL可以和Referer白名單功能壹起使用。

如果簽名URL失效的時間限制在分鐘內,盜鏈用戶即使偽造了Referer也必須拿到簽名的URL,且必須在有效的時間內才能盜鏈成功。 相比只使用Referer來說,增加了盜鏈的難度。 也就是說簽名URL配合Referer白名單功能,可以增加防盜鏈的效果。

防盜鏈總結,基於OSS的防盜鏈最佳實踐點如下

使用三級域名URL,例如referer-test.oss-cn-hangzhou.aliyuncs.com/aliyun-logo.png,安全性比綁定二級域名更高。三級域名方式能夠提供Bucket級別的清洗和隔離,能夠應對被盜鏈後的流量暴漲的情況,也能避免不同Bucket間的互相影響,最終提高業務可用性;

如果使用自定義域名作為連接,CNAME也請綁定到三級域名,規則是bucket + endpoint。假如妳的bucket名為test,三級域名則為test.oss-cn-hangzhou.aliyuncs.com;

對Bucket設定盡可能嚴格的權限類別。例如提供公網服務的Bucket設置為public-read或private,禁止設置為public-read-write。Bucket權限參見訪問控制;

對訪問來源進行驗證,根據需要設置合適的Referer白名單;

如果需要更嚴格的防盜鏈方案,請參考簽名的URL方案;

記錄Bucket訪問日誌,能夠及時發現盜鏈活動和驗證防盜鏈方案的有效性。 訪問日誌參見設置訪問日誌記錄。