node 图片制作防盗链中间件

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 如果从自己的服务器中访问使用外链,浏览器会告诉外链方中,请求头会加一个refere 的请求头,用于标记该网页的来源服务器是哪个地址或者域名。如果是自己的服务访问自己的资源,浏览器是不会携带该请求头的或者携带的请求头和host是一样的,所以我们就可以使用referer这个浏览器所携带的特性。

node 图片制作防盗链中间件


我们可以在自己的网站上挂外链,就是别人的图片连接,这样对于自己的网站来说,节约不少的成本,但是对于提供方的来说,确实一笔带宽不小的消耗。,如果避免这个问题呢?


上代码


// 图片防盗链处理的中间件
const url = require('url');
const path = require('path');
module.exports = (req, res, next) => {
    // 判断后缀名是否为一个图片,如果不是图片,直接放行
    const extArr = ['.jpg', '.jpeg', '.png', '.gif'];
    const ext = path.extname(req.url);
    if (!extArr.includes(ext)) {
        next();
        return;
    }
    const oriHost = req.headers['host'];
    let refHost = req.headers['referer'];
    if (refHost) {
        refHost = url.parse(refHost).host;
    }
    // 别人在盗用你的图片l
    if (refHost && refHost !== oriHost) {
        req.url = '/upload/wuqing.gif'; // 重定向图片地址
    }
    next();
}


效果:


20201228152056567.png


真实的图片路径


20201228152213622.png


原理


如果从自己的服务器中访问使用外链,浏览器会告诉外链方中,请求头会加一个refere 的请求头,用于标记该网页的来源服务器是哪个地址或者域名。如果是自己的服务访问自己的资源,浏览器是不会携带该请求头的或者携带的请求头和host是一样的,所以我们就可以使用referer这个浏览器所携带的特性。


B服务器访问A服务的资源


20201228152813201.png


A服务器访问A服务的资源


20201228152859341.png

相关文章
|
3月前
|
JavaScript 前端开发 安全
使用 Node.js 插件给指定目录下的所有图片添加上文字水印
使用 Node.js 插件给指定目录下的所有图片添加上文字水印
66 0
|
4月前
|
中间件
|
8月前
|
JSON JavaScript 中间件
node.js中Express框架路由,中间件
node.js中Express框架路由,中间件
|
17天前
|
存储 JavaScript 前端开发
❤Nodejs 第十四章(node中间件multer的认识安装使用)
【4月更文挑战第14天】Multer是Node.js用于处理multipart/form-data的中间件,专注于文件上传。。基本用法包括设置存储引擎,如磁盘存储(DiskStorage)或内存存储(MemoryStorage),并指定处理单个或多个文件的方法。例如,`multer.single('file')`处理单个文件上传。存储引擎DiskStorage适合永久保存,而MemoryStorage适合临时处理。可以通过`limits`选项限制文件大小,实现不同类型的文件有不同的大小限制。
29 0
|
14天前
|
开发框架 JavaScript 中间件
深入探索Node.js的Express框架:使用与中间件详解
【4月更文挑战第30天】本文深入探讨了Node.js的Express框架,介绍了其作为Web开发的强大工具,主要聚焦于基本使用和中间件。Express是基于Node.js的Web应用框架,用于构建高效的应用和API。文章详细讲解了如何安装Express,创建简单应用,以及中间件的工作原理和应用,包括中间件的顺序、错误处理和挂载位置。此外,还提到了使用第三方中间件扩展功能。理解Express基础和中间件对于开发高质量Web应用至关重要。
|
18天前
|
编解码 前端开发 JavaScript
node实战——koa实现文件下载和图片/pdf/视频预览(node后端储备知识)
node实战——koa实现文件下载和图片/pdf/视频预览(node后端储备知识)
25 1
|
3月前
|
前端开发
【Node】一键生成博客标题图片
还在为写文章时找不到标题图片而困扰吗?举个例子,CSDN的博客文章如果你不给他图片的话,那么它会按照一些默认的标签图片作为你的文章封面,例如下面这样。
30 7
|
4月前
|
JavaScript 前端开发 中间件
Node.js—Express使用、Express 路由 、Express 中间件、托管静态资源、使用 Express 写接口、node.js链接sqlite数据库
Node.js—Express使用、Express 路由 、Express 中间件、托管静态资源、使用 Express 写接口、node.js链接sqlite数据库
127 0
|
6月前
|
编解码
node封装一个图片拼接插件
node封装一个图片拼接插件
75 0
|
8月前
|
JavaScript 前端开发
[Node] Node.js Webpack打包图片-Js-Vue
[Node] Node.js Webpack打包图片-Js-Vue