一、原理
先说说防盗链的原理,http 协议中,如果从一个网页跳到另一个网页,http 头字段里面会带个 Referer。图片服务器通过检测 Referer 是否来自规定域名,来进行防盗链。
如果盗用网站是 https 的 protocol,而图片链接是 http 的话,则从 https 向 http 发起的请求会因为安全性的规定,而不带 referer,从而实现防盗链的绕过。
比如现在在 cnode 这里,由于我们启用了 https,所以任何 http 的图片几乎都可以直接贴过来并显示了。
官方输出图片的时候,判断了来源(Referer),就是从哪个网站访问这个图片,如果是你的网站去加载这个图片,那么Referer就是:你的网站地址;;你网站地址,肯定没在官方的白名单内,所以就看不到图片了。
因此,若不发送Referer,也就是没有来源。那么官方那边,就认为是从浏览器直接访问的,所以就能加载正常的图片了。
二、应对方法
破解盗链
实现代码:
function showImg( url ) { var frameid = 'frameimg' + Math.random(); window.img = '<img id="img" src=\''+url+'?'+Math.random()+'\' /><script>window.onload = function() { parent.document.getElementById(\''+frameid+'\').height = document.getElementById(\'img\').height+\'px\'; }<'+'/script>'; document.write('<iframe id="'+frameid+'" src="https://www.wuiso.com/" frameBorder="0" scrolling="no" width="100%"></iframe>'); }
调用方式:
showImg('图片地址');
1、不允许referer为空(不建议,因在某些开启隐私模式的浏览器中,或https页面引用下,referer是空的)
2、地址变更(lighttpd的是根据有效时间,nginx的根据是md5)
3、登录校验(如必须登录网站帐号后才能访问)
关于解决微信图文防盗链方案
推荐方法一:
<meta name="referrer" content="never">
就这么一句话,把它放到<head>头里就可以了。记得要把其他影响图片的东西给删了,不然会冲突。
========================================================================================
我自己本人的,因为我希望点击一个链接时跳转到微信图文,然后在该页面点击返回图标从微信图文返回之前的APP页面,我在自己网站的HTML里的div中嵌套一个<iframe>标签,src链接到微信公众号里的图文,跑出来后只能显示文字,不能加载显示图片,百度了说是微信的防盗链,有说在<head>标签里加<meta name="referrer" content="never">但好像也只能在手机的访问显示,也有把图片的data-src改成src(在浏览器右键图片检查时可以看到这些属性,更改时是可以显示的,但我不知道怎么保,其他不太清楚,反正我不知道什么鬼),但我页面只是一个div里嵌套iframe标签链接到微信公众号的图文,没其他的,找了一天,为此还白花了15块买个文档来也没用,最后终于找到了一个只用js就可以破解微信图文防盗链的,感谢来自博客园的“前端小透明”
地址:http://www.cnblogs.com/xiaomingSun/p/6761708.html
如果你只是通过点击一个链接跳转到微信图文的话,直接一个标签链接到你的目的地址就行,但是这样你不能返回之前的页面,所以我在div里写放了个返回图片,再在div里嵌套一个<iframe>标签,链接到微信图文,这样在移动端跑出来后就只能看到文字,图片都没有加载显示出来,这和http的referrer有关系,具体原理请百度微信防盗链原理了解,下面就是我的<body>代码:
<body> <div class="container"> <!--S-顶部栏--> <div class="header-box"> <div class="left-return"> <a href="https://www.wuiso.com/"> <img src="https://www.wuiso.com/~/Images/icon/left30X30.png" width="15" height="15" /> </a> </div> <div class="middle">资讯中心</div> </div> <!--E-顶部栏--> <!--S-iframe资讯栏--> <div class="news-box"> <!—如果加入了下面的js,则此处的src链接地址可以不写--> <iframe id="myframe" src="http://mp.weixin.qq.com/s/d1NIaupcZT_yeZnz4QRS1A"> </iframe> </div> <!--E-iframe资讯栏--> </div> </body> 加入js <script> //破解iframe微信推文(图片)防盗链 $.ajaxPrefilter(function (options) { if (options.crossDomain && jQuery.support.cors) { var http = (window.location.protocol === 'http:' ? 'http:' : 'https:'); options.url = http + '//cors-anywhere.herokuapp.com/' + options.url; } }); var share_link = "http://mp.weixin.qq.com/s/d1NIaupcZT_yeZnz4QRS1A"; //微信文章地址 $.get( share_link, function (response) { //console.log("> ", response); var html = response; html = html.replace(/data-src/g, "src"); var html_src = 'data:text/html;charset=utf-8,' + html; $("iframe").attr("src", html_src); }); </script>
==========================================================================================
百度其他方法一:
例子:
<div class="M_detail-con" id="ddb-branch-introduction"> {php echo htmlspecialchars_decode($hd['description'])} //微信内容 </div>
引入下面js
<script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script> <script> $("#ddb-branch-introduction img").each(function () { var img = $(this); if (img.parent().attr("id") != "ad1") { var img_src = img.attr("src"); var frameid = 'frameimg' + Math.random(); window.img = '<img id="img" style="width:100%" src=\'' + img_src + '?' + Math.random() + '\' /><script>window.onload = function() { parent.document.getElementById(\'' + frameid + '\').height = document.getElementById(\'img\').height+\'px\'; }<' + '/script>'; img.parent().append('<iframe id="' + frameid + '" src="https://www.wuiso.com/" frameBorder="0" scrolling="no" width="100%"></iframe>'); img.remove(); } }); </script>
===============================================================================================================================
百度其他方法二:
<?php $p=$_GET['p']; $pics=file($p); for($i=0;$i< count($pics);$i++) { echo $pics[$i]; } ?>
使用方法:将以上内容文件保存成p.PHP上传到根目录
然后在前端对应页面加入以下代码(修改你的域名进去即可)
改图片地址方法:
<script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script> <script> $(function() { var pattern = /^http:\/\/mmbiz/; var patterns = /^https:\/\/mmbiz/; var mmsns = /^http:\/\/mmsns/; var mmsnss = /^https:\/\/mmsns/; var prefix= 'http://你的域名/p.php?p='; $("img").each(function(){ var src = $(this).attr('src'); if(pattern.test(src)){ var newsrc = prefix+src; $(this).attr('src',newsrc); } if(patterns.test(src)){ var newsrc = prefix+src; $(this).attr('src',newsrc); } if(mmsns.test(src)){ var newsrc = prefix+src; $(this).attr('src',newsrc); } if(mmsnss.test(src)){ var newsrc = prefix+src; $(this).attr('src',newsrc); } }); }); </script>
-----正文到此结束-----
发表评论 取消回复