您好,登录后才能下订单哦!
这篇文章给大家介绍防盗链的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
盗链的概念
盗链是指在自己的页面上展示一些并不在自己服务器上的一些内容, 获取别人的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容。 一般被盗链的都是图片、 音乐、视频、软件等资源。通过盗链的手段可以减轻自己服务器的负担
比如我直接在自己的网站上
<img src="http:www.baidu.com/imagepath/image.png">
这样就可以直接展示百度的图片,但是实际上是无法展示的(如下图),之所以无法展示是因为百度的图片做过防盗链处理
通过Refer或者签名,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以追踪到显示他的网页地址 一旦检测到来源不是本站,即进行阻止或者返回指定的页面
Nginx模块, ngx_http_referer_module用于阻挡来源非法域名的请求 nginx指令valid_refers,全局变量$invalid_refer 对资源的防盗链nginx配置为
location ~.*\.(gif|jpg|png|flv|swf|rar|zip)$ { valid_referers none blocked test.com *.test.com; //加none的目的是确保浏览器可以直接访问资源 if($invalid_referer) { #return 403; // 直接返回403 rewrite ^/ http://www.test.com/403.jpg;//返回指定提示图片 } }
对目录的防盗链nginx配置为
location /images/ { valid_referers none blocked test.com *.test.com; if($invalid_referer) { #return 403; rewrite ^/ http://www.test.com/403.jpg; }
但是传统的防盗链也会存在一些问题,因为refer是可以伪造的, 所以可以使用加密签名的方式来解决这个问题。 什么是加密签名?就是当我们请求一个图片的时候,我要给他带一些签名过去,然后返回图片的时候我们判断下签名是否正确,相当于对一个暗号。
可以使用第三方模块HttpAccessKeyModule来解决防盗链的问题,我们需要去安装。
安装好有这样一个指令:
accesskey on|off 模块开关
accesskey_hashmethod md5 | sha-1 签名加密方式
accesskey_arg GET参数名称
accesskey_signature 加密规则
location ~.*\.(gif|jpg|png|flv|swf|rar|zip)$ { accesskey on; accesskey_hashmethod md5; accesskey_arg sign; accesskey_signature "mypass$remote_addr"; }
意思是mypass加客户端ip通过md5加密 图片文件代码:
<?php$sign = md5('mypass' . $_SERVER['REMOTE_ADDR']);echo '<img src="./photo.jpg?sign='. $sign .'">'; ?>
关于防盗链的原理是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。