本文介绍如何使用防盗链。

为了防止您在OSS上的数据被其他人盗链而产生额外费用,您可以设置防盗链功能,包括以下参数:

  • Referer白名单。仅允许指定的域名访问OSS资源。
  • 是否允许空Referer。如果不允许空Referer,则只有HTTP或HTTPS header中包含Referer字段的请求才能访问OSS资源。

更多关于防盗链的介绍,请参见开发指南中的设置防盗链。设置防盗链的完整代码请参见GitHub

设置防盗链

以下代码用于设置防盗链:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func main() {
  8. // 创建OSSClient实例。
  9. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. os.Exit(-1)
  13. }
  14. bucketName := "<yourBucketName>"
  15. // 添加Referer白名单,且不允许空Referer。Referer参数支持通配符星号(*)和问号(?)。
  16. referers := []string{"http://www.aliyun.com",
  17. "http://www.???.aliyuncs.com",
  18. "http://www.*.com"}
  19. err = client.SetBucketReferer(bucketName, referers, false)
  20. if err != nil {
  21. fmt.Println("Error:", err)
  22. os.Exit(-1)
  23. }
  24. }

获取防盗链信息

以下代码用于获取防盗链信息:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func main() {
  8. // 创建OSSClient实例。
  9. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. os.Exit(-1)
  13. }
  14. bucketName := "<yourBucketName>"
  15. // 获取防盗链信息。
  16. refRes, err := client.GetBucketReferer(bucketName)
  17. if err != nil {
  18. fmt.Println("Error:", err)
  19. os.Exit(-1)
  20. }
  21. fmt.Println("Referers: ", refRes.RefererList)
  22. fmt.Println("AllowEmptyReferer: ", refRes.AllowEmptyReferer)
  23. }

清空防盗链

以下代码用于清空防盗链:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func main() {
  8. // 创建OSSClient实例。
  9. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. os.Exit(-1)
  13. }
  14. bucketName := "<yourBucketName>"
  15. // 清空防盗链。防盗链不能直接清空,需要新建一个允许空Referer的规则来覆盖之前的规则。
  16. err = client.SetBucketReferer(bucketName, []string{}, true)
  17. if err != nil {
  18. fmt.Println("Error:", err)
  19. os.Exit(-1)
  20. }
  21. }