什么是盗链

盗链就是别人网站上的东西实际上是从你的服务器上获取过来的,拿图片来说,别人的网站的图片链接是使用的你服务生成的图片的链接,用户请求别人网站加载的图片实际上是从你服务器上将图片的资源请求走的

如何防止

image.png
你看http请求中圈住的地方
host:是你服务器的地址
Referer: 是发送请求的地址
这个连个请求头是浏览器请求服务器时自动添加的
我们可以判断这个两个值是否一样,如果一样那就不没被盗链

代码

  1. const path = require('path');
  2. const url = require('url')
  3. // 图片防盗链
  4. module.exports = (req, res, next ) => {
  5. //获取访问路径
  6. const reqPath = req.path;
  7. // 获取访问文件后缀名
  8. const extName = path.extname(reqPath)
  9. const list = ['.jpg', '.png', '.gif']
  10. // 获取服务器地址
  11. const host = req.headers.host;
  12. // 获取浏览器在请求头放置的请求原地址
  13. let referer = req.headers.referer;
  14. if(!list.includes(extName)) {
  15. next()
  16. return;
  17. }
  18. if(referer) {
  19. referer = url.parse(referer).host
  20. }
  21. // 服务器地址与请求地址不一样,说明别其他网址盗用
  22. if(referer && host != referer) {
  23. req.url = '/img/logo.82b9c7a5.png';
  24. // res.status(500).send('not font');
  25. }
  26. next()
  27. }
  1. const express = require('express');
  2. const app = express();
  3. // 图片防盗链
  4. app.use(require('./imgProtect'))