NGINX -6 浏览器的盗链与防止被盗

1、盗链的实现(本项目仅供参考,在局域网内实现,请遵守相关法律)

1.1 准备操作

我们需要两台主机,一台为Ubuntu,作为偷盗机,一台centos作为被盗机,具体配置以及IP地址如下表:

名称IP地址CPU内存nginx安装方式
centos192.168.107.19022编译安装
Ubuntu192.168.107.18022apt安装

1.2 nginx的安装

nginx的安装在此就不再赘述

见如下状态

#centos
[root@localhost ~]# systemctl start nginx.service 
[root@localhost ~]# systemctl status nginx.service 
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since 三 2025-05-07 19:40:01 CST; 24s ago
     Docs: http://nginx.org/en/docs/
  Process: 1958 ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf (code=exited, status=0/SUCCESS)
 Main PID: 1961 (nginx)
   CGroup: /system.slice/nginx.service
           ├─1961 nginx: master process /apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
           ├─1962 nginx: worker process
           └─1963 nginx: worker process

507 19:40:01 localhost.localdomain systemd[1]: Starting nginx - high performance web server...
507 19:40:01 localhost.localdomain systemd[1]: Started nginx - high performance web server.
[root@localhost ~]# 

#ubnutu
root@ubuntu:~# systemctl start nginx
root@ubuntu:~# systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2025-05-07 11:22:53 UTC; 17min ago
       Docs: man:nginx(8)
    Process: 958 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 966 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 967 (nginx)
      Tasks: 3 (limit: 4519)
     Memory: 9.1M
        CPU: 158ms
     CGroup: /system.slice/nginx.service
             ├─967 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ├─968 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             └─969 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

May 07 11:22:53 ubuntu systemd[1]: Starting A high performance web server and a reverse proxy server...
May 07 11:22:53 ubuntu systemd[1]: Started A high performance web server and a reverse proxy server.
root@ubuntu:~# 

1.3 实现盗链

ubuntu操作

root@ubuntu:~# cd /var/www/html/
root@ubuntu:/var/www/html# ls
index.html  index.html.bak
root@ubuntu:/var/www/html# vim index.html
root@ubuntu:/var/www/html# 
#index.html文件内容如下
<html>
<body>
<h1>this is ailun-yegeyu  </h1>
<img src="http://192.168.107.190/a.jpg"/>
</body>
</html>
~        

centos操作

[root@localhost data]# cd /apps/nginx/conf.d/
[root@localhost conf.d]# ls
ailun.conf
[root@localhost conf.d]# vim ailun.conf

主站点目录为根目录下的data文件夹
在这里插入图片描述

我们在站点目录下拖入一张a.jpg

[root@localhost ~]# cd /data/
[root@localhost data]# ls
a.jpg  index.html  main  test

网站测试
http://192.168.107.180/index.html

在这里插入图片描述

2、防盗链的实现

配置文件如下

server{
listen 80;
server_name www.ailun.com;
root /data/;

location ~* \.(jpg|gif|swf|png)$ {
         valid_referers none 192.168.107.190;
         if ( $invalid_referer ) {
           return  403;
           #rewrite ^/ http://192.168.107.190/error.png;
           }
        }


}

这段代码是 Nginx 的配置文件片段,主要作用是配置一个虚拟主机,并且对特定类型的文件进行防盗链处理。下面是对代码各部分的详细解释:

1. 服务器监听配置

listen 80;
server_name www.ailun.com;
root /data/;
  • listen 80;:指定 Nginx 监听 80 端口,这是 HTTP 协议的默认端口。也就是说,当有客户端通过 80 端口发起 HTTP 请求时,Nginx 会对其进行处理。
  • server_name www.ailun.com;:定义了该虚拟主机的域名。当客户端访问 www.ailun.com 时,Nginx 会使用这个配置块来处理请求。
  • root /data/;:设置该虚拟主机的根目录为 /data/。当客户端请求一个文件时,Nginx 会在 /data/ 目录下查找对应的文件。

2. 特定文件类型的位置块配置

location ~* \.(jpg|gif|swf|png)$ {
  • location 是 Nginx 中用于匹配请求 URI 的指令。
  • ~* 表示使用不区分大小写的正则表达式进行匹配。
  • \.(jpg|gif|swf|png)$ 是一个正则表达式,用于匹配以 .jpg.gif.swf.png 结尾的请求 URI。也就是说,当客户端请求这些类型的文件时,会进入这个 location 块进行处理。

3. 防盗链配置

valid_referers none 192.168.107.190;
  • valid_referers 指令用于指定合法的 Referer 头部值。Referer 头部会在浏览器请求资源时携带,用于表示请求是从哪个页面发起的。
  • none 表示允许没有 Referer 头部的请求,也就是直接在浏览器地址栏输入资源链接的请求。
  • 192.168.107.190 表示允许从 IP 地址为 192.168.107.190 的页面发起的请求。

4. 非法引用处理

if ( $invalid_referer ) {
    return  403;
    #rewrite ^/ http://192.168.107.190/error.png;
}
  • $invalid_referer 是 Nginx 的一个内置变量,如果请求的 Referer 头部值不在 valid_referers 指定的列表中,这个变量的值为 1,否则为 0
  • if ( $invalid_referer ) 表示如果 Referer 头部值不合法,则执行 if 块内的代码。
  • return 403; 表示返回 403 状态码,即禁止访问。客户端会收到一个“禁止访问”的错误页面。
  • #rewrite ^/ http://192.168.107.190/error.png; 这行代码被注释掉了。如果取消注释,当 Referer 头部值不合法时,会将请求重定向到 http://192.168.107.190/error.png

3、验证

经过笔者的多次验证,我们在原先的浏览器上仍然可以访问到这张图片

在这里插入图片描述

我们只能将这种原因归结于浏览器的缓存问题

我们选择换几个浏览器测试

  • 在另一台centos的火狐浏览器上

在这里插入图片描述

  • 在windows10浏览器中
    在这里插入图片描述

我们可以观察到页面已经变成了403,防盗链实验成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值