Nodejs express-anti-chain ( 防盗链 )

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

Nodejs express-anti-chain ( 防盗链 )

express-anti-chain ( 防盗链 )

用来保护指定的静态资源不被其它网站使用 gitHub: https://github.com/pandashuai/express-anti-chain npm: https://www.npmjs.com/package/express-anti-chain

快速上手

var express = require('express');
var path = require('path');
var app = express();
var anti = require('express-anti-chain');
app.use(anti({
  // The whitelist that allows the referenced domain name is simple and regular
  ignore: ['localhost:*'],

// Anti-theft chain type exts: [’.png’, ‘.jpg’, ‘.jpeg’, ‘.gif’, ‘.swf’, ‘.flv’],

// Anti-theft chain default to the picture ---- or default: ‘/images/default.png’, default: { images: ‘/images/default.png’ },

// The strict parameter determines whether direct access is blocked strict: true,

// Print the log file ---- or log: console.log, log: function(url, referer, req){ console.log(‘request :’ + url + ’ from ’ + referer + ’ was blocked’); }

}));

// keep anti before use static app.use(express.static(path.join(__dirname, ‘public’))); app.set(‘port’, process.env.PORT || 8000);

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’)); });


2 回复

盗链是 hot linking …


在Node.js中使用Express框架来实现防盗链(anti-hotlinking)功能,可以通过中间件来检查请求的Referer头信息。Referer头信息通常包含了发起请求的页面的URL,通过验证这个头信息,我们可以控制哪些页面可以访问我们的资源。

以下是一个简单的示例代码,展示了如何在Express应用中实现防盗链:

const express = require('express');
const app = express();
const PORT = 3000;

// 允许的Referer白名单
const allowedReferers = [
  'https://example.com',
  'https://anotherexample.com'
];

// 中间件:检查Referer
function checkReferer(req, res, next) {
  const referer = req.headers.referer || req.headers.referrer;
  if (allowedReferers.includes(referer)) {
    next(); // 允许访问
  } else {
    res.status(403).send('Access Denied: Referer not allowed.'); // 拒绝访问
  }
}

// 应用中间件到所有路由
app.use(checkReferer);

// 示例路由
app.get('/', (req, res) => {
  res.send('Hello, World!');
});

app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

在这个示例中,我们定义了一个checkReferer中间件,它检查请求的Referer头信息是否在允许的白名单中。如果Referer不在白名单中,服务器将返回403状态码并拒绝访问。

请注意,Referer头信息可能被客户端禁用或伪造,因此防盗链不能完全防止资源被非法访问,但它可以作为一种额外的安全措施来使用。

回到顶部