Steins;Lab

  • 项目
  • 折腾
  • 笔记
  • 图册
  • 杂谈
  • 文章索引 - 博主自荐博文
  • 关于/留言
Steins;Lab
某团的自留研究所
  1. 首页
  2. 学习笔记
  3. 正文

CDN 常见防盗链技术方案

2022年7月14日 4610点热度 1人点赞 0条评论

本文介绍在CDN使用过程中常见的防盗链技术原理。无论是使用公有云的CDN服务还是公司内部自建CDN节点,防盗链是广泛使用的必备功能之一。

Table of Contents

  • 1背景
  • 2防盗链技术
    • 2.1 ip黑白名单
    • 2.2 referer黑白名单
      • Extra:关于referer
    • 2.3时间戳签名鉴权
    • 2.4回源鉴权/远程鉴权
  • 3小结
  • 参考资料

1背景

在现代web技术中,内容交付网络CDN (Content Delivery Network)已经是提高访客访问质量的必备手段之一。使用CDN交付web资源,不仅能改善世界各地终端用户的访问体验,还能减少中心源服务器的访问和带宽压力。
然而,CDN被盗链使用,不仅会平白无故地付出额外的高额成本,同时也可能面临滥用导致的侵权等法律风险。

2防盗链技术

以下几种是调研了各家公有云(如腾讯云、阿里云和网宿)中常见的实现方式。夹带了一些HTTP的小知识。

2.1 ip黑白名单

ip黑白名单是实现资源访问控制的最直接的方式。
ip白名单对访问者固定的情况下比较实用。
ip黑名单更常用于明确地发现有固定的ip进行盗刷,进行显式封禁。

另外,这种方式也可以结合ip地理信息库GeoIP使用,即允许或禁止某些国家或地区的资源访问。

2.2 referer黑白名单

referer包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的[1]。
referer的携带给了被访问对象识别访问来源的方式。因此CDN节点可以通过检查referer判断请求来源是否符合预期。

 

Extra:关于referer

referer是HTTP协议标准(RFC 7231)中规定的一个HTTP Header。因此当前各浏览器在以下形式访问资源会携带相应的referer[2]。
(1)用户点击网页上的链接
(2)用户发送表单
(3)网页加载静态资源,比如加载图片、脚本、样式

因为是现代浏览器实现的特性,在一般的referer策略下,CDN能够获知来源地址,因此可以进行黑白名单配置。同时,也可以配置是否拒绝空referer的访问,实现防盗链。

另外,有一个常见的 Referrer-Policy 是 strict-origin-when-cross-origin。

其对于同源的请求,会发送完整的URL作为引用地址;在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS);在降级的情况下不发送此首部(HTTPS->HTTP)[1]。

有个有趣的豆知识是,referer实际上是"referrer"误拼写。

 

2.3时间戳签名鉴权

在url的参数中加入带时间戳签名,利用哈希单向计算难以复原且计算快速的特性进行签名鉴权。
这里以较多使用的腾讯云TypeD签名方式为例,说明签名方式。

取当前Unix时间戳为timestamp,签名秘钥为 key,计算签名方式为 md5(key+path+timestamp)

例如用户原始访问的URL为 https://example.com/1/test.jpg?foo=bar,当前时间为 1657725452,key为 ba0620aa845a89ce4e11f88a42c23778

因此计算的秘钥为
md5("ba0620aa845a89ce4e11f88a42c23778"+“/1/test.jpg”+“1657725452”)=71c6321b1e472cf8053f13df1e95464d

因此加鉴权后,客户访问链接为
https://example.com/1/test.jpg?foo=bar&ts=1657725452&sign=71c6321b1e472cf8053f13df1e95464d

作为服务端,首先根据同样的算法计算 sign 是否合法,如果合法,在判断时间戳是否超过TTL时间。全部校验通过后,予以放行。

这种方法是一种典型的签名验证方式,计算快速成本低。CDN侧可以控制过期时间,实现鉴权防盗链的效果。签名鉴权直接在CDN的边缘节点进行,大量的恶意请求不必打回源站。

2.4回源鉴权/远程鉴权

用户除了需要准备资源的源站外,也要准备相应的鉴权服务。下图是同步方式的远程鉴权流程。

考虑到用户体验,可以使用异步鉴权的方式。这种异步鉴权可以用在音视频流直播/点播的场景中。即先提供给终端用户流媒体,然后异步鉴权。如果鉴权失败则断流。如下图所示。

远程鉴权成本较高,每次访问都需要连接用户的鉴权服务器验证,因此适合要求严格的防盗链需求中。

3小结

本文总结了在CDN使用场景中常见的几种防盗链方式。除了可供使用者参考外,也可为服务端研发提供参考和思路。

