Node.js 防盗链
防盗链是指阻止其他网站直接引用自己服务器的资源(图片、视频等),避免带宽被消耗。
原理
通过检查 HTTP 请求头中的 Referer 字段,判断请求来源是否在白名单内。如果不是,拒绝提供资源(返回 403)。
Express 中实现
静态资源目录
js
import express from 'express'
const app = express()
// /assets/a.png → static/a.png
app.use('/assets', express.static('static'))防盗链中间件
js
const whitelist = ['localhost']
const preventHotLinking = (req, res, next) => {
const referer = req.get('referer')
if (referer) {
const { hostname } = new URL(referer)
if (!whitelist.includes(hostname)) {
return res.status(403).send('Forbidden')
}
}
next()
}
// 中间件放在静态资源配置之前
app.use(preventHotLinking)
app.use('/assets', express.static('static'))没有
referer的请求(如直接在地址栏打开)通常会放行,可按需求调整。
防盗链的其他方法
| 方法 | 说明 |
|---|---|
| Referer 检查 | 验证请求来源页面(最常用) |
| ACL 访问控制 | 只允许特定域名/IP 访问 |
| 插件/脚本 | CMS 平台提供的现成解决方案 |
| 水印技术 | 对图片添加水印标识来源 |