本文主要介绍如何使用防盗链。
为了防止您在OSS上的数据被其他人盗链而产生额外费用,您可以设置防盗链功能,包括以下参数:
- Referer白名单。仅允许指定的域名访问OSS资源。
- 是否允许空Referer。如果不允许空Referer,则只有HTTP或HTTPS header中包含Referer字段的请求才能访问OSS资源。
更多关于防盗链的介绍,请参见开发指南中的设置防盗链。
设置防盗链
以下代码用于设置防盗链:
#include <alibabacloud/oss/OssClient.h> using namespace AlibabaCloud::OSS; int main(void) { /* 初始化OSS账号信息 */ std::string AccessKeyId = "yourAccessKeyId"; std::string AccessKeySecret = "yourAccessKeySecret"; std::string Endpoint = "yourEndpoint"; std::string BucketName = "yourBucketName"; /* 初始化网络等资源 */ InitializeSdk(); ClientConfiguration conf; OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf) ; /* 设置防盗链 */ SetBucketRefererRequest request(BucketName); request.addReferer("http://example.com"); request.addReferer("https://example.com"); request.addReferer("https://www.?.example.com"); request.addReferer("https://www.*.cn"); request.setAllowEmptyReferer(false); auto outcome = client.SetBucketReferer(request); if (!outcome.isSuccess()) { /* 异常处理 */ std::cout << "SetBucketReferer fail" << ",code:" << outcome.error().Code() << ",message:" << outcome.error().Message() << ",requestId:" << outcome.error().RequestId() << std::endl; ShutdownSdk(); return -1; } /* 释放网络等资源 */ ShutdownSdk(); return 0; }
获取防盗链信息
以下代码用于获取防盗链信息:
#include <alibabacloud/oss/OssClient.h> using namespace AlibabaCloud::OSS; int main(void) { /* 初始化OSS账号信息 */ std::string AccessKeyId = "yourAccessKeyId"; std::string AccessKeySecret = "yourAccessKeySecret"; std::string Endpoint = "yourEndpoint"; std::string BucketName = "yourBucketName"; /* 初始化网络等资源 */ InitializeSdk(); ClientConfiguration conf; OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf); /* 获取防盗链信息 */ GetBucketRefererRequest request(BucketName); auto outcome = client.GetBucketReferer(request); if (outcome.isSuccess()) { std::cout << " GetBucketReferer success, AllowEmptyReferer: " << outcome.result().AllowEmptyReferer() << " ,Referer size: " << outcome.result().RefererList().size() << std::endl; } else { /* 异常处理 */ std::cout << "GetBucketReferer fail" << ",code:" << outcome.error().Code() << ",message:" << outcome.error().Message() << ",requestId:" << outcome.error().RequestId() << std::endl; ShutdownSdk(); return -1; } /* 释放网络等资源 */ ShutdownSdk(); return 0; }
清空防盗链
以下代码用于清空防盗链:
#include <alibabacloud/oss/OssClient.h> using namespace AlibabaCloud::OSS; int main(void) { /* 初始化OSS账号信息 */ std::string AccessKeyId = "yourAccessKeyId"; std::string AccessKeySecret = "yourAccessKeySecret"; std::string Endpoint = "yourEndpoint"; std::string BucketName = "yourBucketName"; /* 初始化网络等资源 */ InitializeSdk(); ClientConfiguration conf; OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf); /* 清空防盗链,防盗链不能直接清空,需要新建一个允许空referer的规则来覆盖之前的规则 */ SetBucketRefererRequest request(BucketName); request.setAllowEmptyReferer(true); auto outcome = client.SetBucketReferer(request); if (!outcome.isSuccess()) { /* 异常处理 */ std::cout << "CleanBucketReferer fail" << ",code:" << outcome.error().Code() << ",message:" << outcome.error().Message() << ",requestId:" << outcome.error().RequestId() << std::endl; ShutdownSdk(); return -1; } /* 释放网络等资源 */ ShutdownSdk(); return 0; }