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: 允许那些来源是百度网站的请求。比如,从百度网站点击链接访问你的资源。

相关推荐
csdn_life18几秒前
# Debian 10 升级到 Debian 13 指南
运维·debian·php
U盘失踪了几秒前
Debian 使用 Xfce 桌面
linux·运维
k7Cx7e几秒前
Debian安装 curl 时提示插入 DVD 光盘
运维·windows·debian
云飞云共享云桌面2 分钟前
广东某智能装备工厂8人共享一台服务器
大数据·运维·服务器·人工智能·3d·自动化·电脑
鹓于2 分钟前
OmniParser视觉鼠标自动化实战
运维·自动化·计算机外设
北冥湖畔的燕雀2 分钟前
Linux Shell开发实战:从零打造命令行工具
linux·运维·服务器
!沧海@一粟!5 分钟前
Esxi主机iDrac密码与IP重置指南
运维·服务器
原来是猿7 分钟前
Linux - 基础IO【中】
linux·运维·服务器
Xzq2105097 分钟前
网络编程套接字(UDP)
运维·服务器·网络
主角1 711 分钟前
Linux系统安全
linux·运维·系统安全