Nginx 防盗链

nginx防盗链问题

盗链:

就是a网站有一张照片,b网站引用了a网站的照片 。

防盗链:

a网站通过设置禁止b网站引用a网站的照片。

nginx防止网站资源被盗用模块

ngx_http_referer_module

如何区分哪些是不正常的用户?

HTTP Referer是Header的一部分,当浏览器向Web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理,例如防止未经允许的网站盗链图片、文件等。因此HTTP Referer头信息是可以通过程序来伪装生成的,所以通过Referer信息防盗链并非100%可靠,但是,它能够限制大部分的盗链情况.

比如在www.google.com 里有一个www.baidu.com 链接,那么点击这个www.baidu.com ,它的header 信息里就有:Referer=http://www.google.com

防盗链配置要点

[root@nginx-server ~]# vim /etc/nginx/nginx.conf
# 日志格式添加"$http_referer"
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';
# valid_referers 使用方式                         
Syntax: 	valid_referers none | blocked | server_names | string ...;
Default: 	—
Context: server, location

盗链实验:

准备俩台服务器,a服务器用做网站正版发布照片,b服务器用作引用a服务器的图片信息的服务器。

a服务器IP:192.168.231.171

b服务器IP:192.168.231.173

在a服务器的配置文件内

[root@localhost ~]# vim /etc/nginx/conf.d/default.conf server {listen  80;server_name  localhost;location /{root  /usr/share/nginx/html;index  1.jpg;
}
}更改完配置文件 记得重启
[root@localhost ~]# nginx -s reload#网站默认发布页面的路径
[root@localhost ~]# cd /usr/share/nginx/html/ 
[root@localhost html]# ls
1.jpg  50x.html  index.html

正常访问a网站

b服务器,配置nginx访问页面

由于b服务器也是yum安装的nginx
因此b服务器的nginx默认发布页面路径在 /usr/local/nginx/html/下
[root@daili ~]# cd /usr/share/nginx/html/
[root@daili html]# ls
50x.html  index.htmlvim index.html<html>
<head><meta charset="utf-8">     #用老做实验  红色的底<title>qf.com</title>
</head>
<body style="background-color:red;"><img src="http://192.168.231.171/1.jpg"/>    #盗用171IP的1.jpg这个图片
</body>
</html>

此时访问b网站,由于它盗用了a网站的图片,因此

观察a服务器的日志

这就做成了盗链实验

防盗链实验

实验机器

a服务器IP:192.168.231.174  真正提供照片的服务器

b服务器IP:192.168.231.173

1.防盗链的操作得在真正发布这张图片的服务器修改配置文件

a服务器#vim /etc/nginx/conf.d/default.conf server {listen  80;server_name  localhost;location /{root  /usr/share/nginx/html;index  1.jpg;
valid_referers server_names  192.168.231.173;   
#server_names 只允许指定ip域名来访问资源if ($invalid_referer) {return 502;     #其他ip或者域名来访问a服务器,返回502
}}
}重启服务
nginx -s reload

这样就相当于将173这个ip添加到白名单中,只有192.168.231.173可以访问a服务器的资源。

通过百度来访问a服务器
[root@daili ~]# curl -e "www.baidu.com" -Ik 192.168.231.173
HTTP/1.1 502 Bad Gateway
Server: nginx/1.24.0
Date: Mon, 23 Oct 2023 11:29:07 GMT
Content-Type: text/html
Content-Length: 157
Connection: keep-alive#由于在a服务器的配置文件设置只能IP为192.168.231.173的来访问,因此其他ip来访问返回502

平时我们都是通过本机电脑的ip来访问b服务器,而curl -e "ip/域名" -Ik  要访问的ip

这条命令是我们通过此ip来访问另一个ip。

curl -e  "www.baidu.com" -Ik  192.168.231.173

我们通过百度来访问173IP,相当于我们此时的电脑本机变成了百度。

相同的是,我们设置为只有百度可以访问a服务器,那么b服务器上的图片就会失真打不开

a服务器
[root@localhost ~]# vim /etc/nginx/conf.d/default.conf server {listen  80;server_name  localhost;location /{root  /usr/share/nginx/html;index  1.jpg;
valid_referers server_names  www.baidu.com;
if ($invalid_referer) {return 502;
}
}
}重启服务
nginx -s reload

访问b服务器的网站

