静态文件防盗链的一种思路

在我们的系统中,总会有一些资源需要保护起来不被盗走,如果是动态接口可以通过验证权限来保护,静态资源大多需要对外开放,比较难以保护,本文就介绍保护静态文件资源一种思路——那就是使用 HTTP 中 Referer 头。

初识 Referer

Referer 是 HTTP 协议规定的一个请求头字段,用来表述 “来源” ,也就是你是从哪里知道我们的网站的,点这里查看MDN介绍。现代浏览器中,一般会自动加上该字段,告诉服务器 “来源” 是谁,简单来说也就是上一个打开的页面是什么。不信的话,可以打开 Nginx 的日志查看。谷歌分析这些追踪器也会使用这个信息来告诉你都有谁链接到你的网站。

Referer 怎么防盗

介绍了 Referer ,那 Referer 怎么使用才能防盗呢?我们先来捋一捋用户浏览一个网站的步骤主要有:用户输入URL => 浏览器根据输入发送请求 => 服务器接收请求,解析并返回响应 => 浏览器接收响应并解析 => 根据解析的资源继续请求需要的资源。不管是静态还是动态,入口文件(绝大部分是html)总是第一个解析,然后别的资源(css,js,图像,视频等)都是根据html定义继续请求。

所以,根据上述步骤可以得出,只有第一个请求的Referer不一样,有可能是搜索引擎,也有可能是外链/内链,还可能是空,但是对于用到的其他资源,referer都是改网站自己。说到这,聪明的你应该也想到了,那我只要判断请求的referer和请求的地址,两个的Host或者Domain是否一致即可。若不一致则说明有外人在盗用我们的资源。

发布时间:2021-04-29
其他阅读

西华湿地公园

昆明周末好去处。

查看原文

WPF中CornerRadius是什么属性

在WPF中,CornerRadius 属性我们经常需要使用到,它的作用是用来设置控件的四个圆角,在 BorderButton 等控件中使用。等同于 css 中的 border-radius 设置。

查看原文

C#中new和override的区别

在C#编程语言中,new 和 override 是两个重要的关键字,它们用于控制类成员方法的行为。在面向对象编程(OOP)中,理解这两个关键字的区别和用法,对于编写清晰、可维护和高效的代码至关重要。

查看原文

游记 | 山城重庆

最近都在忙着推进中物视的事情,还挺忙的,最近昆明的天气比较难受,工作日都是晴天,到了周末就下雨。刚好碰上在重庆有一个会议需要参加,趁着这个机会就去重庆旅游。

查看原文

命令行打包.net项目

.net 日常开发中,我们接触最多的就是 Visual Studio ,它是微软为了 .net 平台专门打造的 IDE (集成开发环境),为整个 .net 平台开发带来了无与伦比的图形化体验,但是有时候,我们也会遇到需要通过命令行来生成 .net 项目的情况,本文会介绍几种命令行打包的姿势。

查看原文