防盗链原理及实现其实这是一个简单的防盗链过程,那么什么是盗链呢?为什么要防范呢?今天就让我们一起揭开它的神秘面纱。盗链的概念盗链是指在自己的页面上展示一些不在自己服务器上的内容,获取别人的资源地址,绕过别人的资源展示页面,直接在自己的页面上将这些内容提供给终端用户。一般会盗链图片、音乐、视频、软件等资源。您可以通过热链接减轻服务器的负担。比如我直接上我的网站这种方式可以直接显示百度图片,但实际上是无法显示(如下图),无法显示的原因是因为百度的图片做了防盗链处理。防盗链的工作原理是通过Refer或者签名,网站可以检测到目标网页的来源网页,如果是资源文件,就可以追踪到,一旦检测到网页地址的来源不是从该站点,它将阻止或返回到指定页面。Nginx防盗链模块的实现方法,ngx_http_referer_module用于拦截非法域名的请求。nginx命令valid_refers,资源全局变量$invalid_refer防盗链nginx配置位置~.*\.(gif|jpg|png|flv|swf|rar|zip)${valid_referersnoneblockedtest.com*.test.com;//加none的目的是保证浏览器可以直接访问资源if($invalid_referer){#return403;//直接返回403rewrite^/http://www.test.com/403.jpg;//返回指定提示图片}}nginx防盗链目录配置为location/images/{valid_referersnoneblockedtest.com*.test.com;如果($invalid_referer){#return403;重写^/http://www.test.com/403.jpg;}但是传统的防盗链也存在一些问题,因为refer可以被伪造,所以可以使用加密签名来解决这个问题。什么是加密签名?也就是我们请求图片的时候,我要带上一些签名给他,然后我们返回图片的时候,判断签名是否正确,相当于一个密码。可以使用第三方模块HttpAccessKeyModule来解决防盗链问题,我们需要安装。安装后,有这么一条命令:accesskeyon|offmoduleswitchaccesskey_hashmethodmd5|sha-1签名加密方式accesskey_argGET参数名accesskey_signature加密规则位置~.*\.(gif|jpg|png|flv|swf|rar|zip)${accesskeyon;accesskey_hashmethodmd5;accesskey_arg标志;accesskey_signature"mypass$remote_addr";}表示mypass加上客户端ip通过md5加密后的图片文件代码:以上是防盗链的两种形式,欢迎讨论和评论。
