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

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

初识 Referer

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

Referer 怎么防盗

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

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

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

asp.net core实现一个反向代理

本文将向你展示如何在C#和ASP.NET Core中实现一个反向代理功能。

查看原文

LinqPad 8 分享下载

LinqPad是一个 .Net 快速验证工具,使得.Net开发者可以不借助 Visual Studio 就可以快速验证想法,毕竟vs冷启动和创建项目耗时久,负担大。本文分享一个LinqPad学习版,可直接下载使用。

查看原文

Web前端中实现一个拖动效果

在原生客户端开发中,窗口拖动是一个比较常用的操作。今天把这个效果在网页客户端中实现以下,文章记录一下效果。

查看原文

使用表达式树来提高反射的性能

反射是C#中一种常用的技术,反射提供了动态创建和访问对象的基础,但是反射在带来了极强的灵活性的同时,也带了极大的性能损耗,本文就介绍通过表达式树来提高反射过程中的性能。

查看原文

Entity Framework Core链接Oracle的问题

最近使用 Entity Framework Core 来链接 Oracle 11g 数据库,发现很多 LINQ 语句使用起来都会有问题,查看日志输出发现是生成SQL语句无法被 11g 版本执行,好在Oracle官方已经给我们提供了解决方案。

查看原文