CDN盗刷解决方案之referer拦截

更新时间:
复制为 MD 格式

背景信息

本文介绍如何通过分析访问数据识别流量盗刷特征,并提供多种防护方案的配置方法、适用场景及决策建议,帮助您有效控制因资源盗刷导致的流量成本激增。

识别流量盗刷特征

基础查询:离线日志

通过下载离线日志,查看相关时间段的访问日志,分析HTTP请求的详细信息,识别可疑的IP地址、User-Agent等。离线日志字段数据相对较少,如果您想查看更多数据,可使用实时日志功能。

获得离线日志文件后,您可以使用命令行工具来快速解析日志文件,提取访问量TOP10IP地址或User-Agent等信息,详情请参见CDN访问日志的分析方法

进阶查询:运营报表和实时日志

重要
  • 运营报表需定制后才会进行生产统计分析,如果您之前已配置过实时日志推送或订阅运营报表,您可以查看到过去的日志信息。运营报表为CDN自带免费功能,无需额外付费。

  • 实时日志需要开通日志服务(SLS)并成功投递日志后,才会生成实时日志。实时日志为付费功能,具体计费请参见计费详情

  • 实时日志和运营报表均需要提前配置,如果您在产生高额账单之前未配置过这两项功能,只能通过离线日志进行历史数据分析。

运营报表

定制运营报表后,您可以看到用户访问的PV/UV地区和运营商域名排行热门referer热门URL回源热门URLTop客户端IP等报表内容。具体操作请参见定制和订阅运营报表

image

实时日志

如果您想查询更多日志信息,例如RefererURI等信息,需要开通日志服务SLS,将采集到的实时日志实时推送至日志服务。开启实时日志,并成功投递日志后,根据日志投递条数产生计费。

  1. 参考配置实时日志推送为需要分析用户访问数据的CDN加速域名配置实时日志推送。

  2. 在实时日志功能页面找到需要分析日志的Project名称,单击日志分析

    image

  3. 进入日志分析页面,在右上角过滤时间段,单击左侧原始日志页签,找到refer_domain字段,您可以看到由高到低排列的Referer信息。

    image

拦截策略

Referer处理

如果出现大量的空Referer流量,可以使用边缘安全加速ESA进行处理。

对于允许空Referer访问的业务,可以配置空Referer进行JS挑战,拦截盗刷流量。对于不允许空Referer访问的业务,可以直接拦截空Referer请求,禁止其访问。

Referer进行JS挑战

  1. ESA控制台选择站点管理,在站点列单击目标站点。

  2. 在左侧导航栏,选择安全防护 > WAF

  3. 单击自定义规则页签,进入自定义规则页签,单击新增规则

    • 填写规则名称

    • 如果请求匹配以下规则...区域设置要匹配的用户请求特征,请求匹配规则参见规则表达式的组成

    • 则执行…区域设置当请求命中该规则时,要执行的防护动作,详细信息请参见执行动作说明

  4. 单击确定

  • 匹配规则的位置,点击编辑表达式,在输入框中输入:(exists(http.referer) and len(http.referer) lt 1 and http.host eq "xxxxxx.aliyun.com") or (not exists(http.referer) and http.host eq "xxxxxx.aliyun.com") 其中xxxxxx.aliyun.com替换成实际需要配置的域名

  • 执行配置调整成JS挑战

image

Referer拦截

  • 场景一:业务不允许任何空Referer请求 在ESA中配置WAF自定义规则,拦截所有空Referer请求。 配置路径:站点 > 安全防护 > WAF > 自定义规则。

    表达式为:(exists(http.referer) and len(http.referer) lt 1) or (not exists(http.referer))

    image

  • 场景二:业务需要允许部分空Referer请求(例如首页访问) 配置WAF规则拦截空Referer请求,同时添加白名单规则放行特定路径(如首页)。操作步骤如下:

    1. 配置自定义规则拦截空Referer 配置路径:站点 > 安全防护 > WAF > 自定义规则。

      image

    2. 配置白名单规则放行特定路径(此处以首页为例) 配置路径:站点 > 安全防护 > WAF > 白名单规则。

      表达式为:(http.host in {"your hostname"} and http.request.uri in {"/"})image

H5、小程序、APP、客户端场景

此场景与“小程序+APP”类似:先排除小程序和 APP 的请求,再对剩余访问设置允许的 Referer。

  1. 配置规则引擎,将 APP、客户端程序、小程序使用的 UA 与其他 UA 区分开。此处以支付宝小程序和java-1.1为例。

    image

  2. 配置 Referer 防盗链白名单,针对访问限制为仅允许指定的 Referer 访问。

    image

H5、APP、客户端程序场景

APP/客户端程序不像浏览器存在引用逻辑,发起请求一般为直接构造,因此通常不包含 Referer(非绝对)。当业务场景符合该情况时,若直接通过 Referer 防盗链封禁所有空 Referer 请求,可能影响正常业务访问,需在限定条件后再配置。

