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 试一试.^_^