来源:Node.js

防盗链

盗链(Hotlinking)是指在网页或其他网络资源中,通过直接链接到其他网站上的图片、视频或其他媒体文件,从而显示在自己的网页上

这种行为通常会给被链接的网站带来额外的带宽消耗和资源浪费,而且可能侵犯原始网站的版权

为了防止盗链,网站管理员可以采取一些措施:

  • 通过HTTP引用检查:网站可以检查HTTP请求的来源,如果来源网址与合法的来源不匹配,就拒绝提供资源
  • 使用Referrer检查:网站可以检查HTTP请求中的Referrer字段,该字段指示了请求资源的来源页面,如果Referrer字段不符合预期,就拒绝提供资源
  • 使用访问控制列表(ACL):网站管理员可以配置服务器的访问控制列表,只允许特定的域名或IP地址访问资源,其他来源的请求将被拒绝
  • 使用防盗链插件或脚本:一些网站平台和内容管理系统提供了专门的插件或脚本来防止盗链,这些工具可以根据需要配置,阻止来自未经授权的网站的盗链请求
  • 使用水印技术:在图片或视频上添加水印可以帮助识别盗链行为,并提醒用户资源的来源

编码

前端无法伪造referer,但后端可以

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import express from 'express'

const app = express()

// 来源白名单,可以配置域名、IP
const whiteList = ['localhost']

// 防盗链中间件
const preventHotLinks = (req, res, next) => {
// 获取referer(当前响应地址),如果直接打开资源,那么referer为undefined
const referer = req.get('referer')

// 判断referer是否属于白名单
if(referer) {
console.log(referer)
const { hostname } = new URL(referer)
// 如果不属于白名单,则拦截
if(!whiteList.includes(hostname)) {
res.status(403).send('禁止访问')
return
}
}

// 如果属于白名单,放行
next()
}

app.use(preventHotLinks)


// 配置静态资源目录
// 参数1:访问路径 参数2:静态资源目录
// 这样一来,访问路径应该为/assets/文件名,而不是/static/文件名
app.use('/assets', express.static('static'))

app.listen(11451, () => {
console.log('http://localhost:11451')
})