解决方案:明确 APP、客户端程序在构造请求时除 Referer 外的特征,例如使用较特殊的 UA(相对于浏览器 UA)。以下以客户端程序 UA 为java-1.1为例。

  1. 配置规则引擎,将 APP、客户端程序使用的 UA 与其他 UA 区分开。

    image

  2. 配置 Referer 防盗链白名单,针对网页访问限制为仅允许指定的 Referer 访问。

    image

小程序、APP、客户端场景

小程序的 UA 较固定,但不同厂商的小程序有所不同,常见如下:

  • 微信小程序:UA 中关键标识为MicroMessenger/x.x.x

  • 支付宝小程序:UA 中关键标识为AlipayClient/x.x.x+ Nebula

  • 百度小程序:UA 中关键标识为BaiduApp/x.x.xswan

  • 字节(抖音):UA 中关键标识为BytedanceWebview/ Douyin

配置时需先确认自身业务主要使用哪类小程序,再进行相应配置。解决方案同样通过规则引擎进行匹配。

  1. 配置规则引擎,将 APP、客户端程序、小程序使用的 UA 与其他 UA 区分开。此处以支付宝小程序和java-1.1为例。

    image

  2. 配置 Referer 防盗链白名单,针对访问限制为仅允许指定的 Referer 访问。由于小程序和 APP 一般无实际 Referer,可自行编造一个不存在的 Referer 作为白名单进行全局限制。

    image

APP、客户端场景

纯 APP、客户端程序场景下,若程序本身的 UA 访问频繁,需排查程序本身是否存在问题。因此当对应访问的 UA 并非程序 UA 时,解决方案与H5、APP、客户端程序场景一致。

  1. 配置规则引擎,将 APP、客户端程序使用的 UA 与其他 UA 区分开。

    image

  2. 配置 Referer 防盗链白名单,针对访问限制为仅允许指定的 Referer 访问。由于没有实际 Referer,可自行编造一个不存在的 Referer 作为白名单,对全局进行限制。

    image

大文件传输场景

大文件传输通常具有传输耗时长、请求频率低、缺乏明显访问特征等特点,较难防护。因此在大文件被访问时,即使访问频率不高,消耗的流量也可能较大。

解决方案一:单请求限速

配置单请求限速,用于限制非 APP/小程序等客户端的请求。

  1. 配置规则引擎,用于识别客户端特征。一般建议根据客户端 UA 识别,此处以支付宝小程序和java-1.1的 APP 为例。

    image

  2. 设置单请求限速,并关联上述规则。

    image

解决方案二:鉴权防护

若服务端可做改造并增加鉴权,可更有效地在不限制用户下载速度的前提下做好防护。分为 URL 鉴权和远程鉴权两种方式。

URL 鉴权

此方案需先在服务器侧对大文件 URL 进行改造,使用 CDN 的鉴权逻辑生成临时链接。鉴权逻辑请参见:鉴权方式A说明。服务端完成改造后,再在 CDN 控制台配置对应的鉴权。

image

远程鉴权

此方案无需对访问链接进行改造,只需在服务端增加一台用于鉴权的服务器,通过识别客户端特征信息判断是否合法。

  1. 配置一台远程鉴权服务器,鉴权逻辑需您自行设计。一般建议可按单客户端访问次数控制,例如对每个客户端 IP 进行 24 小时计数,若计数值超过阈值则拒绝访问。

  2. 在 CDN 控制台配置对应的鉴权服务器地址,并将客户端 IP 及您需要的客户端信息通过参数传递给鉴权服务器。

    image

恶意Referer拦截

通过盗刷特征识别,确认哪些Referer是非法的,如果存在非法Referer,使用Referer黑名单进行拦截。

  1. 登录CDN控制台

  2. 在左侧导航栏,单击域名管理

  3. 域名管理页面,找到目标域名,单击操作列的管理

  4. 在指定域名的左侧导航栏,单击访问控制

  5. Referer黑/白名单页签,单击修改配置

  6. Referer类型选择黑名单,在规则中填写非法的Referer名单,勾选忽略scheme

  7. 根据业务情况决定是否勾选 允许空Referer

    • 勾选(允许):如果您的用户会直接访问网站,或者您的移动App需要访问资源,必须勾选此项,否则会误伤正常用户。

    • 不勾选(禁止):如果您的资源(如图片)只应被您自己的网页引用,且没有直接访问的场景,可以不勾选以增强防护。

  8. 单击确定,完成配置。

控制访问频次

如果无法确认Referer是否合法,无法设置Referer黑名单,此时可以使用ESA频次控制功能限制访问频次,减少恶意流量。

  1. ESA控制台,选择站点管理,单击目标站点操作列的配置WAF

  2. 在左侧导航栏,选择安全防护 > WAF

  3. WAF页面,选择频次控制规则,单击新增规则,根据界面提示填写规则信息。

    主机名为指定的域名,统计项为客户端IP频次为您实际业务访问的频率阈值(建议可以设置成实际访问阈值的1.2-2倍),执行操作选择仅对超过频次的请求执行拦截

    image

  4. 单击确定