首页 > 其他分享 >一文搞定防盗链设计

一文搞定防盗链设计

时间:2024-04-02 10:24:45浏览次数:23  
标签:搞定 一文 鉴权 访问 防盗链 链接 资源 ctime

大家好,我是蓝胖子,在涉及到图片或者视频链接时,通常都会提到防盗链,这一节我将会从防盗链的含义到落地,向大家展示如何设计资源的防盗链。

防盗链的含义与作用

防盗链,顾名思义,是为了防止资源被他人窃取而设计的。

通常我们将图片或视频链接存储到obs对象存储上,前端通过服务端返回的图片或视频链接访问obs上对应的资源,那如果这个链接被第三方网站获取到,便能在其网站上直接访问我们的视频或者图片资源。

防盗链的出现就是为了杜绝第三方网站能直接访问我们的视频或图片资源。让返回的资源链接只能被我们指定的网站进行访问

防盗链方案设计

接着,我以华为云的obs系统 为例, 讲几个关于防盗链的设计方案,供大家参考,

refer指定黑白名单

浏览器在加载静态资源时,会在请求头中加上Refer字段,其值为浏览器当前的网址,目的是为了告诉服务器,用户在访问资源之前的位置。

如果第三方网站获盗取到了我们的视频资源,那么在其访问时,Refer就是第三方网站的网址,我们可以在obs上配置reder黑白名单,指定资源让某些网站不允许访问或者对某些网站允许访问。

Pasted image 20240401163901.png

更加灵活的鉴权方式-远程鉴权

除此以外,还有种更加灵活的鉴权方式,通过自定义的代码来判断该访问链接是否允许被访问。在使用obs系统时,为了减少带宽成本,我们将会在obs前面,部署cdn节点,让用户访问的资源能够被缓存到离他比较近的cdn节点上。

通常cdn节点上可以配置对应的访问,例如华为云可以配置远程鉴权的地址,指向自己的服务器鉴权接口,在接口中定义对资源的访问权限,像cloudflare则是可以创建worker,在worker中定义链接的访问权限。

Pasted image 20240401164545.png

鉴权逻辑应该如何写,这里我提供一个比较通用的逻辑,给大家参考下。

在服务端返回给客户端资源在obs上的访问链接时,可以加上该链接的创建时间,在鉴权逻辑里申明一个链接的有效期,根据链接的产生时间和有效期 允许该链接在有效期内允许访问,比如返回给客户端的链接是

https://xxx?ctime=1711962048

ctime 则是链接的创建时间,但是仅仅这样是不够的,第三方网站可以获取到链接后修改ctime字段来修改链接的创建时间,所以我们还需要一个消息认证的机制,保证链接是服务器返回的且没有经过篡改,这里可以用消息认证算法实现。

拿消息认证算法hmac举例,服务器端定义一个只有自己知道的密钥,用该密钥对资源地址进行md5的摘要计算,如下是golang中的hamc的使用逻辑,

key := "hamcsecrete"
    data := "https://xxx?ctime=1711962048"
    hmac := hmac.New(md5.New, []byte(key))
    hmac.Write([]byte(data))
    fmt.Println(hex.EncodeToString(hmac.Sum([]byte(""))))

得到的消息认证码,加入到资源链接的参数中,如下,

https://xxx?ctime=1711962048&token=679f5d6f7d344dba1e33938ae1d41ab4

这样,鉴权服务器在得到资源链接时,就会将资源地址通过同样的消息认证算法和密钥计算token值,如果计算出的token值和资源链接中的token值一致,则继续查看链接是否在有效期范围内,在则允许访问,否则不允许访问。因为消息认证的密钥只有服务器知道,即使第三方网站获取到了链接,也无法得出正确的token值。

最后,在使用此逻辑的时候,要注意cdn服务器回源的条件,通常cdn是根据url路径查看是否需要回源,如果url地址不同,则会去访问源站服务器,我们当然不希望因为链接ctime的不同就再次去请求源站服务器,所以,在cdn节点处,需要配置,判断回源时需要忽略ctime和token的参数。

标签:搞定,一文,鉴权,访问,防盗链,链接,资源,ctime
From: https://www.cnblogs.com/hobbybear/p/18110005

