开发者社区 问答 正文

.NET-SDK之如何实现防盗链?

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

设置Referer白名单


通过下面代码设置Referer白名单: using Aliyun.OSS;
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var refererList = new List<string>();
// 添加referer项
refererList.Add("http://www.aliyun.com");
refererList.Add("http://www.*.com");
refererList.Add("http://www.?.aliyuncs.com");
// 允许referer字段为空,并设置存储空间Referer列表
var request = new SetBucketRefererRequest(bucketName, refererList);
request. AllowEmptyReferer = true;
client.setBucketReferer(bucketName, br);
Console.WriteLine("设置存储空间{0}的referer白名单成功", bucketName);


提示:
注意:
  • Referer参数支持通配符“*”和“?”,更多详细的规则配置可以参考开发人员指南OSS防盗链


获取Referer白名单
using Aliyun.OSS;
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var rc = client.GetBucketReferer(bucketName);
Console.WriteLine("allow?" + (rc.AllowEmptyReferer ? "yes" : "no"));
if (rc.RefererList.Referers != null)
{
    for (var i = 0; i < rc.RefererList.Referers.Length; i++)
        Console.WriteLine(rc.RefererList.Referers);
}
else
{
    Console.WriteLine("Empty Referer List");
}



提示:


清空Referer白名单


Referer白名单不能直接清空,只能通过重新设置来覆盖之前的规则。using Aliyun.OSS;
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var rc = client.GetBucketReferer(bucketName);
Console.WriteLine("allow?" + (rc.AllowEmptyReferer ? "yes" : "no"));
if (rc.RefererList.Referers != null)
{
    for (var i = 0; i < rc.RefererList.Referers.Length; i++)
        Console.WriteLine(rc.RefererList.Referers);
}
else
{
    Console.WriteLine("Empty Referer List");
}

展开
收起
青衫无名 2017-10-19 09:27:26 1764 分享 版权
阿里云 AI 助理回答

OSS会在以下访问操作时进行防盗链验证:

  1. 当请求访问OSS中存储的资源时,OSS会检查HTTP或HTTPS头部中的Referer字段。
  2. 如果防盗链功能开启,并且配置了白名单或黑名单,OSS会依据配置规则判断Referer字段的值。
  3. 请求中如果Referer字段的值与配置的白名单不符,或者属于黑名单中的地址,OSS将拒绝访问并返回错误,如403 Forbidden。
  4. 当设置了不允许空Referer,且请求中没有Referer字段或其值为空时,OSS也会阻止访问。

综上,OSS在接收到任何带有或不带Referer字段的访问请求时,都会依据防盗链的配置规则进行验证,确保请求来源合法,防止未经授权的盗链行为导致的额外费用和资源滥用。

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