前端黑科技-如何使用防盗链图片

2018-11-05 07:12:46javascriptjs

##如何使用防盗链图片

此文无意冒犯任何图片库或视频库,意在发扬技术本身,所以,这里就拿自己的服务器做实验

图片地址:

http://mmbiz.qpic.cn/mmbiz/PckLehCib4pkA0ZkSicaXt8icMxfeiaGIhWZSLAHv54DkLvLiaDAXCOibc9p73JDfQ2ic3MbKryjYoPrHxsjTf9NeJNUg/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

这是一个具有防盗链的图片,如果你直接拿来放到自己服务器,势必无法显示。

理论上讲
如果一个图片直接在浏览器打开连接能够访问到,那么,就可以在你的网站正常显示(可以完全忽视他的防盗链)

  • 建一个空的iframe
  • iframe设置src,内容就是图片或一段html
var body = document.querySelector("body");
var iframe = document.createElement("iframe");
var html = '<img src="/images/前端黑科技-如何使用防盗链图片/vsou.png"/>';
iframe.src = 'javascript:void(function(){document.open();document.write(\'' + html + '\');document.close();}())';
body.appendChild(iframe);

略微设置一下样式

iframe.style.position="fixed";
iframe.style.width="100%";
iframe.style.height="100%";
iframe.style.border=0;
iframe.style.zIndex=10;
iframe.style.top=0;
iframe.style.left=0;

上面一段代码有一个关键因素,就是在iframe之外,不能有任何其他图片该域名(示例图片所在域名)下的图片,否则功亏一篑

具体原理:
防盗链图片,是被服务器判断了header中的referer的,但是如果referer=null,那就可以拿到图片了

热门评论:

  • brook brook 2017-3-12 3:32 回复:

    就是在iframe之外,不能有任何其他图片该域名(示例图片所在域名)下的图片,否则功亏一篑
    RE:
    防盗链的原理就是判断referer,外面套 iframe 时不会带referer
    只是外面不能有同一张图片吧,感觉浏览器一个页面两张相同的图片地址时,请求会复用,导致后面的图片直接使用前面的请求结果。(chrome)
    (chrome canary上外面有相同图片,还是可以加载)


  • jsoncode jsoncode 2016-5-23 8:45 回复:
    自己来完善一下,iframe有沙盒功能

  • brook brook 2017-3-12 3:46 回复:

    另外,你示例的图片根本没开启防盗链。。

    • jsoncode jsoncode 2018-11-5 7:13 回复:brook
      图片地址我已经更换成微信的

  • jsoncode jsoncode 2017-3-15 1:03 回复:
    图片是微信的,不是我做防盗链,是腾讯,你可以拿一张放到你网站试试

  • sunyun029 sunyun029 2017-11-16 3:10 回复:

    微信里面视频出不来怎么办呢 试了很多方法都不行

    • jsoncode jsoncode 2017-11-17 11:15 回复:sunyun029
      视频不出来,不知道你想问什么问题呢?

    • sunyun029 sunyun029 2017-11-17 5:23 回复:sunyun029

      @jsoncode 就是微信公众号文章的视频一般不是iframe吗,然后我用iframe拉取公众号文章的时候视频就显示不出来