相关文章

  • 一文学会 - Fiddler抓包快速实战,Python开发面试书籍
    只显示指定的请求只显示内网的Hosts[使用频率较少]只显示外网的Hosts[使用频率较少]隐藏指定的Hosts隐藏多个相关Hosts的情况下,使用英文分号隔开,见下图。只显示指定的多个Hosts显示多个相关Hosts的情况下,使用英文分号隔开,见下图。标记过滤到的域......
  • 一个命令搞定MP4文件转m3u8文件
    一个命令搞定MP4文件转m3u8文件直接将MP4文件转成m3u8:ffmpeg-idemo.mp4-hls_time10-hls_list_size0-hls_segment_filenameene_%05d.tsene.m3u8如果已经是ts文件了,则只需要执行下方命令即可:ffmpeg-idemo.ts-ccopy-map0-fsegment-segment_listplay......
  • 一文搞定opencv中常见的关键点检测算法(附代码)
    作者:K.Fire|来源:计算机视觉工坊前言角点时图像中存在物体边缘角落位置的点或者一些特殊位置的点,角点检测(CornerDetection)是计算机视觉系统中获取图像特征的一种方法,是运动检测、图像匹配、视频跟踪、三维重建和目标识别的基础。本篇文章将介绍opencv中常用的几种角点检......
  • 玩转云端 | AccessOne实用窍门之三步搞定门户网站防护与加速
    随着互联网的飞速发展,网站建设已成为企事业单位推广、提供服务的重要途径之一。在数字技术快速迭代的当下,如何在保障网站安全的前提下提供高效服务,是企事业单位需要着重考虑的内容。网站安全防护是网站建设后不容忽视的一环,若不法分子通过网站漏洞进行攻/击,轻则导致企业服务中断,......
  • Cursor:你的前端“超能力”助手,一句话搞定HTML、CSS、JS!
    一、简介Cursor,不仅仅是一个开发工具,更是你前端路上的“超级英雄”!它融合了GPT-4的AI智慧,能听懂你的“心声”,一键将你的创意转化为神奇的HTML、CSS和JavaScript代码。告别繁琐的编码工作,让Cursor成为你创意的翅膀,带你飞翔在前端的世界!链接:Cursor官网二、功能亮点1、一......
  • 一文掌握堆(Heap)全貌:原理深度解析、动态演示核心操作与实际应用场景
    参考动画:从堆的定义到优先队列、堆排序建议配合动画食用为什么叫堆呢?“堆”这个词在数据结构的上下文中通常指的是一种特定的树形数据结构,其命名来源于它的特性和应用。在这种结构中,父节点和子节点之间存在特定的排序关系,这类似于物理世界中堆积的物体——较大或较重的物......
  • 神经网络算法:一文搞懂Attention(注意力)机制
    本文将从Attention的本质、Attention的原理、Attention的应用三个方面,带您一文搞懂Attention(注意力)机制。Attention的本质核心逻辑:从关注全部到关注重点Attention机制处理长文本时,能从中抓住重点,不丢失重要信息。Attention机制像人类看图片的逻辑,当我们看一张图片的......
  • 一文教你如何轻松领取腾讯云优惠券
    腾讯云作为国内领先的云计算服务商,为用户提供了丰富的云产品和服务。为了让更多用户享受到腾讯云服务的优质体验,腾讯云推出了各种优惠券,让用户在购买云服务时能够获得更多实惠。本文将为大家详细介绍如何轻松领取腾讯云优惠券,轻松开启云上之旅!一、腾讯云优惠券介绍说明腾讯......
  • 一文搞懂Javaweb的响应状态码
    一、状态码大类状态码分类说明1xx响应中——临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它2xx成功——表示请求已经被成功接收,处理已完成3xx重定向——重定向到其它地方:它让客户端再发起一个请求以完成整个处理。4xx客户端......
  • 一文搞懂!Python中的 __call__以及其与自动调用forward()的关系
    在阅读一些深度学习项目的代码中,我们会发现这样一个问题,深度学习网络模型中常常要定义forward()方法,但是在使用该函数时却没有显式地调用函数的forward(),却好像“自动”地执行了。比如下面这个例子(不可执行的代码,仅描述常见网络模型的大致定义框架、模型实例化和获取输出......