web防盗链处理基于LNMP架构

了解到高并发解决方案,其中的流量优化——防盗链处理

 这儿我主要记录一下LNMP架构下的防盗链处理

首先我们得知道什么是盗链?

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

什么是防盗链?

     防止别人通过一些技术手段绕过本站资源展示页面,盗用本站的资源,让绕开本站资源展示页面资源链接失效。可以大大减轻服务器的压力。

防盗链的工作原理

   通过Referer或者 签名 的方式,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。一旦检测到来源不是本站即进行阻止或者返回指定的页面。

上面介绍了一些原理在介绍实现防盗链的方法之前给大家科普一下Referer

  下面是我随便抓取的一个HTTP的请求包,可以看出Referer是HTTP 报文 的Header头域,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。

PHP获取Referer的方式是: $_SERVER['HTTP_REFERER']  。

web防盗链处理基于LNMP架构_第1张图片

 

通过上面的了解,现在讲解一下防盗链的实现方法

1.Referer方法

     使用nginx模块:ngx_http_referer_module   用于阻挡来源非法的域名请求。

        涉及到的  指令:valid_referers      全局变量: $invalid_referer

   配置指令原型:  valid_referers  none | blocked |  server_name | string ....;

             none:  可省略,如果设置了,当Referer为空时,服务器也判定该来源是合法的

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

             server_name:我们信任的一些地址

  配置nginx.conf实现例子如下:

location  ~.*\.(gif|jpg|png|flv|swf|rar|zip)${
	
   valid_referers none blocked ccmanito.cn *.ccmanito.com;

   if($invalid_referer){

            #return 403;
            rewrite  ^/ http://www.ccmanito.cn/403.jpg;   
   } 
}

上述方法虽然可以防盗链但是有很大的不足,因为利用的是Referer来屏蔽,但是现在有很多方法可以伪造Referer,至于怎么去伪造Referer就是伪造HTTP请求头,方法很多,感兴趣的同学可以去get一下。

2.加密签名

  在请求的资源后面加入加密过的参数,通过这个参数来识别来源是否是可信任的

    nginx服务器使用第三方模块  HttpAccesskeyModule 实现防盗链

     第三方模块需要安装  自行安装

     模块一些配置项

          accesskey   on|off    模块开关

          accesskey_hashmethod   md5 | sha-1     签名加密方式   :这块服务器加密和PHP那块加密必须使用相同的加密方式

          accesskey_arg       GET参数的名称

          accesskey_signature  加密规则

nginx配置文件的实例:

location  ~.*\.(gif|jpg|png|flv|swf|rar|zip)${
	
   accesskey   on;
   accesskey_hashmethod   md5; 
   accesskey_arg  "key";
   accesskey_signature "mypass$remote_addr";
}

php实现方式如下:

';  //访问时带上参数,这时nginx会验证这个key

?>

使用加密签名方式很好的实现了防盗链,但是有个问题不得不考虑就是我们在写代码时,不得不在每个访问资源得URI后面加上这个加密参数。所以比较繁琐。

以上就是PHP+nginx实现防盗链的处理,方法很多,大家可以去看看其他的实现方法,可以做以比较,加深印象。


 

 





你可能感兴趣的:(php,web开发优化)