腾讯云对象存储COS,目前提供了两种防盗刷机制。

  1. referer头防盗链
  2. 签名方式防盗链

referer头防盗链,是一种简单有效的防盗链方式。它的实现原理是,COS侧通过判断请求的request的referer头,来验证是否是合法请求,并作出相应的处理动作。

详细文档见:https://cloud.tencent.com/document/product/436/13319

流程图如下:

referer防盗链示意图

控制台效果如下

我们用以下referer设置来测试

例如设置

referer设置状态

测试结果

curl测试结果

看到referer还是有一定效果的,通过白名单的方式,拦截了非指定域名的请求,这种方式容易,但是也会被伪造,不能作为强验证功能。

所以我们需要再介绍一个功能:

签名方式防盗链

签名方法见https://cloud.tencent.com/document/product/436/7778

这需要根据腾讯云账号登录官网,从账号信息处提供的API KEY来进行封装,外部人员无法得到,安全性很高,只要key值不外泄,基本上无法被盗链。

签名流程示意图如下:

签名流程示意图

签名封装步骤

KeyTime = [Now];[Expires]
SignKey = HMAC-SHA1([SecretKey], KeyTime)
HttpString = [HttpMethod]\n[HttpURI]\n[HttpParameters]\n[HttpHeaders]\n
StringToSign = sha1\nKeyTime\nSHA1(HttpString)\n
Signature = HMAC-SHA1(SignKey, StringToSign)

可以使用COS的签名工具来自动生成签名串

https://cos5.cloud.tencent.com/static/cos-sign/

然后用curl执行put测试请求(示例):

dd if=/dev/zero of=onebox.test bs=50MB count=1

创建一个50MB的文件,并使用curl操作上传

curl -X PUT 'http://xxx-appid.cos.ap-beijing.myqcloud.com/1.jpg' -H 'Authorization:q-sign-algorithm=sha1&q-ak=AKIDjNskW7UnqiO3aSLm9KKD0b1Rr8DQIP8k&q-sign-time=1566369956;1566373556&q-key-time=1566369956;1566373556&q-header-list=&q-url-param-list=&q-signature=924830da300b9cb7d13d37082b02dd186db2049a' -H 'Content-Length: 50000000' -H 'Host: xxx-appid.cos.ap-beijing.myqcloud.com' -F "filename=@onebox.test" -voa

实际执行如下:

curl put上传

这里看到上传成功。并且用到了key的签名计算,安全风险基本为0。推荐使用。

如果觉得得到主账号的key具有一定的风险,实际上我们也可以通过子账号授权和临时账号的方式,进一步控制请求的操作行为和范围。

请参考如下文档,本文章暂不做深入说明。

子账号授权

https://cloud.tencent.com/document/product/598/11084

临时账号授权

https://cloud.tencent.com/document/product/436/9068

文章来源于腾讯云开发者社区,点击查看原文