阿里雲企業實名帳號 阿里雲OSS防盜鏈與訪問簽名
為什麼需要防盜鏈與訪問簽名?
阿里雲企業實名帳號 想象一下,你的OSS存儲桶像個開放式餐廳,誰都能進來拿吃的,結果餐廳的水電費全由你付。這可不是鬧著玩的!阿里雲OSS作為高效穩定的存儲服務,若未設置安全策略,可能被不法分子用作免費CDN,流量費爆表還可能被用來傳播違規內容。防盜鏈和訪問簽名就是你的「智能門禁系統」,一個管住「外來訪客」,一個發「臨時通行證」,雙管齊下守護資源安全。
防盜鏈規則設定:守好你的資源門戶
什麼是防盜鏈?
防盜鏈本質是「身份驗證」,通過檢查HTTP請求頭中的Referer字段,判斷訪問來源是否合法。舉個例子:當別人的網站直接引用你的圖片網址(如<img src='你的OSS網址'>),如果沒有設定防盜鏈,你的OSS就會源源不斷為對方「打工」。設定後,只有白名單中的域名才能正常訪問,其他請求統統擋在門外。
很多人以為防盜鏈就是「封鎖所有外部網站」,其實不然。比如你的手機APP或微信公眾號內嵌瀏覽器可能沒有Referer信息,這時若設定「禁止空Referer」,用戶就無法顯示圖片。因此,需根據實際場景靈活配置,平衡安全與可用性。
如何設定?
設定步驟超簡單,三步搞定:
- 阿里雲企業實名帳號 登錄阿里雲控制台,進入OSS管理頁面
- 找到目標Bucket,點擊「基礎設置」→「防盜鏈」
- 添加Referer白名單(例:https://www.yourdomain.com、http://*.example.com),選擇「允許空Referer」或「禁止空Referer」(建議選擇禁止,避免爬蟲直接調用)
注意!白名單中可使用星號通配符,但不要寫錯URL格式,否則可能導致合法請求被攔截。例如:https://*.com 會匹配所有以.com結尾的域名,但https://*.com.cn 就不行,必須精確到子域名。另外,若需允許多個域名,可多行添加,例如:
- https://www.yourdomain.com
- https://m.yourdomain.com
- http://*.otherdomain.com
若你的應用是APP內置瀏覽器,建議允許空Referer,但同時搭配訪問簽名,避免被其他網站盜用。因為單純防盜鏈無法抵擋直接訪問OSS URL的行為,這時簽名就是第二道防線。
訪問簽名:臨時通行證的妙用
簽名是什麼?
訪問簽名就像給你的資源發了個「限時VIP票」,只有在指定時間內才能進門。生成簽名後,URL會帶上一串加密參數(OSSAccessKeyId、Expires、Signature),過期後自動失效。這招特別適合分享臨時資源,比如用戶上傳的圖片、一時性的下載鏈接,既能控制權限,又不用開放整個Bucket。
舉個生活化例子:你請朋友吃飯,但不想讓餐廳全程開放,而是給他一張「限時入場券」。簽名就是這張券——有效期一到,門就關了。無論是分享個人文件,還是給合作夥伴發送臨時下載鏈,都能確保安全。
生成簽名的步驟
用SDK生成最省心,以Python為例:
from oss2 import Auth, Bucket
auth = Auth('your-access-key-id', 'your-access-key-secret')
bucket = Bucket(auth, 'https://oss-cn-region.aliyuncs.com', 'bucket-name')
# 生成30分鐘有效期的簽名URL
url = bucket.sign_url('GET', 'object-key', 1800)
print(url)生成的URL看起來像這樣:
https://bucket-name.oss-cn-region.aliyuncs.com/object-key?OSSAccessKeyId=xxx&Expires=1700000000&Signature=xxx
Expires是UNIX時間戳,Signature是基於密鑰加密的結果。手動生成時要確保時間戳正確,否則會報錯。另外,Signature參數是根據AccessKeySecret和請求參數加密生成的,不能手動拼接,必須用SDK或阿里雲提供的計算工具。
除了Python,其他語言也有對應SDK,例如Java:
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectKey, HttpMethod.GET);
request.setExpiration(expiration);
URL signedUrl = ossClient.generatePresignedUrl(request);對於不想寫代碼的小白,阿里雲控制台也提供「生成簽名URL」功能:在文件列表頁面,右鍵點擊文件,選擇「獲取地址」→「生成簽名URL」,設置過期時間即可。但要注意,控制台生成的URL只適用於臨時測試,生產環境建議用SDK自動化生成,避免泄露AccessKey。
常見問題與最佳實踐
防盜鏈與簽名可以同時用嗎?
當然可以!這兩招是「搭檔組合」:防盜鏈篩掉非法網站直接引用,簽名則控制具體文件的臨時訪問權限。舉例:你的用戶生成了帶簽名的圖片鏈接,但若未設定防盜鏈,對方可能把這個鏈接放到自己的網站上,導致簽名過期後仍被盜用。所以建議同時啟用,形成雙重防護。
實際場景中,比如公司內網系統,用戶上傳的文件僅限特定人員下載。可以這樣操作:1)設定防盜鏈,只允許公司內網域名訪問;2)為每個下載鏈接生成帶簽名的URL,有效期2小時。這樣即使鏈接被分享到外部,2小時後失效,且外網無法直接訪問,雙重保障更安心。
常見陷阱
陷阱1:防盜鏈白名單太寬泛。比如設置了*.com,結果別家網站也用.com,那就完蛋了。精確到子域名更安全,如yourdomain.com、www.yourdomain.com。
陷阱2:簽名過期時間設得太長。有些人為了省事設置7天,結果被黑客拿到鏈接長期盜用。建議按實際需求設置,比如圖片預覽30分鐘,下載文件2小時,過期即失效最安全。
陷阱3:混淆「公共讀」和「簽名URL」。有些用戶把Bucket設為「公共讀」,再用簽名URL,這其實是多此一舉——因為公共讀意味著任何人不加簽名也能訪問,簽名反而成了擺設!正確做法是把Bucket設為「私有」,僅通過簽名URL開放臨時訪問。
小貼士
定期檢查OSS訪問日誌,發現異常Referer或大量403錯誤,可能是有人在嘗試攻擊。開啟「日誌記錄」功能,把日誌存到另一個Bucket,方便分析。
搭配CDN使用時,注意CDN的Referer設置要和OSS同步,否則可能影響加速效果。阿里雲CDN也有防盜鏈功能,雙重保障更穩妥。
若需要高頻率簽名生成,建議使用STS臨時令牌,避免長期使用主帳號AccessKey。STS能限制權限範圍,且令牌有時間限制,即使洩露也風險可控。
最後,記住:安全是動態過程。定期審查策略,監控異常流量,才能讓你的OSS資源真正「固若金湯」。

