配置Referer防盗链

Referer防盗链,是基于HTTP请求头中Referer字段(例如,Referer黑白名单)来设置访问控制规则,实现对访客的身份识别和过滤,防止网站资源被非法盗用。配置Referer黑白名单后,CDN会根据名单识别请求身份,允许或拒绝访问请求。允许访问请求,CDN会返回资源链接;拒绝访问请求,CDN会返回403响应码。本文为您介绍如何配置Referer防盗链。

背景信息

Referer是HTTP请求头的一部分,携带了HTTP请求的来源地址信息(协议+域名+查询参数),可用于识别请求来源。

Referer防盗链是一种服务器端设置的访问控制机制,用于防止未经授权的网站盗用服务器资源。具体来说,当一个用户从某个网页点击链接访问另一个网页时,浏览器会自动在HTTP请求头中添加一个Referer字段,这个字段记录了用户是从哪个网页跳转过来的。

重要
  • 视频点播中Referer防盗链功能默认不启用,表示任何网站均可访问您的资源。

  • 将某个域名添加到Referer黑名单或白名单后,CDN会默认将该域名的泛域名加入对应的规则名单。例如,如果您填写aliyundoc.com,则最终配置生效的是*.aliyundoc.com,即所有子级域名都会生效。

  • 当域名在进行Range请求时,由于Range第二次请求的时候会被浏览器加上Referer头,因此需要对该域名Referer防盗链设置为白名单。

  • 启用视频点播的Referer防盗链功能后,如需在阿里云官方网站的视频点播控制台播放预览视频,则可以在Referer白名单配置中增加域名vod.console.aliyun.com

使用场景

Referer防盗链主要用于保护网站的资源不被其他网站直接引用或盗用,常见的使用场景包括:

  • 版权保护:某些网站发布的内容受版权保护,使用Referer防盗链可以限制只有特定授权网站才能访问这些内容,保护版权利益。

  • 防止热链盗用:用户可以配置Referer防盗链,确保自己的资源只能在特定来源网站上使用,防止其他网站直接引用自己的资源,减少热链盗用问题。

  • 提高网站安全性:通过Referer防盗链,用户可以设置只允许特定来源网站访问自己的网站资源,防止恶意盗链行为、恶意访问或盗取敏感信息。

  • 控制流量来源:用户可以使用Referer防盗链来限制只有特定来源网站的流量才能访问自己的网站,有效控制流量来源,提高网站的稳定性和安全性。

综上所述,您可以根据自己的需求,在不同的使用场景中使用CDN的Referer防盗链功能,保护网站资源、提高安全性和控制流量来源。

工作原理

服务器端检查每个请求的Referer字段,如果Referer字段不是来自自己信任的网站,就拒绝提供服务。这样可以防止其他网站直接链接到自己的资源,从而节省带宽和服务器资源。如果配置了Referer防盗链,CDN将根据请求的Referer与配置的Referer规则来判断是否允许此请求:

  • 如果浏览器携带的Referer与黑名单Referer匹配,或与白名单Referer不匹配,则CDN将拒绝该请求的访问。

  • 如果浏览器携带的Referer与白名单Referer匹配,则CDN将允许该请求的访问。

image

操作步骤

  1. 登录视频点播控制台
  2. 在点播控制台左侧导航栏的配置管理区域,单击分发加速配置 > 域名管理,进入域名管理页面。
  3. 域名管理页面,找到目标域名,单击操作列的配置

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

  5. Referer防盗链页签,单击修改配置

  6. 根据业务需求,设置Referer黑名单白名单

    参数

    说明

    Referer类型

    • 黑名单

      黑名单内的域名均无法访问当前的资源。

    • 白名单

      只有白名单内的域名能访问当前资源,白名单以外的域名均无法访问当前的资源。

    说明

    黑名单和白名单互斥,同一时间您只能选择其中一种方式。

    规则

    • 支持添加多个Referer名单,使用回车符进行分隔,每个Referer名单前不能加空格符。

    • 支持使用星号(*)作为通配符。例如,配置*.developer.aliyundoc.com,可以匹配到image.developer.aliyundoc.comvideo.developer.aliyundoc.com等。

    说明

    Referer防盗链规则的总长度最长不超过60 KB。

    重定向URL

    当请求被拦截后不会再返回403,而是会返回302+Location头,该项为Location头的值,必须以http://或者https://开头,例如:http://www.example.com

    高级配置

    允许通过浏览器地址栏直接访问资源URL

    系统默认未勾选。当勾选该选项时,无论配置的是Referer黑名单还是白名单,系统不拦截空Referer请求,CDN节点都将允许用户访问当前的资源。空Referer包括两种情况:

    • 用户请求中不携带Referer头。

    • 用户请求中携带了Referer头,但值为空。

    精确匹配

    • 未勾选精确匹配时:

      • 系统默认未勾选。

      • 不支持精确匹配,可模糊匹配。

      • 支持后缀匹配。不能在域名左边加“.”,实际下发配置时系统会自动在域名左边加上“.”。

        • Referer规则列表填写example.com,匹配example.com<任意字符>.example.com

        • Referer规则列表填写a*b.example.com,匹配a<任意字符>b.example.com<任意字符>.a<任意字符>b.example.com

    • 勾选精确匹配时:

      • 支持精确匹配,不匹配子域名。

        • Referer规则列表填写example.com,仅匹配example.com

        • Referer规则列表填写a*b.example.com,仅匹配a<任意字符>b.example.com

      • 不支持后缀匹配。

    忽略scheme

    无论配置的是Referer黑名单还是白名单:

    • 未勾选忽略scheme时,如果用户请求中的Referer没有带上HTTP或HTTPS协议头部,则按照无效Referer进行处理。例如Referer格式为www.example.com时无效,只有Referer格式为https://www.*.comhttp://www.*.com才有效。

    • 勾选忽略scheme后,如果用户请求中的Referer没有带上HTTP或HTTPS协议头部,则依然当作有效Referer进行处理。例如Referer格式为www.example.com依然有效。

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