三个要素:

  • none : 允许没有http_refer的请求访问资源;

  • blocked : 允许不是http://开头的,不带协议的请求访问资源;

  • server_names : 只允许指定ip/域名来的请求访问资源(白名单);

加none

真正有图片的a服务器
server {listen  80;server_name  localhost;location /{root  /usr/share/nginx/html;valid_referers none  192.168.231.173;index  1.jpg;
}
}

浏览查看a服务器的发布页面

查看日志

tailf /var/log/nginx/access.log

通过百度来访问a服务器

[root@localhost ~]# curl -e "www.baidu,com" -Ik 192.168.231.174
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Tue, 24 Oct 2023 13:07:27 GMT
Content-Type: image/jpeg
Content-Length: 647023
Last-Modified: Fri, 15 Sep 2023 06:06:10 GMT
Connection: keep-alive
ETag: "6503f452-9df6f"
Accept-Ranges: bytes

不加none

a服务器的配置文件
/etc/nginx/conf.d/default.confserver {listen  80;server_name  localhost;location /{root  /usr/share/nginx/html;
index  1.jpg;valid_referers blocked   www.jd.com;
if ($invalid_referer) {return 502;}
}
}

访问a服务器的网站

因此

none只是决定能不能访问a服务器本身,加none可以访问a服务器本身,不加none不可以访问a服务器本身。

blocked

本身含义是允许开头不带http的访问成功,那就意味着 带http的访问不成功

配置a服务器的配置文件
server {listen  80;server_name  localhost;location /{root  /usr/share/nginx/html;
index  1.jpg;valid_referers blocked   192.168.231.174;
if ($invalid_referer) {return 502;}
}
}

访问www与http://www   后者就不可以访问

[root@daili ~]# curl -e "http://www.jd.com"  -Ik 192.168.231.171
HTTP/1.1 502 Bad Gateway
Server: nginx/1.24.0
Date: Mon, 23 Oct 2023 13:02:34 GMT
Content-Type: text/html
Content-Length: 157
Connection: keep-alive[root@daili ~]# curl -e "www.jd.com"  -Ik 192.168.231.171
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Mon, 23 Oct 2023 13:02:37 GMT
Content-Type: image/jpeg
Content-Length: 647023
Last-Modified: Fri, 15 Sep 2023 06:06:10 GMT
Connection: keep-alive
ETag: "6503f452-9df6f"
Accept-Ranges: bytes

情况2 加*.jd.com

server {listen  80;server_name  localhost;location /{root  /usr/share/nginx/html;valid_referers none blocked *.jd.com    ;index  1.jpg;
}
}
[root@daili ~]# curl -e "http://www.jd.com" -Ik 192.168.231.174
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Tue, 24 Oct 2023 13:31:52 GMT
Content-Type: image/jpeg
Content-Length: 647023
Last-Modified: Fri, 15 Sep 2023 06:06:10 GMT
Connection: keep-alive
ETag: "6503f452-9df6f"
Accept-Ranges: bytes[root@daili ~]# curl -e "www.jd.com" -Ik 192.168.231.174
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Tue, 24 Oct 2023 13:32:00 GMT
Content-Type: image/jpeg
Content-Length: 647023
Last-Modified: Fri, 15 Sep 2023 06:06:10 GMT
Connection: keep-alive
ETag: "6503f452-9df6f"
Accept-Ranges: bytes

这里虽然配置文件里面写了blocked,但是白名单里面定义的是*.jd.com,因此他有俩个 一个是www开头,一个是http://  因此访问http://jd.com 可以访问

server {listen  80;server_name  localhost;location /{root  /usr/share/nginx/html;valid_referers none blocked www.jd.com    ;index  1.jpg;
}
}
[root@daili ~]# curl -e "www.jd.com" -Ik 192.168.231.174
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Tue, 24 Oct 2023 13:35:17 GMT
Content-Type: image/jpeg
Content-Length: 647023
Last-Modified: Fri, 15 Sep 2023 06:06:10 GMT
Connection: keep-alive
ETag: "6503f452-9df6f"
Accept-Ranges: bytes[root@daili ~]# curl -e "http://www.jd.com" -Ik 192.168.231.174
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Tue, 24 Oct 2023 13:35:19 GMT
Content-Type: image/jpeg
Content-Length: 647023
Last-Modified: Fri, 15 Sep 2023 06:06:10 GMT
Connection: keep-alive
ETag: "6503f452-9df6f"
Accept-Ranges: bytes

