為了防止您在OSS上的資料被其他人盜鏈而產生額外費用,您可以設定防盜鏈功能,包括以下參數:
- Referer白名單。僅允許指定的網域名稱訪問OSS資源。
- 是否允許空Referer。如果不允許空Referer,則只有HTTP或HTTPS header中包含Referer欄位的請求才能訪問OSS資源。
更多關於防盜鏈的介紹,請參見開發指南中的設定防盜鏈。設定防盜鏈的完整代碼請參見GitHub。
設定防盜鏈
以下代碼用於設定防盜鏈:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 添加Referer白名單,且不允許空Referer。Referer參數支援萬用字元星號(*)和問號(?)。
referers := []string{"http://www.aliyun.com",
"http://www.???.aliyuncs.com",
"http://www.*.com"}
err = client.SetBucketReferer(bucketName, referers, false)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
獲取防盜鏈資訊
以下代碼用於獲取防盜鏈資訊:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 獲取防盜鏈資訊。
refRes, err := client.GetBucketReferer(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Referers: ", refRes.RefererList)
fmt.Println("AllowEmptyReferer: ", refRes.AllowEmptyReferer)
}
清空防盜鏈
以下代碼用於清空防盜鏈:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 清空防盜鏈。防盜鏈不能直接清空,需要新建一個允許空Referer的規則來覆蓋之前的規則。
err = client.SetBucketReferer(bucketName, []string{}, true)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}