Web资源防盗链

xiaoxiao2021-02-28  39

Web资源防盗链

盗链:在自己的页面上展示一些并不在自己服务器上的内容。获得他人服务器上的地源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容

常见的是小站盗用大战的图片、音乐、视频、软件等资源。通过倒链的方法可以减轻自己服务器的负担,因为真实的空间和流量均是来自别人的服务器。如果有一天发现我们的流量慢慢消失,但是我们的PV统计、IP统计很少就是被盗链了。

随便找个网站查看network在我们的PHP文件加上去就可以了。

 

防盗链概念:防止别人通过一些技术手段绕过本站的资源展示页面,盗用本站的资源,让绕开本站资源展示页面的资源链接失效。让他403!

可以大大减轻服务器以及贷款的压力

工作原理:通过Referer或者签名,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以根据到显示它的网页地址。

一单检测到来源不是本站即进行阻止或者返回指定页面

 

就是network下面请求头信息有一个Referer,代表来源,可以通过技术来限制其他网站的盗链。还有就是比如一个图片我可以给他带一个参数,这个参数是彼此之间约定好的一个签名,签名的计算方式是约定好的。服务器显示的时候去判断这个签名是否正确。通过计算签名的方式,判断请求是否合法,如果合法显示,否则返回错误信息。

 

Nginx模块ngx_http_referer_module用于组织来源非法的域名请求

Nginx指令valid_referers,全局变量$invalid_referer

Referer

         valid_referernone | blocked | server_names |string …;

         none:可写可不写,代表referer是否为空,如果写none代表referer为空也合法,不写表示来源为空不合法,一般需要加,因为本身通过浏览器访问是合法的确保直接用浏览器是可以访问的。

         blocked:”Referer”来源头部不为空,但是里面的值被代理或者被防火墙删除了,这些值都不以http://或者https://开头

         server_names:referer来源头部包含当前的server_names,也就是被允许的源列表

例子/usr/local/nginx/conf/nginx.conf中(首先要看模块安没安装)

         location~.*\.(gif|jpg|png|flv|swf|rar|zip)$              #当访问这些结尾的文件时

         {

                   Valid_referersnone blocked jhkj.com*.jhkj.com;

                   If($invalid_referer)                          #全局变量,如果合法就是false

                   {

                            #return403;

                            rewrite^/ http://www.jhkj.com/403.jpg;

                   }

         }

盗链人员也可以伪造referer比如说php的模拟curl请求,给你传递一个头信息叫做referer,这个referer由他自定义,这样就可以进行伪装,就可以吧防盗链数据都窃取出来。所以这种方式虽然可以,但是对防盗链不能彻底防范,只能是提高一些门槛。

针对目录的防盗链

         Location/images/             #当访问这些结尾的文件时

         {

                   Valid_referersnone blocked jhkj.com*.jhkj.com;

                   If($invalid_referer)                          #全局变量,如果合法就是false

                   {

                            #return403;

                            rewrite^/ http://www.jhkj.com/403.jpg;

                   }

         }

比如在写location直接写目录也可以直接配置的,以上是rerfer进行防盗链,但是会被伪造referer,所以可以使用加密签名来解决。当我们请求图片是我们要带一些签名,返回图片判断签名是否正确,就是一个暗号

 

加密签名:第三方模块HttpAccessKeyModule实现Nginx防盗链。因为在浏览器里面在服务端php中我去显示一个图片是跟了一个签名,Nginx做一个判断,判断这个前面是否正确,这时候就需要HAKM。

Accesskey on|off 模块开关

Acesskey_hashmethod md5|sha-1          签名加密方式,签名的哈希方法选择

Accesskey_arg GET参数名称,传递一个前面,要知道签名的键是什么

Acesskey_signature 加密规则,在PHP的规则要和Nginx的规则一致

         Location~.*\.(gif|jpg|png|flv|swf|rar|zip)$ 

{

Accesskey on;

Acesskey_hashmethod md5;

Accesskey_arg  sign;

Acesskey_signature “chaojifuzademima123$remote_addr”;

         }

 

$remote_addr是客户端IP,前面随意去写的,大家猜不出来的。本质就是字符串拼接客户端ID,通过MD5加密就得到了签名,判断两个值是否一致,一致就显示,否则就403它!

为了让能够访问要加参数:在php中加入

$sign = md5(‘chaojifuzademima123’.$_SERVER[‘REMOTE_ADDR’]);

echo ‘<img src=”./logo_new.png?sig=’.$sign.’”>’;       #请求这张图片带了sign的参数

 

 

 

转载请注明原文地址: https://www.6miu.com/read-2625315.html

最新回复(0)