图片防盗链

比如百度百科的一些图片,右键复制了图片的网页地址,在<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>
原文地址:https://www.cnblogs.com/web-fengmin/p/6430126.html