这里尽管定义配置的是www.jd.com 按道理输入http://jd.com 是访问不了的,但是在配置文件里面location是在server下的,而server是在http下面的,因此输入http://jd.com 也是可以访问的。

相同那么加了blocked 由于 白名单里面没有baidu.com 因此 访问www.baidu.com可以访问,访问http://www.baidu.com 就不可以访问。

[root@localhost conf.d]# curl -e "www.baidu.com" -Ik 192.168.231.174
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Tue, 24 Oct 2023 13:57:27 GMT
Content-Type: image/jpeg
Content-Length: 647023
Last-Modified: Fri, 15 Sep 2023 06:06:10 GMT
Connection: keep-alive
ETag: "6503f452-9df6f"
Accept-Ranges: bytes[root@localhost conf.d]# curl -e "http://www.baidu.com" -Ik 192.168.231.174
HTTP/1.1 502 Bad Gateway
Server: nginx/1.24.0
Date: Tue, 24 Oct 2023 13:57:32 GMT
Content-Type: text/html
Content-Length: 157
Connection: keep-alive

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/117117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java 进阶篇】Java Tomcat 入门指南

Java Tomcat&#xff08;通常简称 Tomcat&#xff09;是一个流行的开源Servlet容器&#xff0c;用于托管Java Web应用程序。它是Apache软件基金会的一部分&#xff0c;提供了一个稳定、可靠的环境来运行Java Servlets和JavaServer Pages&#xff08;JSP&#xff09;。本篇博客将…

FPGA时序分析与约束(6)——综合的基础知识

在使用时序约束的设计过程中&#xff0c;综合&#xff08;synthesis&#xff09;是第一步。 一、综合的解释 在电子设计中&#xff0c;综合是指完成特定功能的门级网表的实现。除了特定功能&#xff0c;综合的过程可能还要满足某种其他要求&#xff0c;如功率、操作频率等。 有…

【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox

文章目录 1.WinForm文件结构2. 窗体的常用属性、方法与事件2.1 常用属性&#xff08;可直接在属性中设置&#xff09;2.2 常用方法2.3 常用事件 3.Label、TextBox及Button控件4.RadioButton和CheckBox5.ListBox&#xff08;列表框&#xff09; 1.WinForm文件结构 .sln文件 &am…

zabbix6.0 部署配置

架构 先简单介绍zabbix监控的最主要的两个组件&#xff1a; zabbix server zabbix agent server 用来部署 web console以及相关的数据存储&#xff0c;所以需要配合一些数据库来保存数据&#xff0c;比如mysql,pgsql, 又有前端的页面所以还需要配置 nginx 和getway 所以 serve…

Unity 文字显示动画(2)

针对第一版的优化&#xff0c;自动适配文字大小&#xff0c;TextMeshPro可以拓展各种语言。第一版字母类语言效果更好。 using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI;public partial class TextBeat…

基于C#使用winform技术的游戏平台的实现【C#课程设计】

基于C#使用winform技术的游戏平台的实现【C#课程设计】 说明项目结构项目运行截图及实现的功能 部分代码一些说明(个人觉得一些难点的说明)一、ListView &#xff0c;ImageList 的综合使用二、图片上传以及picturebox 图片的动态替换三、图表插件的使用四、SQL工具类封装五、高…

Mybatis 简介(一)

这里使用的是3.5.11版本 MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;P…

【proteus】8086 写一个汇编程序并调试

参考书籍&#xff1a;微机原理与接口技术——基于8086和Proteus仿真&#xff08;第3版&#xff09;p103-105&#xff0c;p119-122. 参考程序是p70&#xff0c;例4-1 在上一篇的基础上&#xff1a; 创建项目和汇编文件 写一个汇编程序并编译 双击8086的元件图&#xff1a; …

ant design vue Message 用法以及内容为 html片段情况

ant design vue 的 Message 用法 全局展示操作反馈信息 何时使用 # 可提供成功、警告和错误等反馈信息。顶部居中显示并自动消失&#xff0c;是一种不打断用户操作的轻量级提示方式。 全局配置&#xff1a; // main.ts// 进行全局配置 message.config({top: 0.7rem,//高度…

05 MIT线性代数-转置,置换,向量空间Transposes, permutations, spaces

