SecurityPlayerAccess control

嵌入式视频的域名锁定与地区限制

UFOLOAD 播放器中的嵌入域名列表、国家/地区与 IP 封禁以及签名链接如何工作,匹配规则如何生效,以及每项控制的边界。

视频一旦公开,任何能查看你页面源代码的人都可以复制它的地址。有时这无所谓,但很多时候并非如此:别的网站嵌入你的播放器、消耗你的流量;版权许可只覆盖部分国家;或者某个地址段一直在抓取你的片库。UFOLOAD 为此提供了几种控制手段,它们作用于不同的层面。本文解释每一项的作用、匹配规则如何运作以及各自的边界,这样你就能合理地组合使用,而不是只依赖某一个开关。

各项控制一览

控制项限制对象设置位置
允许嵌入的域名哪些网站可以在 iframe 中显示你的播放器播放器工作室,“访问”标签页
封禁的国家/地区来自列表中国家/地区的观众播放器工作室,“访问”标签页
封禁的 IP 地址单个地址和掩码播放器工作室,“访问”标签页
允许下载的域名哪些网站可以打开下载页面播放器工作室,“访问”标签页
带有效期的签名链接播放地址的有效时长,以及对谁有效API,POST /files/{id}/links

上表所列的一切都属于你账号的播放器和分发设置,适用于你的所有视频。这些规则在所有套餐中均可使用;只有下载按钮本身仅限 Pro 和 Max 套餐,详见价格页面。

第 1 步:把嵌入锁定到你的域名

嵌入式播放器运行在别人页面中的 iframe 里,浏览器会通过 referrer 告诉它所在的页面。播放器把这个主机名传给服务器,服务器将其与你的列表进行比对。如果主机名不在列表中,服务器会以 403 拒绝,播放器则显示“不可用”提示而不是视频。

匹配规则很严格,值得准确了解:

  • example.com 只允许这个确切的主机名,别的都不允许。它不允许 www.example.com。
  • *.example.com 允许 example.com 的所有子域名,但不包括裸域名 example.com。要同时覆盖网站及其子域名,请把两条都列上。
  • 不区分大小写,端口和末尾的点会被忽略,因此 Example.com:8080 与 example.com 匹配。
  • 列表最多可容纳 100 条。列表为空表示播放器可以被嵌入任何地方,这是默认设置。
  • 请填写纯主机名。如果误粘贴了完整地址,只会保留其中的主机名。
注意

在启用列表之前,请把你实际嵌入视频的所有主机名都加进去,包括测试和预览域名。最常见的意外,就是自己的测试站点上的视频突然显示“不可用”提示。

域名锁定做不到什么

这项控制能阻止随手盗链,也就是有人把你的 iframe 粘贴到他们的页面里。它并不是安全边界,最好弄清原因。该检查依赖浏览器发送的 referrer。如果页面去掉了 referrer,播放器就无法判断自己被嵌入在哪里,此时它不会拦截,否则隐私设置和 referrer 策略会导致正常的嵌入失效。同样,执意要这么做的访客如果从网络面板中复制了签名的播放列表地址,在其过期之前都可以在别处播放,因为片段是根据链接上的签名来校验的,而不是根据请求它们的页面。视频的公开观看页面也不受域名列表限制:任何拿到链接的人都能打开它。

因此,把这个列表看作一道把守规矩的邻居挡在外面的篱笆。如果要更严格地控制你自己提供的视频流,请使用下文介绍的签名链接。如果你需要的恰恰相反,即只有指定的人才能访问的视频,请注意 UFOLOAD 没有私密视频,也没有 DRM;在依赖它存放机密内容之前,请先阅读自建托管、免费平台与视频托管服务对比。

第 2 步:封禁国家/地区和 IP 地址

