CDN时间戳防盗链 |
操作说明登录,进入控制台->CDN->域名管理->配置->访问控制 时间戳防盗链修改配置 时间戳防盗链:默认为关闭,开启时,会同时生成两组可用的key,用户需先按照文档说明在代码中将Key配置进您的URL,再进行格式检查,然后确认开启;还可以自定义输入KEY,支持输入备用KEY且不能与主KEY相同;同时需要输入检查URL,以保证鉴权服务正常可用,以免影响服务。 算法说明基于时间戳的防盗链是通过对时间有关的字符串进行签名,将时间、签名通过一定的方式传递给 CDN 服务器作为判定依据,CDN 边缘节点根据约定的算法判断来访URL是否有访问权限。 通过,执行下一步;不通过,响应 HTTP status code 403。 若同时配置了 Referer、UA防盗链、时间戳防盗链,有一项不满足条件,即为不通过,响应 403 。 签名参数
签名算法
注:本文所提到的 url_encode 算法。 签名参数传递方式作为URL查询参数。 例如原始访问的URL为: 最终形成的访问URL为:
访问url访问 url 的 path 部分也需要 url_encode,其算法与签名时使用 url_encode 算法一致。斜线 / 不编码。 访问 url 为: scheme+"://"+host+url_encode(path)+query_part 如
注:
示例例1: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/%E4%B8%AD%E6%96%87/vodfile.mp4?v=1.2&sign=6356bca0d2aecf7211003e468861f5ea&t=55bb9b80 之后将 url 地址填写在上图中的 检查url 处验证。 服务端验证服务端拿到原始的 url ,直接解析出 host, path, sign, t ,再签名。 算法: 注意此处没有 url_encode 操作。 原始的 url 指未经 url_decoded 的内容。 以 nginx 为例说明: 浏览器发出实际请求url: nginx变量 $uri: nginx变量 $request_uri: 原始的 url 内容和 $request_uri 内容一致。 要求验证签名时使用 $request_uri ,此值为原始值,内容是正确的经过 url encode 的内容,所以 path 不用编码。 服务端不能使用 $uri 获取各参数,然后再调用 url_encode 来获取待签名的 path。path url_encode 后再 url_decode,获得的内容与原 path 可能不一样。
以上三个url都是合法的访问同一资源的链接。相同 key 、T,执行签名后会有三个不同的值。 %2b url_decode 再 url_encode 可能得到 %2B,导致签名不一致。 |