本文介绍如何使用防盗链。
为了防止您在OSS上的数据被其他人盗链而产生额外费用,您可以设置防盗链功能,包括以下参数:
- Referer白名单。仅允许指定的域名访问OSS资源。
- 是否允许空Referer。如果不允许空Referer,则只有HTTP或HTTPS header中包含Referer字段的请求才能访问OSS资源。
关于防盗链的更多信息,请参见设置防盗链。
设置防盗链
以下代码用于设置防盗链:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
if err!=nil{
fmt.Println("Error:", err)
os.Exit(-1)
}
// yourBucketName填写Bucket名称。
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实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
if err!=nil{
fmt.Println("Error:", err)
os.Exit(-1)
}
// yourBucketName填写Bucket名称。
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实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
if err!=nil{
fmt.Println("Error:", err)
os.Exit(-1)
}
// yourBucketName填写Bucket名称。
bucketName := "yourBucketName"
// 清空防盗链。防盗链不能直接清空,需要新建一个允许空Referer的规则来覆盖之前的规则。
err = client.SetBucketReferer(bucketName, []string{}, true)
if err!=nil{
fmt.Println("Error:", err)
os.Exit(-1)
}
}
相关文档
- 关于防盗链的完整示例代码,请参见GitHub示例。
- 关于设置防盗链的API接口说明,请参见PutBucketReferer。
- 关于获取防盗链配置的API接口说明,请参见GetBucketReferer。