参考资料

  1. MDN - Referer
  2. HTTP Referer教程
  3. 腾讯云CDN文档-鉴权TypeD

相关

标签: 暂无
最后更新:2022年7月14日

SPtuan

SPtuan 是一名普通的工程师,最大的愿望是度过平静的时光。 当前从事网络/CDN/对象存储研发。

点赞
< 上一篇
下一篇 >
5 1 vote
文章评分
Subscribe
Login
提醒
guest

guest

0 评论
最新
最旧 得票最多
Inline Feedbacks
View all comments

SPtuan

SPtuan 是一名普通的工程师,最大的愿望是度过平静的时光。
当前从事网络/CDN/对象存储研发。

  • 1背景
  • 2防盗链技术
    • 2.1 ip黑白名单
    • 2.2 referer黑白名单
      • Extra:关于referer
    • 2.3时间戳签名鉴权
    • 2.4回源鉴权/远程鉴权
  • 3小结
  • 参考资料
分类
  • Uncategorized
  • 图册
  • 学习笔记
  • 库
  • 折腾
  • 杂谈
  • 瞎**扯
  • 碎碎念
  • 项目跟踪
最近评论
SPtuan 发布于 2 个月前(03月22日) 书签: 关于 disk-io 的经验, 异步/同步 io 系统设计的经验 https://you...
SPtuan 发布于 2 个月前(03月21日) 如果公司不是对外提供这些服务的,这种岗位都是 infra 部门,平均年龄确实会大一些。尤其构建和维护...
HUA 发布于 2 个月前(03月19日) 想请问博主对于国内CDN行业,以及CDN调度、DNS托管类服务相关岗位的看法,以及是否还推荐校招新人...
SPtuan 发布于 3 个月前(02月03日) 2025 注: 长辈对于只身去深圳的担忧,更多地来自于 80s/90s 治安情况。近几年了解了严打...
SPtuan 发布于 4 个月前(01月16日) 哈哈,100就100吧,新年快乐!
热门主题 & 页面
  • [实验]VPS搭建ss服务中转实现纯ipv6访问网络-校园网免流量
  • HTTP Header Name 大小写敏感问题
  • iowait 到底是什么?
  • 全球互联网拓扑探索 (1) : 互联网是如何工作的
  • 基于openvpn的校园网ipv6免流量方案 |ipv6|校园网|免流量
归档
  • 2025 年 5 月
  • 2025 年 3 月
  • 2024 年 12 月
  • 2024 年 9 月
  • 2024 年 8 月
  • 2024 年 5 月
  • 2024 年 3 月
  • 2024 年 2 月
  • 2023 年 12 月
  • 2023 年 11 月
  • 2023 年 9 月
  • 2023 年 8 月
  • 2023 年 4 月
  • 2023 年 1 月
  • 2022 年 12 月
  • 2022 年 10 月
  • 2022 年 9 月
  • 2022 年 7 月
  • 2022 年 6 月
  • 2022 年 2 月
  • 2021 年 12 月
  • 2021 年 11 月
  • 2021 年 2 月
  • 2021 年 1 月
  • 2020 年 9 月
  • 2020 年 4 月
  • 2020 年 3 月
  • 2020 年 1 月
  • 2019 年 8 月
  • 2019 年 7 月
  • 2019 年 5 月
  • 2019 年 4 月
  • 2019 年 3 月
  • 2019 年 2 月
  • 2018 年 12 月
  • 2018 年 10 月
  • 2018 年 9 月
  • 2018 年 8 月
  • 2018 年 5 月
  • 2018 年 2 月
  • 2018 年 1 月
  • 2017 年 11 月
  • 2017 年 9 月
  • 2017 年 7 月
  • 2017 年 6 月
  • 2017 年 5 月
  • 2017 年 4 月
  • 2017 年 3 月
  • 2017 年 2 月
  • 2017 年 1 月
  • 2016 年 12 月
  • 2016 年 11 月
  • 2016 年 10 月
  • 2016 年 9 月
  • 2016 年 8 月
  • 2016 年 7 月
  • 2016 年 6 月
  • 2016 年 5 月
  • 2016 年 4 月
  • 2016 年 3 月
  • 2016 年 2 月
  • 2016 年 1 月
  • 2015 年 12 月
  • 2015 年 11 月
  • 2015 年 9 月

友情链接:

Blessing Studio hahaschool 绘枫和畅 魔法少女Fandy monsterx Clarke的博客 Luminous’ Home Shintaku's Blog
蓝黑的博客 haruhi.club Yida的博客 Bo2SS 涛叔 TangBao 同和君Hocassian

Steins;Lab 团子神社 zdfmc.net

steinslab.io built with ❤. Thanks for all 2015-2025.

Theme Kratos Made By Seaton Jiang

wpDiscuz