Nginx静态资源防盗链

什么是资源防盗链

资源防盗链是一种网络安全机制,用于防止未授权的网站或服务通过直接链接(即所谓的"盗链")到存储在其他服务器上的资源(如图片、视频、音频、文档等),从而非法使用这些资源。这种机制的目的是保护资源所有者的版权和服务器资源,避免因未授权访问导致的带宽和服务器压力增加。

例如下面的三张图片

第一张是某网站图片,没有防盗链通过img标签可直接展示,第二章是某度的图片,通过img标签不显示。第三章是本地服务器图片

加了防盗链的会看不到

上面图片的html文件代码

powershell 复制代码
<html>
  <head>
        <meta charset="utf-8">
        <title>跨域问题演示</title>
        <script src="jquery.js"></script>
        <script>
            $(function(){
                $("#btn").click(function(){
                        $.get('http://192.168.101.18:80/get_user',function(data){
                                alert(JSON.stringify(data));
                        });
                });
            });
        </script>
  </head>
  <body>
        <input type="button" value="获取数据" id="btn"/>
        <img src="http://xxx.com/ab/2231/7/17837/3334/60739b32154gfrrew721476a/8742222e63cc55f.jpg"/></br> #第一张图片
        <img src="https://xxx.xxx.xxx.com/pic/cb8065380cd7912319207aecac34598as4t762"/></br> #加了防盗链的图片
        <img src="http://192.168.101.23/images/AK.jpg"/></br> #本地的图片
  </body>
</html>
~

Nginx防盗链的实现原理:

HTTP Referer头部:浏览器在请求资源时,通常会在HTTP请求中包含一个Referer头部,指明了该请求是从哪个页面发起的。服务器可以通过检查这个Referer头部来确定请求的来源是否合法。

例如百度的Refer信息

后台服务器可以根据获取到的这个Referer信息来判断是否为自己信任的网站地址,如果是则放行继续访问,如果不是则可以返回403(服务端拒绝访问)的状态信息。

Nginx防盗链的具体实现:

valid_referers

valid_referers :nginx会通就过查看referer自动和valid_referers后面的内容进行匹配,如果匹配到了就将invalid_referer 变量置0,如果没有匹配到,则将invalid_referer变量置为1,匹配的过程中不区分大小写。

指令 valid_referers
默认值 无默认值
用途 验证HTTP请求中的Referer头部,确保请求来自信任的来源
配置示例 valid_referers none blocked server_names;

none : 不验证 Referer 头部,允许所有请求通过
blocked :在Header中的Referer不为空,但是该值被防火墙或代理进行伪装过,如不带"http://" 、"https://"等协议头的资源允许访问。
server_names :指定具体的域名或者IP
string: 可以支持正则表达式和*的字符串。如果是正则表达式,需要以~开头表示,例如

powershell 复制代码
```powershell
location ~*\.(png|jpg|gif){ #"~"表示正则表达式  "*"表示任意字符 "\" 转义 "." ,(png|jpg|gif) 表示以.png 或者 .jpg 或者 .gif结尾的都将被匹配
       valid_referers none blocked www.baidu.com 192.168.101.23 *.example.com example.*  www.example.org  ~\.google\.;
       if ($invalid_referer){
            return 403;
       }
       root /usr/local/nginx/html;

}

测试在192.168.101.18服务器上添加一张图片,在192.168.101.23 的cross.html中使用标签引用它。

在192.168.101.23 的cross.html

powershell 复制代码
<img src="http://192.168.101.18/images/AK.jpg"/></br> #本地的图片.

未添加防盗链之前是可以访问到的

在192.168.101.18的nginx添加如下代码:

powershell 复制代码
location /images {
              root html; #该目录下的所有图片都会防盗链 匹配路径:root路径+location路径: html/images
              valid_referers none blocked 192.168.101.18 www.baidu.com;
              if ($invalid_referer){
                     return 403;
             }
        }

测试:加上后23的服务器不能访问192.168.101.18服务器的图片了.

valid_referers配置解释

valid_referers none blocked 192.168.101.18 www.baidu.com;

none: 允许那些没有来源信息的请求。比如,用户直接在浏览器地址栏输入网址后访问你的资源。

blocked: 允许那些来源信息被隐藏或屏蔽的请求。有些浏览器或插件会自动隐藏来源信息,这个选项就是允许这些请求通过。通俗一点的解释是:如果你把 blocked 加到配置中,就是告诉Nginx:"如果请求的来源信息被挡住或隐藏了,也没关系,允许它通过。"

192.168.101.18: 允许那些来源是这个IP地址的请求。通常是指局域网内某台电脑或服务器发出的请求。

www.baidu.com: 允许那些来源是百度网站的请求。比如,从百度网站点击链接访问你的资源。

相关推荐
Brilliantwxx19 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
richdata20 小时前
商品数字化不是先做大数据,而是先把数据变成可用决策
大数据·运维·数据治理·商品数字化·智能补货·ai商品决策
weixin_4166679620 小时前
【无标题】
运维·服务器·网络
一池秋_21 小时前
arm低配linux设备,桌面应用冷启动提速方法
linux·运维·arm开发
上海云盾-小余1 天前
流量攻击复盘:为什么 WAF 完好,业务依旧瘫痪
运维·服务器·网络
IT大白鼠1 天前
Docker 私有仓库管理:Harbor 企业级仓库搭建与镜像全生命周期管理
运维·docker·容器
戴西软件1 天前
戴西iDWS.3DViz Suite数据轻量化可视化软件,从传统桌面软件向云端协同的重大突破
大数据·运维·网络·人工智能·机器学习·3d
我命由我123451 天前
Linux - Linux/POSIX 路径斜杠折叠规则
linux·运维·服务器·android studio·android jetpack·android-studio·android runtime
姚不倒1 天前
Nginx 反向代理:5 种负载均衡策略与实战
运维·nginx·负载均衡
Achieve前端实验室1 天前
SSG 预渲染工具站 SEO 优化实践:从零收录到全面修复的 7 个问题
nginx·seo·前端工程化