web资源防盗链

2019-07-08  本文已影响0人  你与时光终会散

一、什么是防盗链?

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

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

二、防盗链的工作原理

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

Referer
Nginx模块 ngx_http_referer_module 用于阻止来源非法的域名请求
Nginx指令valid_referers,全局变量$invalid_referer
valid_referers none | blocked | server_names | string ...
none: Referer来源头部为空的情况
blocked:Referer来源头部不为空,但是里面的值被代理或者防火墙删除,这些值都不以http://或者https://开头
service_names: Referer来源头部包含当前的service_names

location ~.*\.(gif|jpg|png|flv|swf|rar|zip)$
{
  valid_referers none blocked imooc.com *.imooc.com;
  if($invalid_referer)
  {
    return 403;
    //rewrite ^/http://wwww.imooc.com/403.jpg
  }
}

针对目录的防盗链

location /images/
{
  valid_referers none blocked imooc.com *.imooc.com;
  if($invalid_referer)
  {
    return 403;
    //rewrite ^/http://wwww.imooc.com/403.jpg
  }
}

2、加密签名
传统防盗链遇到的问题
伪造Referer
可以通过加密签名解决
使用第三方模块HttpAccessKeyModule实现Nginx防盗链
accesskey on | off 模块开关
accesskey_hashmethod md5 | sha—1 签名加密方式
accesskey_arg GET参数名称
accesskey_sign 加密规则

location ~.*\.(gif|jpg|png|flv|swf|rar|zip)$
{
    accesskey on;
    accesskey_hashmethod md5;
    accesskey_arg "sign";
    access_siginature "mypass$remote_addr"; //客户端ip
}

<?php
$sign = md5('jason' . $_SERVICE['REMOTE_ADDR']);
?>
<img src="/logo.png?sign=<?=$sign?>"

上一篇 下一篇

猜你喜欢

热点阅读