• 首页
  • nodejs
  • node.js express 路由小功能 - 图片防盗链

node.js express 路由小功能 - 图片防盗链

小功能: node.js web服务器的图片防盗链


原理:

http 请求包括 (请求头 header + 请求体 body )

请求头里面有一个属性: referer  此属性可以标识你所请求的资源来自哪里.

简单讲就是,我是网站 A ,当我去请求任何网络资源的时候, referer 属性都会标识我是 A  (  header.referer=A  )

因为我被标识了A ,如果我去B网站上获取资源 (视频,图片,文档.....)时,B 网站就可以检查一下请求头里的 referer 属性. 如果不是来自本身( B 网站 ) 那么就可以拒绝返回,或者返回替换后的资源 (比如一张警告提示图片....)


实现:

//图片外链判断
var referer = req.headers.referer;
if(referer.indexOf('http://yijiebuyi.com')===0||referer.indexOf('http://www.yijiebuyi')===0){
   next();
}else{
   res.send('盗链图片来自:<a href="http://yijiebuyi.com">一介布衣</a> 博客');
   return;
}

在你的启动文件路由入口加上上面的判断即可.

因为我的博客做了 301 跳转,所以整个博客路由入口有一个判断函数

//路由全局过滤函数
app.get('/*', function(req, res, next) {
    //这里面判断图片是否盗链
    if(盗链){
        res.send('盗链'); //这里你可以用fs 读取一张警告图片 response 出去.
        return;
    }else{
        next();  //如果是我自己的路由,会next 处理,去匹配自己的路由
    }
}


弊端:

http 请求头的 header 信息可以被篡改,所以如果想获取到你的资源还是有办法的,但是作为一个博客,就无所谓了,想获取图片你也可以篡改自己的 referer 试一试.^_^



回到顶部