Skip to content

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 平台提供的现成解决方案
水印技术对图片添加水印标识来源