国家/地区和 IP 规则在两个地方生效:观众打开观看页或嵌入页时,以及在分发层对播放列表和片段的每一次请求。分发层的检查针对每个请求单独进行,不做缓存,因此你新增的规则对紧接着的下一个片段就会生效,已经拿到链接的人也无法靠保留链接来绕过规则。

  • 国家/地区使用以逗号分隔的两字母 ISO 3166-1 alpha-2 代码,例如 US, CN, RU。观众所在国家/地区通过地理位置数据库根据 IP 地址查询。每个列表最多 100 条。
  • IP 地址可以是单个地址,例如 203.0.113.7,也可以是最后一段为星号的掩码,例如 203.0.113.*,它覆盖整段 256 个地址。IPv6 地址可以精确列出。

有两点实际的提醒。掩码是一把钝刀:对移动网络或办公网络使用 .* 掩码,会把其后所有正常用户都挡在外面。而基于 IP 的地理定位,其准确度取决于背后的地址数据。使用 VPN 或代理的访客看起来位于出口节点所在的位置,因此国家/地区封禁只是减少不需要的流量、或本着诚意遵守地区许可的一种方式,而不是保证。

提示

当你以拥有该视频的组织成员身份登录时,你自己的规则不会拦截你,我们的客服人员也不会被拦截。这是有意为之,这样即使封禁了你所在的国家/地区,你也不会被锁在自己的片库之外;但这也意味着你必须在未登录的浏览器或另一个网络中进行测试。

如果你在自己的页面上用 hls.js 播放视频流(参见嵌入 HLS 视频),域名列表就不起作用,因为播放器从不向 UFOLOAD 页面请求许可。控制来自链接本身。POST /api/v1/files/{id}/links 会签发有效期为 60 秒到 30 天的播放和下载链接。添加 bind_ip 可将链接绑定到一个 IPv4 地址,添加 bind_cookie 则可将其绑定到你的服务器为访客设置的 Cookie 值;此时响应中会给出请求必须携带的 Cookie 名称。

bash
curl -X POST "https://ufoload.com/api/v1/files/FILE_ID/links" \
  -H "Authorization: Bearer $UFOLOAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ttl": 600, "bind_ip": "203.0.113.7"}'

短有效期加上绑定是目前最强的手段:从你页面上复制走的链接,几分钟后就会失效,从任何其他地址访问也都无效。代价是你必须在每次页面浏览时由服务器签发链接,上传与 API 指南和 API 文档介绍的正是这种模式。

下载域名

Pro 和 Max 套餐的播放器可以显示下载按钮。另一个单独的列表“允许下载的域名”与嵌入列表的工作方式完全相同,但控制的是哪些网站可以在框架中打开下载页面。留空表示允许所有网站。直接在 UFOLOAD 上打开下载页面的访客不受限制,与观看页面相同。

第 3 步:保存并测试

  1. 在“访问”标签页中保存列表。
  2. 在隐私窗口中打开允许域名上的页面,确认视频可以播放。子域名的情况也要检查。
  3. 从不在列表中的域名打开同一个嵌入,例如用另一个主机名提供的本地测试页面,确认播放器显示“不可用”提示。
  4. 对于国家/地区或 IP 规则,请在未登录状态下测试,如果条件允许,从符合规则的网络进行测试。
  5. 把你自己页面的 referrer 策略设为合理的值,例如 strict-origin-when-cross-origin。no-referrer 策略会向播放器隐藏主机名,播放器也就无法执行列表规则。

嵌入列表与短时效签名链接结合使用,可以覆盖大多数实际情况:随手盗链在门口就被拦下,想更进一步的人则必须费力去获取一个很快就会过期的链接。有广告可投放并在播放器中投放时,变现指南介绍了广告格式以及插播时段的安排方式。播放器的全部功能列在功能页面,视频托管选择清单则说明了应向任何服务商要求哪些访问控制。

免费注册账号试一试

几分钟内上传视频,获得 HLS 播放器和 API 密钥。各套餐限制见价格页面。