使用Token防盗链实现发布内容私有化

技术支持发表于:2017年03月13日 20:05:37更新于:2017年03月15日 16:00:37

又拍云是一家以内容分发网络(CDN)为核心,进行网站、App 等文件内容快速分发的云服务商,推出直播、点播、电商、游戏、音频、移动 App 等多种细分场景的场景化 CDN 解决方案。用户可以使用又拍云来加速分发保存在又拍云存储空间里的文档、图片、音视频等文件。

很多用户向自己的终端用户提供内容分发时,希望能够:

  • 只允许特定用户下载

  • 保证传输的数据安全

  • 杜绝额外的流量成本

随着需求的加深,用户还希望能够:

  • 限制其终端用户执行下载操作的日期时间段

  • 限制发起下载请求的来源IP地址范围

使用 Token 防盗链就可以帮助用户实现发布内容私有化。

什么是 Token 防盗链

Token 防盗链结合智能标记和公钥加密技术,是业界最安全的防盗链之一。用户可设置签名过期时间来控制文件的访问时限。Token 防盗链的目的是使得每个请求的 URL 都具有一定的“时效性”,因此 URL 本身需要携带过期时间相关的信息,同时确保这个过期时间不能被恶意修改。

Token 防盗链采用 md5 算法,将密文(通常是一个普通字符串)、过期时间、文件路径(过期时间和文件路径通常是有对应关系的,因此也参与 md5 的计算)等信息所计算的 md5 值也加入到 URL 中,CDN 节点在验证请求时,除了验证过期时间,同时还会验证该 md5 值是否匹配,对于不匹配的 md5,说明 URL 被篡改,即使请求未过期也需要禁止服务。

实现原理

首先,为你的URL设定加密字符串,该 Token 密钥可以在 CDN 管理控制后台进行配置;此时,客户端的访问外链将从 http://xxx.b0.upaiyun.com/path/to/a.jpg 的形式变为 http://xxx.b0.upaiyun.com/path/to/a.jpg?_upt=abcdefgh1370000600;又拍云的 CDN 节点则会根据 URL 的加密形式,取出对应的过期时间,和当前服务器时间进行比较,确认请求是否过期,过期的话,则直接拒绝;如果时间未过期,CDN 节点将根据约定的签名算法和密文,计算后的值和 URL 中的原始加密串进行比较;通过之后,请求会被认为是合法的。不合法的请求可以采取禁止访问。

如何使用Token防盗链让内容私有化
前期准备

注册又拍云账号,创建空间

配置引导

登录 又拍云管理控制台

第一步,点击「服务」,选择「全网加速」,点击「配置」。

第二步,点击「防盗链」,选择最下面Token防盗链「ON/OFF」按钮即可开始配置:

第三步,在「Token防盗链管理」中根据自己的签名算法来进行密钥配置:

签名方式:

_upt = MD5(token 密钥 & etime & URI){中间 8 位} + etime

第四步,验证Token防盗链功能,根据客户端程序和服务端进行CDN层的配置校验。

示例

以图片启用Token防盗链实现私有化为例,示例如下:

设置图片链接 http://<bucket>/dir/pic.jpg  10 分钟有效

当前 Unix 时间 = 1370000000

etime = 1370000000 + 600 = 1370000600

URI = '/dir/pic.jpg'

sign = MD5(token 密钥&etime&URI) = xxxxxxxxxxxxabcdefghyyyyyyyyyyyy

_upt = MD5(token 密钥&etime&URI){中间 8 位} + etime = abcdefgh1370000600


该签名拼接在 URL 地址或用户 Cookie 中,均可起到防盗链作用:

URL: http://<bucket>/dir/pic.jpg?_upt=abcdefgh1370000600

Cookie: _upt=abcdefgh1370000600;

用上述方式即可通过又拍云平台实现内容发布私有化。