status
date
slug
type
summary
tags
category
password
icon

🎨 前言

前几天捣鼓了一下图床的使用:
最终决定使用这套方案,这里补充聊一聊关于防盗链的问题。

🍰 什么是防盗链?

盗链就是自己存放在图床的图片被未经授权的网站下载或访问的行为。这种行为往往通过爬虫爬取整篇文章完成,爬取的文章内容中也包含本身的图片链接信息,因此其他人在未经授权的网站上打开图片的时候用的是原作者的图床流量,从而对原作者利益造成影响。
所以图床是把双刃剑,用得好可以让内容的发布更加便捷,素材管理更加得心应手,但也有诸如盗链等这样那样的问题。今天我就来简单聊聊怎样通过简单的referer设置做盗链防护。

🎏什么是referer?

Referer是HTTP请求头部中的一个字段,包含了请求的来源页面的URL。通过检查Referer头部的值,可以判断请求的来源页面。
我们在网页上浏览图片时,有一个浏览器向图片服务器发送图片请求的过程,这个过程会带上我们正在查看的这篇网页的URL信息去请求图片数据。因此,如果我们事先设定好允许访问的域名或者不允许访问的域名,即白名单、黑名单,就可以实现只在指定的域名下图片显示,未经许可的域名下不加载图片。实现了我们想要的防盗链效果。
为了更好地理解我们可以做个简单的比喻:
张三根据小红在相亲app上留的的家庭地址信息去见小红。
到小红家门口的时候,小红问张三。
“你是从哪个平台上看到我的?”
此时小红就可以根据张三的回答选择开门或者不开门。
实际上,小红只在“陌陌”平台上发布了自己的个人信息,而小红的信息也被有心人私自发布到了“探探”上面,在复制个人信息的时候连家庭地址也复制过去了,因此小红时常受到无故骚扰。
在这个例子中,张三是网站的访客,李四是我们要访问的图片,小红家的地址就是访问图床的图片链接,相亲app即原作者的网站和被盗去的网站。张三的回答:在哪个平台看到的小红即是referer。

🌐 配置referer访问白名单防盗链

配置

如果是购买的对象存储服务,如阿里云对象存储、七牛云对象存储,那么服务商已经给你提供了配置规则,你只需要进去配置好即可。
  1. 以阿里云举例,首先打开对象管理控制台 - 进入要管理的Bucket - 找到防盗链配置
    1. notion image
       
  1. 然后开启防盗链,在白名单处填写你的个人博客域名,并勾选允许“空 referer”和“截断 QueryString”
    1. 空Referer:HTTP请求中Referer头部的内容为空,或者HTTP请求中不包含Referer头部。如果存在以下两种情况,则Referer为空:当请求并不是由链接触发产生。例如直接通过浏览器输入地址打开页面;从HTTPS页面上的链接访问到非加密的HTTP页面时,在HTTP页面上是检查不到Referer的。 QueryString:HTTP请求中的一部分,用于在URL中传递参数信息。它通常包含在URL的问号后面,以键值对的形式表示。
  1. 点击保存即可,接下来你就可以通过不同方式访问博客去做个测试

测试

接下来我通过不同的域名访问本篇文章的博客页,本文中的图片使用阿里云oss作为图床。
  1. 通过白名单配置过的域名正常访问
notion image
  1. 通过非白名单域名访问无法加载图片,请求出现了403错误
notion image
测试完毕,虽然其实要是别人真心想盗链还是有很多方法可以绕过referer检测的,但是这在一定程度上也可以防止大部分盗链的行为了,更重要的是它给了你图床多一层的防护。
七牛云也有同样的功能,与阿里云的配置方式也相同,这里就不再赘述。

✍️参考文章

  1. 阿里云 OSS 如何设置防盗链, 上个月图床流量耗费50G+,请求次数10W+,什么鬼? - 犬小哈 - 博客园 (cnblogs.com)
  1. 使用防盗链策略避免非法流量盗用_对象存储(OSS)-阿里云帮助中心 (aliyun.com)
 
【葬送的芙莉莲】流泪道别并不适合我们生命在于折腾:因为资费,我重新考虑了图床方案