Nginx防盗链的实现原理

2022-11-26 1572阅读

温馨提示:这篇文章已超过628天没有更新,请注意相关的内容是否还可用!

资源盗链

资源盗链指的是此内容不在自己服务器上,而是通过技术手段,绕过别人的限制将别人的内容放到自己页面上最终展示给用户。以此来盗取大网站的空间和流量。简而言之就是用别人的东西成就自己的网站。

创建steal.html,页面引用两张图片

<html>
  <head>
  	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  head>
  <body>
    <h1>郁金香h1>
    <img src="https://www.w3school.com.cn/i/eg_tulip.jpg"  alt="上海鲜花港 - 郁金香" />
    <h1>百度CARh1>
    <img src="https://pics7.baidu.com/feed/cf1b9d16fdfaaf516f7e2011a7cda1e8f11f7a1a.jpeg?token=551979a23a0995e5e5279b8fa1a48b34&s=BD385394D2E963072FD48543030030BB"  alt="百度CAR" />
  body>
html>

配置Nginx服务

server{
  listen  80;

  server_name localhost;
  location /{
    root html;
    index steal.html;
  }
}

访问

可以看出来,下面的图片地址添加了防止盗链的功能网站服务器,上面的图片可以直接使用。

Nginx防盗链的实现原理

Nginx防盗链的实现原理

当浏览器向web服务器发送请求的时候,一般都会带上**Referer**,来告诉浏览器该网页是从哪个页面链接过来的网站服务器,后台服务器可以根据获取到的这个**Referer**信息来判断是否为自己信任的网站地址,如果是则放行继续访问,如果不是则可以返回403(服务端拒绝访问)的状态信息。

Nginx防盗链的实现原理

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

语法valid_referers none|blocked|server_names|string…

默认值

位置

server、location

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

location ~*\.(png|jpg|gif){
  valid_referers none blocked www.baidu.com 192.168.200.222 *.example.com example.*  www.example.org  ~\.google\.;
  if ($invalid_referer){
    return 403;
  }
  root /usr/local/nginx/html;
}

针对目录进行防盗链

location /images {
  valid_referers none blocked www.baidu.com 192.168.200.222 *.example.com example.*  www.example.org  ~\.google\.;
  if ($invalid_referer){
    return 403;

} root /usr/local/nginx/html; }

下载nginx-accesskey源码

git clone ``[]()

升级Nginx

./configure --prefix=/home/nginx --with-http_gzip_static_module --with-http_gzip_static_module ``**--add-module**``=/home/nginx-accesskey

**--add-module****

Nignx配置

#172.41.100.14 Nginx配置
server{
 listen 9088;
 server_name localhost;
 location /images {
    accesskey             on; #功能开启
    accesskey_hashmethod  md5; #加密方式

accesskey_arg sign; #参数名称 accesskey_signature "mypass$remote_addr"; #参数 root /usr/local/nginx/html; } } #172.41.100.15 Nginx配置 server{ listen 80; server_name localhost; location /{ root html; index steal.html; } }

steal.htm配置

<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
head>
  <body>
    <h1>172.41.100.14h1>
    <img src="http://172.41.100.14:9088/images/1.jpg"  alt="tom" />
  body>
html>

访问172.41.100.15

Nginx防盗链的实现原理

直接访问172.41.100.14

Nginx防盗链的实现原理

按照172.41.100.14的配置规则传递参数

参数名称为sign,参数值为mypass+客户端ip生成md5加密串

Nginx防盗链的实现原理

带参数访问效果

Nginx防盗链的实现原理

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]