Nodejs express-anti-chain ( 防盗链 )
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’));
});
盗链是 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头信息可能被客户端禁用或伪造,因此防盗链不能完全防止资源被非法访问,但它可以作为一种额外的安全措施来使用。