本文介绍如何使用防盗链。
为了防止您在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) } }