背景信息
本文介绍如何通过分析访问数据识别流量盗刷特征,并提供多种防护方案的配置方法、适用场景及决策建议,帮助您有效控制因资源盗刷导致的流量成本激增。
识别流量盗刷特征
基础查询:离线日志
通过下载离线日志,查看相关时间段的访问日志,分析HTTP请求的详细信息,识别可疑的IP地址、User-Agent等。离线日志字段数据相对较少,如果您想查看更多数据,可使用实时日志功能。
获得离线日志文件后,您可以使用命令行工具来快速解析日志文件,提取访问量TOP10的IP地址或User-Agent等信息,详情请参见CDN访问日志的分析方法。
进阶查询:运营报表和实时日志
运营报表需定制后才会进行生产统计分析,如果您之前已配置过实时日志推送或订阅运营报表,您可以查看到过去的日志信息。运营报表为CDN自带免费功能,无需额外付费。
实时日志需要开通日志服务(SLS)并成功投递日志后,才会生成实时日志。实时日志为付费功能,具体计费请参见计费详情。
实时日志和运营报表均需要提前配置,如果您在产生高额账单之前未配置过这两项功能,只能通过离线日志进行历史数据分析。
拦截策略
空Referer处理
如果出现大量的空Referer流量,可以使用边缘安全加速ESA进行处理。
对于允许空Referer访问的业务,可以配置空Referer进行JS挑战,拦截盗刷流量。对于不允许空Referer访问的业务,可以直接拦截空Referer请求,禁止其访问。
空Referer进行JS挑战
在ESA控制台选择站点管理,在站点列单击目标站点。
在左侧导航栏,选择。
单击自定义规则页签,进入自定义规则页签,单击新增规则。
单击确定。
匹配规则的位置,点击编辑表达式,在输入框中输入:
(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挑战

空Referer拦截
场景一:业务不允许任何空Referer请求 在ESA中配置WAF自定义规则,拦截所有空Referer请求。 配置路径:站点 > 安全防护 > WAF > 自定义规则。
表达式为:
(exists(http.referer) and len(http.referer) lt 1) or (not exists(http.referer))
场景二:业务需要允许部分空Referer请求(例如首页访问) 配置WAF规则拦截空Referer请求,同时添加白名单规则放行特定路径(如首页)。操作步骤如下:
配置自定义规则拦截空Referer 配置路径:站点 > 安全防护 > WAF > 自定义规则。

配置白名单规则放行特定路径(此处以首页为例) 配置路径:站点 > 安全防护 > WAF > 白名单规则。
表达式为:
(http.host in {"your hostname"} and http.request.uri in {"/"})
H5、小程序、APP、客户端场景
此场景与“小程序+APP”类似:先排除小程序和 APP 的请求,再对剩余访问设置允许的 Referer。
配置规则引擎,将 APP、客户端程序、小程序使用的 UA 与其他 UA 区分开。此处以支付宝小程序和
java-1.1为例。
配置 Referer 防盗链白名单,针对访问限制为仅允许指定的 Referer 访问。

H5、APP、客户端程序场景
APP/客户端程序不像浏览器存在引用逻辑,发起请求一般为直接构造,因此通常不包含 Referer(非绝对)。当业务场景符合该情况时,若直接通过 Referer 防盗链封禁所有空 Referer 请求,可能影响正常业务访问,需在限定条件后再配置。
解决方案:明确 APP、客户端程序在构造请求时除 Referer 外的特征,例如使用较特殊的 UA(相对于浏览器 UA)。以下以客户端程序 UA 为java-1.1为例。
配置规则引擎,将 APP、客户端程序使用的 UA 与其他 UA 区分开。

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

小程序、APP、客户端场景
小程序的 UA 较固定,但不同厂商的小程序有所不同,常见如下:
微信小程序:UA 中关键标识为
MicroMessenger/x.x.x支付宝小程序:UA 中关键标识为
AlipayClient/x.x.x+ Nebula百度小程序:UA 中关键标识为
BaiduApp/x.x.x或swan字节(抖音):UA 中关键标识为
BytedanceWebview/ Douyin
配置时需先确认自身业务主要使用哪类小程序,再进行相应配置。解决方案同样通过规则引擎进行匹配。
配置规则引擎,将 APP、客户端程序、小程序使用的 UA 与其他 UA 区分开。此处以支付宝小程序和
java-1.1为例。
配置 Referer 防盗链白名单,针对访问限制为仅允许指定的 Referer 访问。由于小程序和 APP 一般无实际 Referer,可自行编造一个不存在的 Referer 作为白名单进行全局限制。

APP、客户端场景
纯 APP、客户端程序场景下,若程序本身的 UA 访问频繁,需排查程序本身是否存在问题。因此当对应访问的 UA 并非程序 UA 时,解决方案与H5、APP、客户端程序场景一致。
配置规则引擎,将 APP、客户端程序使用的 UA 与其他 UA 区分开。

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

大文件传输场景
大文件传输通常具有传输耗时长、请求频率低、缺乏明显访问特征等特点,较难防护。因此在大文件被访问时,即使访问频率不高,消耗的流量也可能较大。
解决方案一:单请求限速
配置单请求限速,用于限制非 APP/小程序等客户端的请求。
配置规则引擎,用于识别客户端特征。一般建议根据客户端 UA 识别,此处以支付宝小程序和
java-1.1的 APP 为例。
设置单请求限速,并关联上述规则。

解决方案二:鉴权防护
若服务端可做改造并增加鉴权,可更有效地在不限制用户下载速度的前提下做好防护。分为 URL 鉴权和远程鉴权两种方式。
URL 鉴权
此方案需先在服务器侧对大文件 URL 进行改造,使用 CDN 的鉴权逻辑生成临时链接。鉴权逻辑请参见:鉴权方式A说明。服务端完成改造后,再在 CDN 控制台配置对应的鉴权。

远程鉴权
此方案无需对访问链接进行改造,只需在服务端增加一台用于鉴权的服务器,通过识别客户端特征信息判断是否合法。
配置一台远程鉴权服务器,鉴权逻辑需您自行设计。一般建议可按单客户端访问次数控制,例如对每个客户端 IP 进行 24 小时计数,若计数值超过阈值则拒绝访问。
在 CDN 控制台配置对应的鉴权服务器地址,并将客户端 IP 及您需要的客户端信息通过参数传递给鉴权服务器。

恶意Referer拦截
通过盗刷特征识别,确认哪些Referer是非法的,如果存在非法Referer,使用Referer黑名单进行拦截。
登录CDN控制台。
在左侧导航栏,单击域名管理。
在域名管理页面,找到目标域名,单击操作列的管理。
在指定域名的左侧导航栏,单击访问控制。
在Referer黑/白名单页签,单击修改配置。
Referer类型选择黑名单,在规则中填写非法的Referer名单,勾选忽略scheme。
根据业务情况决定是否勾选 允许空Referer。
勾选(允许):如果您的用户会直接访问网站,或者您的移动App需要访问资源,必须勾选此项,否则会误伤正常用户。
不勾选(禁止):如果您的资源(如图片)只应被您自己的网页引用,且没有直接访问的场景,可以不勾选以增强防护。
单击确定,完成配置。
控制访问频次
如果无法确认Referer是否合法,无法设置Referer黑名单,此时可以使用ESA的频次控制功能限制访问频次,减少恶意流量。
在ESA控制台,选择站点管理,单击目标站点操作列的。
在左侧导航栏,选择。
在WAF页面,选择频次控制规则,单击新增规则,根据界面提示填写规则信息。
主机名为指定的域名,统计项为客户端IP,频次为您实际业务访问的频率阈值(建议可以设置成实际访问阈值的1.2-2倍),执行操作选择仅对超过频次的请求执行和拦截。

单击确定。









