## CDN安全策略

> 本功能仅阿里云服务空间支持。适用于阿里云云存储和前端网页托管。

## 简介

云存储及前端网页托管上传的文件在对外分发后，只需知道文件的http链接，公网上是可以随意访问的。这可能会造成CDN流量被刷、有价值的图片视频被盗链，导致资金损失。

为此，uniCloud提供了如下安全策略进行保护，包括：Referer防盗链、IP黑白名单、User-Agent黑白名单。

这些措施可实现对访客身份的识别和过滤，提升安全性。

## 如何开通

在[uniCloud控制台](https://unicloud.dcloud.net.cn "uniCloud控制台") --> 服务空间详情 --> 安全 --> CDN安全策略来申请开通。

开通要求：前一日账号下所有服务空间产生的CDN流量大于1GB，CDN流量包含云存储及绑定自定义域名的前端网页托管。

符合条件会实时开通，开通后可配置云存储及前端网页托管的访问控制规则、查看访问报表。访问报表有一天延迟，开通当天的报表会在第二天生成。

**由于前端网页托管默认域名不走CDN，所以只有绑定了自定义域名才可配置前端网页托管的访问规则及查看报表。**


## Referer防盗链@referer

Referer防盗链，是基于HTTP请求头中Referer字段来设置访问控制规则，实现对访客的身份识别和过滤，防止资源被非法盗用。

常用于web和小程序的防盗链。

配置Referer黑白名单后，CDN会根据配置的规则识别请求身份，允许或拒绝访问请求。允许访问请求，CDN会返回资源链接；拒绝访问请求，CDN会返回403响应码。

### 如何配置Referer防盗链

点击 Referer防盗链 页签，配置规则。您可根据业务需求，设置Referer黑名单或白名单。

例如，你的web网站地址为 abc.com，那么可以设定白名单为 abc.com，那么除了这个网站，其他来源请求都会被禁止访问cdn。

![配置Referer防盗链](https://web-assets.dcloud.net.cn/unidoc/zh/cdn-safe-referer.png)


**配置说明**

|配置项	|参数    |说明	|
|:-:	|:-:		|:-:        |
|Referer类型	|黑名单 |  黑名单内的域名均无法访问资源		|
|    |  白名单 | 只有白名单内的域名能访问资源，白名单以外的域名均无法访问资源。        |
|规则    | Referer列表 |  多个使用回车符进行分隔。支持使用 \* 作为通配符。例如，*.example.com，可以匹配到image.example.com或video.example.com等。        |
|高级配置    |  允许通过浏览器地址栏直接访问资源URL | 当勾选该选项时，请求Referer字段为空或无Referer字段（例如浏览器请求），都将允许用户访问资源        |
|    |  精确匹配    |  规则中填写的域名是否为精确匹配        |

**补充**

- 未勾选精确匹配，规则填写example.com时，匹配example.com和<任意字符>.example.com。规则填写a*b.example.com时，匹配a<任意字符>b.example.com和<任意字符>.a<任意字符>b.example.com。
- 勾选精确匹配，规则填写example.com时，匹配example.com。规则填写a*b.example.com时，匹配a<任意字符>b.example.com。
- Referer防盗链规则的总长度最长不超过60KB。


### 各平台小程序默认Referer

如果您的应用是小程序，可将小程序平台默认Referer配置到白名单规则中，以允许访问资源。

|平台	|Referer    |
|:-:	|:-:		|
|微信    | https://servicewechat.com | 
|支付宝    | https://你的支付宝小程序appid.hybrid.alipay-eco.com | 
|百度    | https://smartapps.cn | 
|头条抖音    | https://tmaservice.developer.toutiao.com | 
|QQ    | https://appservice.qq.com | 

注意：如果您启用了白名单，又没有填写上述网址，那么这些小程序将无法访问您的cdn。

其他小程序平台，请查阅它们的文档。

### App中Referer防盗链

App中请求cdn时的referer为空。也不支持指定。如果已设置黑/白名单则在App中无法访问资源。

如需支持App访问，请务必开启高级配置中的`允许通过浏览器地址栏直接访问资源URL`，即**允许空Referer访问CDN资源**。

此时空Referer及命中黑/白名单规则的请求可正常访问资源。

在App中，如需指定某App才能访问cdn，不是通过referer，而是通过userAgent，具体见下一节。

## UA黑/白名单@ua

User-Agent是HTTP请求头的一部分，包含用户访问时所使用的操作系统及版本、浏览器类型及版本等标识信息。

配置UA黑/白名单后，用户请求资源时，CDN将获取用户请求时HTTP请求头中的User-Agent字段，同配置中的黑/白名单进行匹配来实现对访客身份的识别和过滤，保证只从您允许的客户端UA才能访问cdn。


### 如何配置UA黑/白名单

访问控制UA黑/白名单页签，点击修改配置来配置规则。

![配置UA黑/白名单](https://web-assets.dcloud.net.cn/unidoc/zh/cdn-safe-ua.png)

|配置项	|参数    |说明	|
|:-:	|:-:		|:-:        |
|名单类型	|黑名单 |  HTTP请求头中的User-Agent字段命中黑名单的情况下，用户将无法资源。		|
|	|白名单 |  只有HTTP请求头中的User-Agent字段命中白名单的情况下，用户才能正常访问资源。		|
| 规则	| UA列表 |  用竖线 “&#124;” 分割多个值，支持 \* 星号通配符。例如：\*curl\*&#124;\*IE\*&#124;\*chrome\*&#124;\*firefox\*。		|

uni-app的app端，有默认UA，也可以自定义UA。

如需指定某个特殊UA才能访问cdn，需在manifest.json中配置。详见[App的默认UA和自定义UA教程](/tutorial/app-useragent.md)

**补充**

- 如果您需要对用户请求中携带了User-Agent请求头，但是值为空的情况做访问控制，您可以在规则中填写this-is-empty-ua来表示User-Agent值为空。


### 注意事项

- 访问控制黑名单和白名单互斥，同一时间您只能选择其中一种方式。如需要切换请先删除配置后重新进行添加。
- 前端网页托管需绑定自定义域名后才可配置访问规则及查看报表。



## IP黑/白名单@ip

通过识别客户端IP来过滤用户请求，拦截特定IP的访问或者仅允许特定IP的访问，可以用来解决恶意IP盗刷、攻击等问题。

### 如何配置IP黑/白名单

访问控制IP黑/白名单页签，点击修改配置来配置规则。

![配置IP黑/白名单](https://web-assets.dcloud.net.cn/unidoc/zh/cdn-safe-ip.png)

|配置项	|参数    |说明	|
|:-:	|:-:		|:-:        |
|名单类型	|黑名单 |  黑名单内的IP无法访问所有资源。		|
|名单类型	|白名单 |  只有白名单内的IP能访问资源，白名单以外的IP均无法访问。	|
|规则	|IP列表 |  多个使用回车符进行分隔。输入IP段（不可重复，例如：192.168.0.0/24）或IP地址（例如192.168.0.1）。支持IPv6地址、IPv4地址。	|

**补充**

- IPv4：最多可配置约2000个IPv4地址。
- IPv6：最多可配置约700个IPv6地址，不支持::缩写格式，例如：不支持FC00:0AA3::0023:0003:0300:300A:1234。支持输入IP段，例如：FC00:0AA3:0000:0000:0000:0000:0000:0000/48。
- IP地址字符串的总长度不能超过30 KB。



## 查看报表@report

通过访问报表功能，您可以查询云存储及前端网页托管的访问统计数据；通过分析数据，便于了解业务运行状况。

访问报表统计并展示了用户访问最多的Referer、URL和IP三项数据，您可以根据报表数据及业务需求来配置相应的访问控制规则以提高CDN的安全性。

|报表类型	    |说明	|
|:-:	|:-:        |
|访问最多的Referer    |  按流量倒序展示访问Referer流量、流量占比、访问次数和访问占比，最多100条记录  |
|访问最多的URL    |  按流量倒序展示URL的流量、流量占比、访问次数和访问占比，最多100条记录      |
|访问最多的IP    |  按流量倒序展示访问IP流量和访问次数，最多100条      |

## 总结

- 如果不做App，那么配置referer白名单就可以。
- 如果做App，那么referer必须允许为空，同时在ua里设置您的app的特殊ua。

**注意：**

因为http头其实是可以伪造的，所以使用referer和ua没有那么绝对的安全。

ip虽然是不可伪造的，但面对海量用户无法配置ip白名单。

一般在配置referer和ua后，需继续通过查看报表，发现可疑的ip并禁封。

另外，CDN节点处理恶意访问请求的过程中需要消耗CPU处理资源，CDN节点响应恶意请求4xx状态码的过程中需要消耗流量带宽资源，因此命中安全策略被拒绝的请求仍会产生请求数及响应4xx状态码产生的CDN流量费用。

这是行业现状，也是业内cdn通行的安全防护措施。uniCloud已将阿里云cdn的所有安全策略均透传出来。
