访问控制

设置防盗链

设置Referer黑白名单

原理介绍

CDN获取HTTP请求中的 referer header,同配置中的Referer黑名单/白名单进行匹配,对匹配上的请求进行拒绝/放过。

应用场景

  • 对于通过验证的域名,用户需要设置防盗链保护用户的网站不会被其他网站盗链。

  • CDN支持用户自己配置referer黑白名单,用户可在域名详情页的“防盗链”页签中设置防盗链。

  • 用户最多可配置100个Referer黑白名单。

  • 系统默认不开启防盗链功能,需要用户自己配置。

操作步骤

  1. “CDN域名管理”页点击“域名地址”进入“CDN域名详情”页。

  2. 点击“访问控制”页签,进入防盗链设置页面。

    说明1:默认允许Referer为空。当请求Referer字段为空或无Referer时,CDN正常返回请求信息。空Referer与Referer黑白名单是分别配置,互不干涉。

    • 当配置了“允许Referer为空”和黑名单时,空Referer可以访问;
    • 当配置了“不允许Referer为空”和黑名单时,空Referer不能访问;
    • 当配置了“允许Referer为空”和白名单时,空Referer可以访问;
    • 当配置了“不允许Referer为空”和白名单时,空Referer不能访问。

    说明2:

    • Referer暂不支持路径中有多个通配符,仅支持*.a.com/*形式的模糊匹配。
    • Referer不区分协议设置,前缀不再需要输入http:// 或 https://,如果要配置http://zoe.baidu.com的Referer地址只需要输入zoe.baidu.com即可。
  3. 选择“白名单生效”或者“黑名单生效”,可设置域名对应的referer黑白名单。

    注意: 点击“编辑”后可删除域名对应的全部Referer的黑白名单,数据清除后不可被还原,请谨慎操作。

设置IP黑白名单

原理介绍

CDN获取客户端IP,同配置中的IP黑/白名单进行匹配,对匹配上的客户端请求进行拒绝/放过。

应用场景

  • 对于通过验证的域名,用户需要设置IP黑白名单保护用户的网站不会被其他网站盗链。

  • CDN支持用户自己配置IP黑白名单,用户可在域名详情页的“访问控制”页签中设置IP黑白名单。

  • 用户最多可配置100个IP黑白名单。

  • 系统默认不开启IP黑白名单功能,需要用户自己配置。

操作步骤

  1. “CDN域名管理”页点击“域名地址”进入“CDN域名详情”页。

  2. 点击“访问控制”页签,进入IP黑白名单设置页面。

  3. 选择“白名单生效”或者“黑名单生效”,可设置域名对应的IP黑白名单。

  4. 删除IP地址后会清除域名对应的全部IP的黑白名单,数据清除后不可被还原,请谨慎操作。

高级鉴权

应用场景

为防止客户源站内容被盗用,CDN提供防盗链功能,用户可通过配置Referer和IP的黑白名单来保护源站资源。然而由于Referer内容可被伪造,实际使用中仍存在盗链的隐患。为了更好地保护源站资源,CDN支持加密源站URL的功能,通过鉴权方式来正确响应合法请求、拒绝非法请求。

原理概述

URL高级鉴权是百度智能云CDN加速节点和客户源站配合实现的一种更加安全可靠的源站资源防盗方法。CDN客户站点提供加密URL给用户,当用户使用加密后的URL对CDN节点发起请求时,加速节点会验证加密URL的权限信息以判断请求的合法性。请求合法时正常响应,请求不合法时拒绝请求,以保护源站资源。

URL鉴权方式

百度智能云CDN支持A类、B类、C类三种鉴权方式,用户可以根据业务需要选择不同的鉴权方式对URL进行加密,实现对源站资源的保护。

A类鉴权方式

原理说明

用户访问加密URL构成:http://DomainName/Filename?auth_key=timestamp-rand-uid-md5hash

鉴权字段解释

字段 描述
DomainName CDN客户站点的域名
timestamp 失效时间,整形正数,固定长度10,值为1970年1月1日以来的当前时间秒数 + 过期时间秒数。用来控制失效时间,过期时间由客户端设置,若设置为1800s,则用户访问CDN的时间超过1800s后,该鉴权失效。
rand 随机数,通常设置为0。
uid userID。
md5hash 通过md5算法计算出来的验证串,数字0-9和小写英文字母a-z混合组成,固定长度32。
Filename 实际回源访问的URL,鉴权时Filename需以/开头。
SecretKey 用户设定的鉴权密钥,如bdcloud666。

CDN服务器拿到请求后,首先会判断请求中的timestamp是否小于当前时间,如果timestamp小于当前时间,则认为过期失效并返回HTTP 403错误。如果timestamp大于当前时间,则以sstring方式构造出一个字符串(参考以下sstring构造方式)。然后使用md5算法算出HashValue,并和用户请求中带来的md5hash进行对比。结果一致则认为鉴权通过并返回文件,否则鉴权失败返回HTTP 403错误。

HashValue计算方式如下:

  1. sstring = “URI-Timestamp-rand-uid-SecretKey”(URI是用户请求对象相对地址,不包含参数,如/Filename,其中SecretKey字段用户可以自行设置。)
  2. HashValue = md5sum(sstring)

示例说明

  1. 通过req_auth请求对象:http://opencdn.example.com/authentication/test/2F.html
  2. 密钥设为:bdcloud666(由用户自行设置)
  3. 鉴权配置文件失效日期为:2017年6月30日00:00:00,计算出来的秒数为1498752000。
  4. CDN服务器构造一个用于计算HashValue的签名字符串:“/authentication/test/2F.html -1498752000-0-0-bdcloud666”;
  5. CDN服务器根据该签名字符串计算HashValue:
    HashValue = md5sum(“/authentication/test/2F.html-1498752000-0-0-bdcloud666”) = 89518343a306f93173783a260bb364f0
  6. 请求时URL为:http://opencdn.example.com/authentication/test/2F.html?auth_key=1498752000-0-0-89518343a306f93173783a260bb364f0

如果计算出来的HashValue与用户请求中带的md5hash值(89518343a306f93173783a260bb364f0)一致,则鉴权通过。

配置示例

"anti_hot_link":{"antiType": "typeA", "secretKey": "bdcloud666", "newsecretKey": "opencdn666","secureFile": "/test.txt", "auth_arg": "auth_key"}

B类鉴权方式

原理说明

用户访问加密URL构成:http://DomainName/timestamp/md5hash/FileName

当鉴权通过时,实际回源的URL是:http://DomainName/FileName

鉴权字段解释

字段 描述
DomainName CDN客户站点的域名
timestamp 失效时间,即用户定义的有效访问时间,格式为YYYYMMDDHHMM。默认设置有效时间为1800s,即用户访问客户源服务器时间超过1800s后,该鉴权失效。例如用户设置访问时间2017-06-30 10:00:00,链接在2017-06-30 10:30:00失效。
md5hash 通过md5算法计算出来的验证串,数字0-9和小写英文字母a-z混合组成,固定长度32。
Filename 实际回源访问的URL,鉴权时Filename需以/开头。
SecretKey 用户设定的鉴权密钥,如bdcloud666。

示例说明

  1. 回源请求对象:http://opencdn.example.com/4/44/obhqonkjtlhquiy93.mp3
  2. 密钥设为:bdcloud666(用户自行设置)
  3. 用户访问客户源服务器时间为 201706301000(格式为:YYYYMMDDHHMM)
  4. CDN服务器构造一个用于计算md5hash的签名字符串:bdcloud666201706301000/4/44/obhqonkjtlhquiy93.mp3
  5. CDN服务器根据该签名字符串计算md5hash:
    md5hash = md5sum("bdcloud666201706301000/4/44/ obhqonkjtlhquiy93.mp3") = de04628d413e4261405091b731396901
  6. 请求CDN时URL:http://opencdn.example.com/201706301000/de04628d413e4261405091b731396901/4/44/ obhqonkjtlhquiy93.mp3

如果计算出来的md5hash与用户请求中带的md5hash值(de04628d413e4261405091b731396901)一致,则鉴权通过