防盗链 返回首页

发表于 2022-01-20 | 本文共 292 字

防盗链

对于绝大多数网站而言,都会想让自己网站的视频和图片,免被盗用,毕竟视频流量,花的都是白花花银子,为了防止第三方引用链接访问我们的图片或视频等,消耗服务器资源和网络流量,我们可以在服务器上做防盗链限制。

refer方式实现防盗链

工作模块:ngx_http_referer_module

作用变量:$invalid_referer,全局变量

配置域:server, location

配置

server {   
    listen 80;   
    
    ······  
        
    location ~* \.(gif|jpg|jpeg|png|bmp|swf|webp)$ {
    # location /upload/ {
    # 资源防盗链(指定目录or指定文件类型)
        access_log off;
        valid_referers none blocked server_names *.baidu.com 127.0.0.1 localhost ~\.google\. ~\.baidu\. ~\.qq\.;
        if ($invalid_referer) {
            rewrite ^/ https://baidu.com/img/test.jpg;
        }
    }
}
# valid_referers:指定资源访问是通过以下几种方式为合法,即域名白名单,去掉则阻止所有非本站请求。
# none:"Referer"来源头部为空的情况,允许缺失的头部访问。
# blocked:"Referer"来源头部不为空,但是里面的值被代理或者防火墙删除了,这些值都不以http://或者https://开头,允许referer没有对应值的请求。
# server_names:"Referer"来源头部包含当前的server_names(当前域名),若referer站点域名与server_name中本机配的域名一样允许访问。
# 若去掉none blocked则通过浏览器也无法访问,防止别人通过右键另存图片地址。
# access_log off:关闭nginx日志功能。

测试

首先建立一个虚拟主机作为盗链机,安装nginx(安装过程略)

修改index.html文件,加入防盗链主机图片

vi /usr/local/nginx/html/index.html

<body>标签中加入图片

注意:将图片改为自己的图片,并且这个图片需要在别的可以访问到的地址,如果是在防盗链机上就访问不到这个图片了

<br>daolianpicture</br>
<img src="http://baidu.com/img/test.webp">

访问盗链机

Snipaste_2022-01-20_22-28-41

防盗链机修改nginx配置

vi /usr/local/nginx/conf/nginx.conf

在server段加入上述配置后,重启nginx,访问盗链机,即可看到防盗链已生效,返回了我们自定义的图片

Snipaste_2022-01-20_22-42-57


签名方式实现防盗链

前面说过可以把none去掉,防止别人通过右键另存图片地址,当然别人也可以通过伪造referer来进行访问

可以通过签名方式从根本上解决防盗链问题

工作模块:第三方模块HttpAccessKeyModule

配置

server {
    listen 80;
    
    ······
        
    location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {
        accesskey on;
        accesskey_hashmethod md5;
        accesskey_arg "key";
        accesskey_signature "mypass$remote_addr";
    }
}
# accesskey on | off: 模块开关
# accesskey_hashmethod md5|sha—1: 签名加密方式
# accesskey_arg: GET参数名称
# accesskey_sign: 加密规则

测试

测试同refer方式实现防盗链一样,不再多述


如果你觉得本文对你有帮助,不妨请我喝杯咖啡