美文网首页技术分享
防盗链的原理以及实现

防盗链的原理以及实现

作者: 程序员小饭 | 来源:发表于2021-05-08 10:11 被阅读0次

大家在访问网站的时候,经常会看到图片展示不出来的时候,如下图

image

大家有没有想过这是为什么嘛?其实这是一种简单的防盗链的处理,那么盗链是什么呢?为什么需要防呢?咱们今天来一起揭开它神秘的面纱。

盗链的概念

盗链是指在自己的页面上展示一些并不在自己服务器上的一些内容, 获取别人的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容。 一般被盗链的都是图片、 音乐、视频、软件等资源。通过盗链的手段可以减轻自己服务器的负担

比如我直接在自己的网站上

<img src="http:www.baidu.com/imagepath/image.png">

这样就可以直接展示百度的图片,但是实际上是无法展示的(如下图),之所以无法展示是因为百度的图片做过防盗链处理

image

防盗链的工作原理

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

防盗链的实现方法

Nginx模块,
ngx_http_referer_module用于阻挡来源非法域名的请求 nginx指令valid_refers,全局变量$invalid_refer
对资源的防盗链nginx配置为

location ~.*\.(gif|jpg|png|flv|swf|rar|zip)$
{
    valid_referers none blocked test.com *.test.com;   //加none的目的是确保浏览器可以直接访问资源
    if($invalid_referer)
    {
        #return 403;  // 直接返回403
        rewrite ^/ http://www.test.com/403.jpg;//返回指定提示图片
    }
}

对目录的防盗链nginx配置为

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

但是传统的防盗链也会存在一些问题,因为refer是可以伪造的, 所以可以使用加密签名的方式来解决这个问题。 什么是加密签名?就是当我们请求一个图片的时候,我要给他带一些签名过去,然后返回图片的时候我们判断下签名是否正确,相当于对一个暗号。

可以使用第三方模块HttpAccessKeyModule来解决防盗链的问题,我们需要去安装。

安装好有这样一个指令:

accesskey on|off 模块开关

accesskey_hashmethod md5 | sha-1 签名加密方式

accesskey_arg GET参数名称

accesskey_signature 加密规则

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

意思是mypass加客户端ip通过md5加密 图片文件代码:

<?php
$sign = md5('mypass' . $_SERVER['REMOTE_ADDR']);
echo '<img src="./photo.jpg?sign='. $sign .'">';
?>

以上就是防盗链的两种形式,欢迎伙伴们进行讨论留言。

相关文章

  • 防盗链的原理以及实现

    盗链的概念 盗链是指在自己的页面上展示一些并不在自己服务器上的一些内容获取别人的资源地址,绕过别人的资源展示页面,...

  • 防盗链的原理以及实现

    大家在访问网站的时候,经常会看到图片展示不出来的时候,如下图 大家有没有想过这是为什么嘛?其实这是一种简单的防盗链...

  • 这9道面试题,给你答案都不一定能看明白,但面试必问,建议看完

    1. synchronized的实现原理以及锁优化? synchronized的实现原理 synchronized...

  • 2018-03-20

    1、synchronized 的实现原理以及锁优化? 2、volatile 的实现原理? 3、Java 的信号灯?...

  • 并发

    1、synchronized 的实现原理以及锁优化? 2、volatile 的实现原理? 3、Java 的信号灯?...

  • NMF、CNMF(原理+python实现)

    这篇简书主要解决两个问题:1、NMF的原理以及代码实现2、CNMF的原理以及代码实现 NMF(非负矩阵分解) NM...

  • vuex原理以及实现

    vuex官方文档 Vuex是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存...

  • JSONP原理以及实现

    原理 利用script标签的src属性的不受同源策略的限制,其主要的实现方式就是创建callback方法、动态创建...

  • vuex的原理以及实现

    vuex的主要作用是做数据管理,数据单向流,在vue的项目中基本上都会用到,对于初学者会感到很迷糊,觉的很神秘,其...

  • 时间戳防盗链(七牛云 oss 为例)的实现过程

    每个对象存储服务商都会提供时间戳防盗链的支持,原理基本一样,本文以七牛云为例,服务端是用 Go 实现的 API。 ...

网友评论

    本文标题:防盗链的原理以及实现

    本文链接:https://www.haomeiwen.com/subject/nkiddltx.html