又拍云可以通过设置 token 密钥,配合签名过期时间来控制资源内容的访问时限。
token 防盗链的目的是使得每个请求的 URL 都具有一定的 “时效性”,因此 URL 本身需要携带过期时间相关的信息,同时还需要确保这个过期时间,不能被恶意修改,因此采用 md5 算法,将密钥(通常是一个普通字符串)、过期时间、文件路径(过期时间和文件路径通常是有对应关系的,因此也参与 md5 的计算)等信息所计算的 md5 值也加入到 URL 中,CDN 节点在验证请求时,除了验证过期时间,同时还会验证该 md5 值是否匹配,对于不匹配的 md5,说明 URL 被篡改,即使请求未过期也需要禁止服务。
操作步骤:
1)在控制台配置秘钥,其中秘钥是一个 32 位以内的数字或英文组合;
设置 token 秘钥2)获取服务器时间 - UNIX TIME类型的 ,可通过 Linux 命令:date +%s,大陆的服务器,默认时间为北京时间
Linux 获取时间 工具网站获取3)利用 MD5 开始加密信息,加密格式为
秘钥&过期时间&URI
秘钥:第一步在 CDN 控制台配置好的
过期时间:即服务器时间+资源可被访问的时间,按秒为单位
URI:即要访问的资源路径(不需要携带服务名)
例如:mark520&1545271510&/404.jpg
秘钥
过期时间
资源路径
4)制作 token。
第三步结束后会得到一个 MD5 字符串,32位,取中间 8 位(13-20),加上过期时间就得到了 token。
第三步 MD5 之后的字符串:49c063b5621bbcc3b8337d9db7968709
中间八位 + 过期时间:bcc3b8331545271510
5)在URL后拼接 token,其中请求 URL 中的验证参数为 _upt
例如:http://iamge-blog.test.upcdn.net/404.jpg?_upt=bcc3b8331545271510
最终请求效果请注意:
请求 URI 的路径部分,如果有请求参数,计算的时候不包含 ? 及后面的 Query String;
如果有携带缩略图版本,则需要一并纳入 URI 路径进行计算;
如果 URI 里有中文或者空格,制作token的时候不需要 URL 编码
一个 token 对应一个访问资源,也就是 URI 和访问资源是对应的,如果写到某个目录,例如 /b,那么生成的 token 只对 b 目录有效,但是 b 目录下的具体的文件或者子目录还是无法访问的,依旧会提示 invalid user token;
开启了 token 防盗链是全站加密的;
返回错误码及信息为:{ code: "40310013", msg: "invalid user token." }
网友评论