Nodejs express 防盗链模块

Nodejs express 防盗链模块

安装

npm install express-anti-leech

使用

var express = require('express'),
  path = require('path'),
  app = express();
  
var AntiLeech = require('express-anti-leech');

// 允许引用的域名白名单
var hosts = ['localhost', 'localhost:8004'];

// 反盗链类型
var exts = ['.png', '.jpg', '.jpeg', '.gif', '.swf', '.flv'];

// 盗链默认指向图片
var pictrue = "/images/default.png";

app.use(AntiLeech({
  allow: hosts,
  exts: exts,
  log: console.log, // 你也可以使用自己的方法来记录
  default: pictrue
}));

// 请在调用静态资源之前先使用反盗链模块
app.use(express.static(path.join(__dirname, 'public')));
app.set('port', process.env.PORT || 8004);

app.get('/', function(req, res) {
  res.redirect("/index.html");
});

app.listen(app.get('port'), function() {
  console.log("Express test server listening on http://localhost:" + app.get('port'));
});

测试效果图: express_anti_leech_1.jpg express_anti_leech_2.jpg <code>localhost:8004</code> 在白名单之中,而 <code>127.0.0.1:8004</code> 不在白名单中,所以 <code>localhost:8004</code> 下访问正常,而 <code>127.0.0.1:8004</code> 下则被重定向到指定的图片。


11 回复

有意思


Nodejs Express 防盗链模块

防盗链是一种常见的网络安全措施,用于防止其他网站未经允许直接引用或嵌入你的资源(如图片、视频等),从而保护你的服务器带宽和资源。本文将介绍如何使用 express-anti-leech 模块来实现这一功能。

安装

首先,你需要通过 npm 安装 express-anti-leech 模块:

npm install express-anti-leech

使用

接下来,我们将展示如何在 Express 应用程序中使用 express-anti-leech 模块来设置防盗链。

var express = require('express');
var path = require('path');
var app = express();

// 引入 express-anti-leech 模块
var AntiLeech = require('express-anti-leech');

// 设置允许引用的域名白名单
var hosts = ['localhost', 'localhost:8004'];

// 设置需要保护的文件扩展名
var exts = ['.png', '.jpg', '.jpeg', '.gif', '.swf', '.flv'];

// 设置盗链时默认返回的图片路径
var picture = "/images/default.png";

// 使用 AntiLeech 中间件
app.use(AntiLeech({
  allow: hosts,
  exts: exts,
  log: console.log, // 日志输出函数
  default: picture
}));

// 设置静态资源目录
app.use(express.static(path.join(__dirname, 'public')));

// 设置端口
app.set('port', process.env.PORT || 8004);

// 路由定义
app.get('/', function(req, res) {
  res.redirect("/index.html");
});

// 启动服务器
app.listen(app.get('port'), function() {
  console.log("Express test server listening on http://localhost:" + app.get('port'));
});

示例说明

  1. 引入模块:我们首先引入了 expresspath 模块,并创建了一个 Express 应用实例。
  2. 配置白名单:我们定义了一个数组 hosts,其中包含允许引用资源的域名。
  3. 配置文件类型:我们定义了一个数组 exts,其中包含了需要保护的文件扩展名。
  4. 配置默认图片:我们定义了一个字符串 picture,指定了当请求被判定为盗链时,应该返回的默认图片路径。
  5. 使用中间件:我们使用 AntiLeech 中间件,并传入了上述配置。
  6. 设置静态资源:我们设置了静态资源目录,以便 Express 可以正确地提供静态文件。
  7. 启动服务器:最后,我们启动了 Express 服务器,并监听指定的端口。

测试效果

你可以尝试从不同的域名访问你的资源,例如 localhost:8004127.0.0.1:8004。根据上述配置,只有 localhost:8004 是允许的,而 127.0.0.1:8004 会被重定向到默认图片。

通过这种方式,你可以有效地防止未经授权的站点直接引用你的资源,保护你的服务器资源和带宽。

不错,不过我觉得还是在nginx之类的做好点、

不过通常这类问题都是nginx来做的

感谢各位的支持。 关于 nginx 反向代理,个人觉得,node.js 既然已经包含了 webserver 的部分,有些东西用 node.js 来实现也是不错的。只不过目前 node 的 webserver 还不够给力。 而在已经用了 nginx 的情况下(在 node.js 之外又包了一层 webserver),使用 nginx 必然是效率更高的。 本模块的目的就是在没有使用 nginx 的情况下,用来防盗链。或者用了 nginx 但是不想配置的那么分散的人用的(非大型项目,算是程序员常见的懒惰行为吧。不过,说不定以后 node 更新,大家可以不用 nginx 反向代理了 ;) )。

[@lellansin](/user/lellansin) 我用websocket模块构建过反向代理,挺好用的,个人觉得效率不比nginx差呀。

挺棒的,支持一下~!

为了实现一个简单的 Node.js Express 防盗链模块,我们可以使用 express-anti-leech 这个第三方库。下面是详细的步骤和代码示例:

安装

首先需要安装 express-anti-leech 模块:

npm install express-anti-leech

使用

接下来是具体的使用方法:

const express = require('express');
const path = require('path');
const app = express();

const AntiLeech = require('express-anti-leech');

// 允许引用的域名白名单
const hosts = ['localhost', 'localhost:8004'];

// 反盗链类型
const exts = ['.png', '.jpg', '.jpeg', '.gif', '.swf', '.flv'];

// 盗链默认指向图片
const picture = "/images/default.png";

app.use(AntiLeech({
  allow: hosts,
  exts: exts,
  log: console.log, // 你也可以使用自己的方法来记录
  default: picture
}));

// 请在调用静态资源之前先使用反盗链模块
app.use(express.static(path.join(__dirname, 'public')));

app.set('port', process.env.PORT || 8004);

app.get('/', (req, res) => {
  res.redirect('/index.html');
});

app.listen(app.get('port'), () => {
  console.log(`Express test server listening on http://localhost:${app.get('port')}`);
});

解释

  1. 安装模块:使用 npm install express-anti-leech 安装所需的模块。
  2. 配置白名单:定义允许访问的域名白名单(如 hosts)。
  3. 配置文件类型:定义需要防盗链保护的文件类型(如 exts)。
  4. 设置默认图片:定义如果请求被判定为盗链,则返回的默认图片路径(如 picture)。
  5. 应用中间件:使用 AntiLeech 中间件处理防盗链逻辑,并确保在加载静态资源之前调用。
  6. 启动服务器:启动 Express 服务器并监听指定端口。

这样就实现了基本的防盗链功能。当请求不在白名单中的域名时,会自动返回默认图片。

回到顶部