防盗链[nodejs]

防盗链

  • 盗链是指在自己的页面上展示一些并不在自己服务器上的一些内容。 比如自己的网站引用别的网站的一些图片等资源。
  • 如何防止未知网站引用自己网站的资源呢?

防盗链的工作原理

  • 主要通过请求头的Refer字段来实现的。比如A网站的一个img标签的src指向B网站服务器下的一个资源,当加载img标签发送请求的时候会携带referer这个请求头字段,这个字段值是当前的url。B可以检测这个字段值来判断是否是未知网站来引用资源。

防盗链的实现(nodejs/experssjs)

  • 这里用的是expressjs来举例。在静态资源中间件前设置一个拦截器中间件,来检测referer字段是否在预设的白名单中。
// 测试用的 127.0.0.1
// 只有用html标签加载的资源才有 referer字段 如img等
// 白名单
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'))
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值