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

恶意Referer拦截

通过盗刷特征识别,确认哪些Referer是非法的,如果存在非法Referer,使用Referer黑名单或者边缘脚本(特定URL路径下执行Referer拦截逻辑)进行拦截。

Referer黑名单

  1. 登录CDN控制台

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

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

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

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

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

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

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

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

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

边缘脚本拦截

如果需要在特定URL路径下执行复杂的Referer拦截逻辑,可以使用EdgeScript

  1. 登录CDN控制台

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

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

  4. 单击EdgeScript自定义策略

  5. 模拟环境页签,单击添加规则,配置边缘脚本规则。

    规则代码中编写逻辑,打开启用状态。例如,仅当访问/videos/目录下的资源且Referer来自bad-domain.com时才拦截。

    if and(match_re($uri, '/videos/'), match_re($http_referer, 'bad-domain.com')) {
        exit(403)
    }
  6. 单击发布到模拟环境,在模拟环境中,测试规则。

  7. 测试完成后,单击发布所有规则到生产环境,将模拟环境规则发布至生产环境。

    重要

    模拟环境规则发布到生产环境后,模拟环境的规则自动被清空。

    发布所有规则到生产环境

控制访问频次

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

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

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

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

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

    image

  4. 单击确定