222
产品说明
域名
域名产品简介
域名价格
域名选购指南
域名用户指南
云虚拟主机
虚拟主机产品简介
虚拟主机选购指南
虚拟主机快速建站指引
虚拟主机控制台使用指南
云服务器
云服务器产品简介
云服务器计费规则
云服务器购买指导
云服务器控制台使用指南
云服务器基础操作
建站教程
服务器租用
服务器产品简介
服务器计费标准
服务器购买指导
服务器控制台使用说明
服务器托管
托管产品简介
托管计费标准
托管选购指南
托管控制台使用指南
智能建站
智能建站产品简介
智能建站计费规则
智能建站快速入门
SSL证书
SSL选购指南
SLL证书安装
商标注册
商标产品简介
商标注册申请
CDN加速
CDN产品简介
CDN使用指南
云数据库
云数据库产品简介
云数据库计费规则
云数据库购买指导
云数据库快速入门
云数据库连接实例
云数据库控制台使用指南
负载均衡
负载均衡产品简介
负载均衡产品价格
负载均衡购买指南
负载均衡用户指南
负载均衡快速入门
负载均衡实践操作
对象存储
对象存储产品简介
对象存储控制台使用指南
CDN时间戳防盗链

操作说明

登录,进入控制台->CDN->域名管理->配置->访问控制


1.png


时间戳防盗链修改配置


1.png


时间戳防盗链:默认为关闭,开启时,会同时生成两组可用的key,用户需先按照文档说明在代码中将Key配置进您的URL,再进行格式检查,然后确认开启;还可以自定义输入KEY,支持输入备用KEY且不能与主KEY相同;同时需要输入检查URL,以保证鉴权服务正常可用,以免影响服务。

算法说明

基于时间戳的防盗链是通过对时间有关的字符串进行签名,将时间、签名通过一定的方式传递给 CDN 服务器作为判定依据,CDN 边缘节点根据约定的算法判断来访URL是否有访问权限。

通过,执行下一步;不通过,响应 HTTP status code 403。

若同时配置了 Referer、UA防盗链、时间戳防盗链,有一项不满足条件,即为不通过,响应 403 。

签名参数

  • T:URL 过期时间。按 unix_time 的 16进制小写形式表示。 如 2015-08-01 00:00:00 –> 1438358400 –> 55bb9b80
  • key:在开启时间戳防盗链时,可以由使用:(控制台->CDN->域名管理->访问控制->时间戳防盗链),使用其中一个即可。也可以自行使用算法生成。
  • path:访问资源的 URL 中的路径部分,例如:访问的URL为 http://xxx.yyy.com/DIR1/dir2/vodfile.mp4?v=1.1,则 path = /DIR1/dir2/vodfile.mp4(注意不含 querystring 部分)

签名算法

  • 签名原始字符串 S = key + url_encode(path) + T 。斜线 / 不编码。
  • 签名 SIGN = md5(S).to_lower(),to_lower 指将字符串转换为小写;

注:本文所提到的 url_encode 算法。

签名参数传递方式

作为URL查询参数。

例如原始访问的URL为: http://xxx.yyy.com/DIR1/dir2/vodfile.mp4?v=1.1

最终形成的访问URL为: http://xxx.yyy.com/DIR1/dir2/vodfile.mp4?v=1.1&sign=<SIGN>&t=<T>

  • 签名参数 sign、 t ,sign 在前,t 在后;
  • <SIGN><T> 替换为对应的值, 实际url中不含<> ;

访问url

访问 url 的 path 部分也需要 url_encode,其算法与签名时使用 url_encode 算法一致。斜线 / 不编码。

访问 url 为:

scheme+"://"+host+url_encode(path)+query_part

http://xxx.yyy.com/DIR1/dir2/vodfile.mp4?v=1.1&sign=19eb212771e87cc3d478b9f32d6c7bf9&t=55bb9b80
http://xxx.yyy.com/DIR1/%E4%B8%AD%E6%96%87/vodfile.mp4?v=1.2&sign=6356bca0d2aecf7211003e468861f5ea&t=55bb9b80


注:

  1. 本文所提到的 url_encode 算法,斜线 / 不编码。
  2. 访问 url 的 path 部分推荐按 url_encode 编码,如下例。
示例
例1:

URL http://xxx.yyy.com/DIR1/dir2/vodfile.mp4?v=1.1 ,假设 key = 12345678 ;过期时间为 2015-08-01 00:00:00 ,即 1438358400 ,也就是 T = 55bb9b80S = 12345678/DIR1/dir2/vodfile.mp455bb9b80SIGN = 19eb212771e87cc3d478b9f32d6c7bf9 , 访问 url 为:

http://xxx.yyy.com/DIR1/dir2/vodfile.mp4?v=1.1&sign=19eb212771e87cc3d478b9f32d6c7bf9&t=55bb9b80

之后将 url 地址填写在上图中的 检查url 处验证。

例2:

URL http://xxx.yyy.com/DIR1/中文/vodfile.mp4?v=1.2 ,假设 key = 12345678T = 55bb9b80S = 12345678/DIR1/%E4%B8%AD%E6%96%87/vodfile.mp455bb9b80SIGN = 6356bca0d2aecf7211003e468861f5ea ,访问 url 为:

http://xxx.yyy.com/DIR1/%E4%B8%AD%E6%96%87/vodfile.mp4?v=1.2&sign=6356bca0d2aecf7211003e468861f5ea&t=55bb9b80

之后将 url 地址填写在上图中的 检查url 处验证。

服务端验证

服务端拿到原始的 url ,直接解析出 host, path, sign, t ,再签名。

算法: S = key + path + t,SIGN = md5(S).to_lower()

注意此处没有 url_encode 操作。

原始的 url 指未经 url_decoded 的内容。

以 nginx 为例说明:

浏览器发出实际请求url: http://example.com/foobar/hello%20world

nginx变量 $uri: http://example.com/foobar/hello world

nginx变量 $request_uri: http://example.com/foobar/hello%20world

原始的 url 内容和 $request_uri 内容一致。

要求验证签名时使用 $request_uri ,此值为原始值,内容是正确的经过 url encode 的内容,所以 path 不用编码。

服务端不能使用 $uri 获取各参数,然后再调用 url_encode 来获取待签名的 path。path url_encode 后再 url_decode,获得的内容与原 path 可能不一样。

http://example.com/foobar/hello+world
http://example.com/foobar/hello%2Bworld
http://example.com/foobar/hello%2bworld

以上三个url都是合法的访问同一资源的链接。相同 key 、T,执行签名后会有三个不同的值。 %2b url_decode 再 url_encode 可能得到 %2B,导致签名不一致。

这条帮助是否解决了您的问题? 已解决 未解决

提交成功!非常感谢您的反馈,我们会继续努力做到更好! 很抱歉未能解决您的疑问。我们已收到您的反馈意见,同时会及时作出反馈处理!