1. Permutations P: execute row exchanges becomes PA LU for any invertible A Permutations P identity matrix with reordered rows mn (n-1) ... (3) (2) (1) counts recordings, counts all nxn permuations 对于nxn矩阵存在着n!个置换矩阵 , 2. Transpose: 2.…

【数据结构】常见复杂度习题详解 ------ 习题篇

文章目录 &#x1f4cb;前言一. ⛳️前篇回顾二. ⛳️常见时间复杂度计算举例1️⃣实例一2️⃣实例二3️⃣实例三4️⃣实例四5️⃣实例五6️⃣实例六7️⃣实例七8️⃣实例八 三. ⛳️常见空间复杂度计算举例1️⃣实例一2️⃣实例二3️⃣实例三 四. ⛳️总结 &#x1f4cb;前言 …

高性能计算与多模态处理的探索之旅:英伟达GH200性能优化与GPT-4V的算力加速未来

★多模态大模型&#xff1b;GPU算力&#xff1b;LLMS&#xff1b;LLM&#xff1b;LMM&#xff1b;GPT-4V&#xff1b;GH200&#xff1b;图像识别&#xff1b;目标定位&#xff1b;图像描述&#xff1b;视觉问答&#xff1b;视觉对话&#xff1b;英伟达&#xff1b;Nvidia&#…

交换机控制在同一个网段内的终端,用hybrid接口实现不同的IP通和不通。

实验效果&#xff1a;pc1和pc2不能通&#xff0c;但pc1和pc2分别可以和pc3通。 通过这个实验可以彻底掌握数据包在交换机上的进去的类型状态。 sw1配置&#xff1a; [sw1]dis current-configuration sysname sw1 vlan batch 10 20 100 interface GigabitEthernet0/0/1 port h…

【Redis安装】Ubuntu和Centos

此处安装的是 Redis5 在 Ubuntu 系统上 切换到 root 用户下&#xff0c;su 命令切换使用 apt 可以搜索 redis 相关软件包 apt search redis使用 apt 命令安装 redis apt install redis手动修改配置文件 redis.conf cd /etc/redis/ vim redis.conf修改以下两处 重启服务器 …

chatGPT结构及商业级相似模型应用调研

GPT前言 说明 ChatGPT这项技术的历史可以追溯到2018年&#xff0c;当时由Facebook实验室的团队开发出该技术&#xff0c;以开发聊天机器人为目的。随后&#xff0c;ChatGPT在2019年由来自谷歌的DeepMind团队在国际会议ICLR上发表了论文&#xff0c;其中提出了ChatGPT的技术框架…

计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)

车辆跟踪及测距 该项目一个基于深度学习和目标跟踪算法的项目&#xff0c;主要用于实现视频中的目标检测和跟踪。该项目使用了 YOLOv5目标检测算法和 DeepSORT 目标跟踪算法&#xff0c;以及一些辅助工具和库&#xff0c;可以帮助用户快速地在本地或者云端上实现视频目标检测和…

GDB常用指令与调试汇总

文章目录 前言一、基础二、例子三、用gdb调试多线程程序 前言 GDB&#xff08;GNU Debugger&#xff09;是一个强大的调试工具&#xff0c;用于调试C、C等编程语言的程序。本文将介绍一些常用的GDB指令&#xff0c;以及通过例子演示如何使用这些指令进行程序调试。 一、基础 …

【Web】| CSS Float (浮动)的使用方法

Float&#xff08;浮动&#xff09;概念 CSS的Float&#xff08;浮动&#xff09;&#xff0c;会使得元素向左或者向右移动&#xff0c;其它周围元素也会重新排列。 Float浮动&#xff0c;往往是用于图像&#xff0c;但它的布局一样非常有效。 元素如何浮动 元素的水平方向…

小白必看,手把手教你安装Python

目录 一&#xff0c;Python介绍 二&#xff0c;安装 Python 三&#xff0c;各种疑难杂症&#xff1a; 一&#xff0c;Python介绍 Python 是这两年来比较流行的一门编程语言&#xff0c;主要卖点是其相对简单的语法以及丰富的第三方库&#xff0c;下面我来带大家安装、配置 P…

python免杀初探

文章目录 loader基础知识loader参数介绍 evilhiding项目地址免杀方式修改加载器花指令混淆loader源码修改签名加壳远程条件触发修改ico的md5加密 loader基础知识 loader import ctypes #&#xff08;kali生成payload存放位置&#xff09; shellcode bytearray(b"shellc…