图片防盗链
比如百度百科的一些图片,右键复制了图片的网页地址,在<img>标签中使用该地址时,显示的图片却提示’该图片仅限百度用户内部交流使用‘。这种情况就是做了图片防盗链的处理
图片防盗链
·盗链是指服务提供商自己不提供服务的内容,直接在自己的网站上向最终用户提供其他服务提供商的服务内容,在请求头有个Referer属性,查看是否域名与server的一致
·从一个网页跳转,或者网页引用到某个资源文件时,HTTP请求中带有referer表示来源网页的url
·用浏览器直接访问图片网址时没有referer
/**
* 图片防盗链
* Referer:http://localhost:63342/node201509/20.express_ext/img.html
*/
var express = require('express');
var path = require('path');
var app = express();
//判断用户是否有权限访问此图片
app.use('/img',function(req,res,next){
var whitelist = ['b.zf.cn'];//设置白名单,允许 哪些主机过来请求
var referrer = req.headers.referer;
console.log(referrer);
if(!referrer)
return next();
var referHost = require('url').parse(referrer).host.split(':')[0];
if(referHost === req.host || whitelist.indexOf(referHost)!=-1){
return next();
}
res.sendFile(path.join(__dirname,'img','wrong.jpg'));
});
app.use(express.static(__dirname));
//返回HTML
app.get('/',function(req,res){
res.sendFile(path.join(__dirname,'img.html'));
});
app.listen(8080);
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> 本服务器访问 <img src="/img/baidu.png" alt=""> <br/> a.zf.cn服务器访问 <img src="http://a.zf.cn:8080/img/baidu.png" alt=""> <br/> b.zf.cn服务器访问 <img src="http://b.zf.cn:8080/img/baidu.png" alt=""> </body> </html>