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

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

初识 Referer

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

Referer 怎么防盗

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

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

发布时间:2021-04-29