防盗之心不可无
2024-11-25
| 2024-11-25
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
notion image

起因

我使用阿里云的对象存储(OSS) 服务管理博客中用到的图片,个人站点访问量不大,一年下来流量费用只有几块钱,十分省心。
今天突然接到阿里云的续费通知,登录后台发现预存余额少了很多,检查发现对象存储跑了 20 多个 G 的流量,有接近 2 万条新的访问。大概率是站内的图片链接被其他地方引用,比如一些爬虫站把站内的文章和图片资源一股脑拿走,而我在为这些流量付费。
亡羊补牢,果断开启防盗链。

开启防盗链

开启防盗链的方法很简单,登录自己对象存储服务所在的后台,选择对应的 Bucket,比如我使用的阿里云操作如下:
  1. 点击数据安全中的防盗链
  1. 开启防盗链,并输入白名单 Referer (必填)
  1. 保存生效(如果你知道盗链所在的站,也可以写黑名单,它的优先级最高)
    1. notion image

查询 Referer

注意:填写 Referer 时,要注意前缀 http 和 https 是不同的。如果你不确定 referer 是什么,可以浏览器打开自己的网站
  1. 鼠标右键,选择检查
  1. 在浏览器的开发者工具中,选择 Network 标签页
  1. 刷新页面,找到图床存储的图片,在 Headers 选项卡中查看对应的 Referer
    1. notion image

空 Referer 是什么

我们看到配置防盗链会有一个空 Rerefer,当勾选允许时,简单理解为允许直链打开资源的链接。这是因为在浏览器中直接输入存储服务中的链接时,是没有 Referer 这个参数的,自然就是空的。
如果你像我一样,需要在 Obsidian 这类本地笔记中添加图片的图床地址并直接预览,就需要勾选允许,否则在 Obsidian 中直接引用图片链接是不显示的。

验证防盗链是否生效

开启防盗链后,我们可以验证一下是否生效。验证方法也很简单,新建一个内容为 abc 的文本文档 test.txt ,上传至对象存储中并生成链接。使用 curl 向指定链接发起请求,看是否能够正常响应。正常响应的情况下,终端回打印 abc 字段。

对空的 referer 进行验证

  1. 通过 curl 命令不加参数访问,代表通过浏览器直接打开URL。
  1. 由于设置了允许Referer为空,没有报错,系统直接打印test.txt中的内容。
  1. 如果设置了不允许 Referer 为空,则会出现 AccessDenied 的 报错

对白名单中的 Referer 进行验证

curl 添加参数 -e 可以指定 referer 地址进行请求。我们期望当 referer 为白名单域名时可以正常请求,非白名单域名为则禁止。
关于什么是 Referer,可以参考以下文章 HTTP Referer 教程 - 阮一峰的网络日志
希望大家在互联网上分享内容的同时,也要避免不法盗用,引起的不必要的流量费用增加。
  • 网络安全
  • 互联网
  • 建站
  • 经历分享
  • 教程
  • 麦琳的矛与盾从零开始:鼠鬚管输入法配置全解析
    Loading...