Referer匹配逻辑

通过以下名单配置为例,阐述Referer头部的匹配逻辑。如果一个请求未匹配白名单或者匹配了黑名单,CDN会拒绝请求并返回403状态码。

名单配置

用户请求中的Referer值

匹配结果

匹配逻辑说明

  • www.example.com

  • *.example.com

http://www.example.com/img.jpg

Referer头部中的域名匹配名单。

http://www.example.com:80/img.jpg

www.example.com

见匹配逻辑说明

  • 如果未勾选忽略scheme,结果是不匹配。原因是用户请求中的Referer没有带上HTTP或HTTPS协议头部。

  • 如果勾选忽略scheme,结果是匹配。

http://aaa.example.com

无论是否勾选精确匹配,结果均为匹配。

http://aaa.bbb.example.com

见匹配逻辑说明

  • 如果未勾选精确匹配,结果是匹配。原因是Referer规则列表填写了*.example.com,Referer头部中的多级域名匹配名单中的泛域名条目。泛域名包含多级域名。

  • 如果勾选精确匹配,结果是不匹配。原因是Referer规则列表填写了*.example.com,仅匹配二级域名,不匹配三级域名。

http://example.com

Referer头部中的二级域名不匹配名单中的泛域名条目。原因是泛域名不包含二级域名本身。

http://www.example.net

不匹配任何规则

既未匹配白名单,也未匹配黑名单,按照默认策略处理,允许访问。

常见问题

请求中的Referer字段不是应该默认自带HTTP或HTTPS协议头部吗,为什么还会出现没有带上HTTP或HTTPS协议头部的情况?

一般情况下,用户请求中的Referer应该是带有HTTP或HTTPS协议头部的。然而,在某些情况下,可能会出现没有带上HTTP或HTTPS协议头部的Referer的情况。

一种常见的情况是当用户从一个不安全的网站(即未使用HTTPS加密)跳转到一个使用HTTPS协议的网站时,浏览器在发送请求时可能会将Referer字段中的协议头部去除,以保护用户数据的安全性。这种情况下,Referer字段只会包含域名部分,不包含协议头部。

另外,某些浏览器或代理服务器可能会在特定情况下自动去除Referer字段的协议头部,例如在隐私保护模式下或通过匿名代理访问网站时。

因此,在实际应用中,需要注意处理请求中Referer字段可能没有带上HTTP或HTTPS协议头部的情况,以确保正确判断和使用Referer信息。

为什么会出现空Referer,对于此类请求应该怎么处理?

空Referer(也称为Referer头为空)是指在HTTP请求中缺失了Referer请求头部的情况。请求中的Referer头通常包含完整的URI,其中包括协议(如 httphttps)、主机名,可能还包括路径和查询字符串等。空Referer可能出现的原因:

  • 直接访问:用户直接通过浏览器地址栏输入网址、或通过书签访问、或打开一个新的空白标签页时,都没有来源网页,因此Referer头为空。

  • 用户隐私:用户或用户使用的软件(比如浏览器扩展或隐私模式)可能出于隐私保护考虑故意去除Referer头。

  • 安全协议:从HTTPS页面跳转到HTTP页面的时候,为了安全起见,避免敏感信息泄露,浏览器通常不会发送Referer头。

  • 客户端策略:一些网站或应用程序可能出于安全考虑,通过设置<meta> 标签或者HTTP头(如Referrer-Policy)控制Referer的发送。

  • 跨域请求:某些跨域请求可能因浏览器的安全策略而不携带Referer头。

对于带有空Referer的请求,怎样处理取决于具体应用场景和安全要求。以下是一些处理建议:

  • 默认策略:如果您的服务不需要依赖Referer信息来作出决策,那么可以允许带有空Referer的请求。

  • 允许访问:对于特定的URL或源,您可以勾选允许通过浏览器地址栏直接访问资源URL选项,只允许来自这些来源的请求,即使Referer为空,CDN节点都将允许用户访问当前的资源。