开发者社区 问答 正文

Go-SDK之如何实现设置防盗链?

OSS是按使用收费的服务,为了防止用户在OSS上的数据被其他人盗链,OSS支持 基于HTTP header中表头字段referer的防盗链方法。更多OSS防盗链请参考: OSS 防盗链


提示:
  • 设置防盗链的示例代码在sample/bucket_referer.go。


设置Referer白名单


通过Bucket.SetBucketReferer设置Referer白名单,该函数有三个参数:
  • bucketName 存储空间名称。
  • referers 访问白名单列表。一个bucket可以支持多个referer参数。eferer参数支持通配符"*"和"?"。
  • allowEmptyReferer 指定是否允许referer字段为空的请求访问。默认配置为true。    import "github.com/aliyun/aliyun-oss-go-sdk/oss"
  •     client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
  •     if err != nil {
  •         // HandleError(err)
  •     }
  •     referers := []string{"http://www.aliyun.com",
  •                          "http://www.???.aliyuncs.com",
  •                          "http://www.*.com"}
  •     err = client.SetBucketReferer("my-bucket", referers, false)
  •     if err != nil {
  •         // HandleError(err)
  •     }



查看Referer白名单


通过Bucket.GetBucketReferer设置Referer白名单: import "fmt"
    import "github.com/aliyun/aliyun-oss-go-sdk/oss"

    client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
    if err != nil {
        // HandleError(err)
    }

    refRes, err := client.GetBucketReferer("my-bucket")
    if err != nil {
        // HandleError(err)
    }
    fmt.Println("Referers:", refRes.RefererList,
                "AllowEmptyReferer:", refRes.AllowEmptyReferer)



清空Referer白名单


清空Referer白名单,即把白名单设置成空,allowEmptyReferer为true: import "github.com/aliyun/aliyun-oss-go-sdk/oss"

    client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
    if err != nil {
        // HandleError(err)
    }

    err = client.SetBucketReferer("my-bucket", []string{}, true)
    if err != nil {
        // HandleError(err)
    }

展开
收起
青衫无名 2017-10-19 14:39:32 1872 分享 版权
阿里云 AI 助理回答

阿里云对象存储服务(OSS)提供了一种基于HTTP头部中Referer字段的防盗链功能,以保护您的数据不被未经授权的第三方网站盗用。以下是如何使用阿里云OSS SDK for Go来管理防盗链设置的简要指南:

设置Referer白名单

通过调用SetBucketReferer方法,您可以为指定的Bucket设置允许访问的Referer列表。示例代码展示了如何设置包含具体域名、通配符匹配以及是否允许空Referer的白名单。

import "github.com/aliyun/aliyun-oss-go-sdk/oss"

client, err := oss.New("YourEndpoint", "YourAccessKeyId", "YourAccessKeySecret")
if err != nil {
    // 处理错误
}

// 定义Referer白名单列表
referers := []string{
    "http://www.aliyun.com",
    "http://www.???.aliyuncs.com", // 通配符匹配,如http://www.a.aliyuncs.com或http://www.b.aliyuncs.com
    "http://www.*.com",            // 通用通配符匹配任意二级域名
}

// 设置白名单,不允许空Referer访问
err = client.SetBucketReferer("YourBucketName", referers, false)
if err != nil {
    // 处理错误
}

查看Referer白名单

要查看当前Bucket的Referer设置,可以使用GetBucketReferer方法。

import "fmt"
import "github.com/aliyun/aliyun-oss-go-sdk/oss"

client, err := oss.New("YourEndpoint", "YourAccessKeyId", "YourAccessKeySecret")
if err != nil {
    // 处理错误
}

refRes, err := client.GetBucketReferer("YourBucketName")
if err != nil {
    // 处理错误
}

fmt.Println("Referers:", refRes.RefererList, "AllowEmptyReferer:", refRes.AllowEmptyReferer)

清空Referer白名单

如果需要清空白名单,即不允许任何Referer访问(除非明确设置allowEmptyReferer为true),可以通过传递一个空的Referer列表和相应的allowEmptyReferer值来实现。

err = client.SetBucketReferer("YourBucketName", []string{}, true)
if err != nil {
    // 处理错误
}

请确保替换上述代码中的YourEndpointYourAccessKeyIdYourAccessKeySecret以及YourBucketName为您的实际配置信息。这些操作可以帮助您有效地管理和控制OSS资源的访问权限,防止非法盗链行为。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答