zoukankan      html  css  js  c++  java
  • PHP实现HTTP防盗链

    PHP实现HTTP防盗链

    2015-01-25 下午 15:00

    我们优化服务器时,有时为了尽量减少本站点的流量,从而防止外部站点盗用引用本站图片等资源。

    具体具体步骤:

    (1):在http.conf中打开Apache重写模块mod_rewrite.ko

    (2):在需要防盗链的网站或者目录下写.htaccess文件并指定防盗链规则。

    RewriteEngine On                                //开启重写模块

    RewriteBase /foruser/HTTP/                    //生效目录

    RewriteCond %{REQUEST_FILENAME} .*.(jpg|jpeg|gif|png) [NC]    

    //匹配所有图片

    RewriteCond %{HTTP_REFERER} !localhost [NC]

    //匹配HTTP_REFERER是否为localhost,不是时生效

    RewriteRule .* noadmit.png                //将png图片作为重写文件

    原理:若检测到网站不符合我们写的规则时,无论外部站点请求任何图片,均会被服务器重写为我们制定的图片,从而达到防盗链目的。

     

    具体实验:

    首先我们编写 rewrite.html 放在我们服务器的/foruser/HTTP/目录下

    <html>

        <head>

        <title>重写</title>

        </head>

     

        <body>

            <img src="./hello.png">

        </body>

    <html>

    然后我们分别用

    http://localhost/foruser/HTTP/rewrite.html

    http://127.0.0.1/foruser/HTTP/rewrite.html

    两个网址来调用我们刚编写的rewrite.html,由于我们的规则中有规定必须是localhost 才符合规则,故第二个网址127.0.0.1则不符合我们的规则,我们分别调用的结果如下

    使用http://localhost/foruser/HTTP/rewrite.html则正常显示图片

     

    而使用http://127.0.0.1/foruser/HTTP/rewrite.html

    显示的则是我们的防盗链制定的图片

     

     

     

    反盗链原理

    既然服务器使用HTTP_REFERER来匹配进行反防盗链,我们可以顺着这条线来进行反防盗链,即我们伪造HTTP_REFERER成服务器需要的信息,原理就是:服务器需要什么,我们则伪造什么。

     

    反防盗链php referrer.php内容如下

    <?php

    require('./http.class.php');//此类为上一篇日志的 php实现的http类

     

    $http = new Http('http://localhost/foruser/HTTP/hello.png');

     

        //我们伪造服务器需要的头信息Referer

    $http->setHeader("HTTP_REFERER: http://localhost");

     

    $res = $http->get();

    echo $res;

        //将图片信息截图保存下来

    file_put_contents('./a.png',substr(strstr($res,' '),4));

    ?>

     

    如图下图所示,我们只需要将http返回的内容中把主体信息截取下来另存为图片,则实现了图片的防盗链

     

     

     

     

     

     

     

    ********************************************
    * 博客园: http://www.cnblogs.com/lihaiyan/
    * 邮箱:1063385677@qq.com
    * QQ: 1063385677
    * Copyright ©2014 Lover雪儿
    ********************************************
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Codeforces Round #324 (Div. 2) D. Dima and Lisa 哥德巴赫猜想
    Codeforces Round #324 (Div. 2) C. Marina and Vasya 贪心
    Codeforces Round #324 (Div. 2) B. Kolya and Tanya 快速幂
    Codeforces Round #324 (Div. 2) A. Olesya and Rodion 水题
    使用spring-loaded实现应用热部署
    maven中properties标签定义变量
    java中的匿名内部类总结
    泛型类型限定和通配符类型限定
    基于ActiveMQ的Topic的数据同步——消费者持久化
    基于ActiveMQ的Topic的数据同步——初步实现
  • 原文地址:https://www.cnblogs.com/lihaiyan/p/4274148.html
Copyright © 2011-2022 走看看