防盗链
- 盗链是指在自己的页面上展示一些并不在自己服务器上的一些内容。 比如自己的网站引用别的网站的一些图片等资源。
- 如何防止未知网站引用自己网站的资源呢?
防盗链的工作原理
- 主要通过请求头的Refer字段来实现的。比如A网站的一个img标签的src指向B网站服务器下的一个资源,当加载img标签发送请求的时候会携带referer这个请求头字段,这个字段值是当前的url。B可以检测这个字段值来判断是否是未知网站来引用资源。
防盗链的实现(nodejs/experssjs)
- 这里用的是expressjs来举例。在静态资源中间件前设置一个拦截器中间件,来检测referer字段是否在预设的白名单中。
const white_host_list = ['localhost']
const preventLink = (req,resp,next) => {
const referer = req.get("referer")
if(referer){
const {hostname} = new URL(referer)
console.log(hostname);
if(!white_host_list.includes(hostname)){
console.log("禁止访问");
resp.status(403).send("外链禁止访问")
}
}
console.log("通行");
next()
}
app.use("/imgs",preventLink)
app.use(express.static('public'))