web资源防盗链

web资源防盗链

盗链:在自己的页面上展示一些并不在自己服务器上的内容,获得他人服务器上的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容,常见的是小站盗用大站的图片,音乐,视频,软件等资源,通过盗链的方法可以减轻自己服务器的负担,因为真实的空间和流量均是来自别人的服务器

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

工作原理:通过请求头中的referer或者签名,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址,一旦检测到来源不是本站即进行阻止或者返回制定的页面,通过计算签名的方式,判断请求是否合法,如果合法则显示,否则返回错误信息

实现方法:referer:nginx模块ngx_http_referer_module用于阻挡来源非法的域名请求,nginx指令valid_referers none | blocked | server_names | string…,none表示referer来源头部为空的情况,blocked表示referer来源头部不为空,但是里面的值被代理或者防火墙删除了,这些值都不以http://或者https://开头,server_names表示referer来源头部包含当前的server_names,全局变量$invalid_referer。不能彻底防范,只能提高门槛。也可以针对目录进行防盗链。

//在nginx的conf中配置
location ~.*.(gif|jpg|png|flv|swf|rar|zip)$
{
valid_referers none blocked zi.com *.zi.com;
if($invalid_referer)
{
#return 403;
rewrite ^/ http://www.zi.com/403.jpg;
}
}
  传统防盗链遇到的问题:伪造referer:可以使用加密签名解决

加密签名:使用第三方模块HttpAccessKeyModule实现Nginx防盗链。accesskey on|off 模块开关,accesskey_hashmethod md5|sha-1 签名加密方式,accesskey_arg GET参数名称,accesskey_signature 加密规则,在nginx的conf中设置

location ~.*.(gif|jpg|png|flv|swf|rar|zip)$
{
accesskey on;
accesskey_hashmethod md5;
accesskey_arg sign;
accesskey_signature “jason$remote_addr”;
}

<?php $sign = md5('jason'.$SERVER['REMOTE_ADDR']); echo ' ';

猜你喜欢

转载自blog.csdn.net/xghchina/article/details/114634601