图片防盗链原理及破解别人图片防盗链方法

  • 内容
  • 相关

图片防盗链原理及破解别人图片防盗链方法

一、原理

先说说防盗链的原理,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="javascript:parent.img;" frameBorder="0" scrolling="no" width="100%"></iframe>');
}
调用方式:

showImg('图片地址');
关于防御方法,有以下3点:

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="#">

                    <img src="~/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="javascript:parent.img;" 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>


评论后还是无法显示下载地址?清理缓存-点我试试
热度:595° 评分:8.7 发布时间: 2019年11月24日

本文标签:

版权声明:若无特殊注明,本文皆为《小洋vier》原创,转载请保留文章出处。

本文链接:图片防盗链原理及破解别人图片防盗链方法 - https://www.wuiso.com/post-4286.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注