下面是对 防盗链(Hotlinking protection) 的介绍和在 Node.js(Express)中的实现方式 👇
🕵️♂️ 一、什么是防盗链?
防盗链是指防止其他网站直接引用你站点的静态资源(如图片、视频、文件等)以节省自己带宽、消耗你的服务器资源的行为。
🔗 举个例子:
某站点直接使用:
<img src="https://yourdomain.com/images/banner.jpg" />
👉 会造成你的网站资源被别人“白嫖”。
🔐 二、防盗链的常见实现原理
主要是通过检查请求头中的 Referer 或 Origin 来判断请求来源:
Referer表示从哪个页面发起的请求。- 如果
Referer不属于你自己的网站,就拒绝访问资源。
🚧 三、Express 中实现防盗链
示例:限制只有本站能访问图片
const express = require('express');
const path = require('path');
const app = express();
// 防盗链中间件
app.use('/images', (req, res, next) => {
const referer = req.get('Referer');
if (!referer || referer.startsWith('http://localhost:3000')) {
// 本地或无 Referer(可选)
next();
} else {
res.status(403).send('403 Forbidden - 防盗链拦截');
}
});
// 静态资源目录
app.use('/images', express.static(path.join(__dirname, 'images')));
app.listen(3000, () => {
console.log('Server running at http://localhost:3000');
});
📂 四、其他防盗链实现方案(非 Node.js)
1. Nginx 配置防盗链
location /images/ {
valid_referers none blocked yourdomain.com *.yourdomain.com;
if ($invalid_referer) {
return 403;
}
}
2. 前端防护:资源隐藏链接 + Token 授权
- 图片 URL 设置为临时地址 + token(有效期短)
- 后端验证 token 合法性
3. CDN 防盗链设置
CDN 服务(如阿里云、七牛云、Cloudflare)一般提供防盗链设置面板,可以配置白名单域名。
💡 五、Tips 与注意事项
| 项目 | 建议 |
|---|---|
| 移动端请求 | 有些浏览器可能不带 Referer,需要兼容 |
| 内部访问 | 可以放行空 Referer |
| 静态资源缓存 | 防盗链结合 CDN 效果更佳 |
| 私有资源 | 配合 token 验证更安全 |
如果你的网站有图片、视频、文档等资源,建议一定加上防盗链逻辑,或者用带授权验证的接口包装资源链接。