php破解防盗链技术

发送http请求

构造referer信息

在Http协议中,头信息里,有一个重要的选项: Referer

Referer: 代表网页的来源,即上一页的地址

具体方法http.class.php

// http请求类的接口
interface Proto {
    // 连接url
    function conn($url);

    //发送get查询
    function get();

    // 发送post查询
    function post();

    // 关闭连接
    function close();
}

class Http implements Proto {

    const CRLF  = "\r\n";

    protected $errno = -1;
    protected $errstr = ‘‘;
    protected $response = ‘‘;

    protected $url = null;
    protected $version = ‘HTTP/1.1‘;
    protected $fh = null;

    protected $line = array();
    protected $header = array();
    protected $body = array();

    public function __construct($url) {
        $this->conn($url);
        $this->setHeader(‘Host: ‘ . $this->url[‘host‘]);
    }

    // 此方法负责写请求行
    protected function setLine($method) {
        $this->line[0] = $method . ‘ ‘ . $this->url[‘path‘] . ‘?‘ .$this->url[‘query‘] . ‘ ‘. $this->version;
    }

    // 此方法负责写头信息
    public function setHeader($headerline) {
        $this->header[] = $headerline;
    }

    // 此方法负责写主体信息
    protected function setBody($body) {
         $this->body[] = http_build_query($body);
    }

    // 连接url
    public function conn($url) {
        $this->url = parse_url($url);
        // 判断端口
        if(!isset($this->url[‘port‘])) {
            $this->url[‘port‘] = 80;
        }

        // 判断query
        if(!isset($this->url[‘query‘])) {
            $this->url[‘query‘] = ‘‘;
        }

        $this->fh = fsockopen($this->url[‘host‘],$this->url[‘port‘],$this->errno,$this->errstr,3);
    }

    //构造get请求的数据
    public function get() {
        $this->setLine(‘GET‘);
        $this->request();
        return $this->response;
    }

    // 构造post查询的数据
    public function post($body = array()) {
        $this->setLine(‘POST‘);

        // 设计content-type
        $this->setHeader(‘Content-type: application/x-www-form-urlencoded‘);

        // 设计主体信息,比GET不一样的地方
        $this->setBody($body);

        // 计算content-length
        $this->setHeader(‘Content-length: ‘ . strlen($this->body[0]));

        $this->request();

        return $this->response;
    }

    // 真正请求
    public function request() {
        // 把请求行,头信息,实体信息 放在一个数组里,便于拼接
        $req = array_merge($this->line,$this->header,array(‘‘),$this->body,array(‘‘));
        //print_r($req);

        $req = implode(self::CRLF,$req);
        //echo $req; exit;

        fwrite($this->fh,$req);

        while(!feof($this->fh)) {
            $this->response .= fread($this->fh,1024);
        }

        $this->close(); // 关闭连接
    }

    // 关闭连接
    public function close() {
        fclose($this->fh);
    }

}

$http = new Http(‘http://localhost/apple.jpg‘); //本机服务器www目录下的apple.jpg图片

$http->setHeader(‘Referer: http://localhost‘);  //构造Referer信息
$res = $http->get();
//print_r($res);
file_put_contents(‘./aa.png‘,substr(strstr($res,"\r\n\r\n"),4));

  

时间: 2024-11-16 09:51:01

php破解防盗链技术的相关文章

http请求详解,防盗链技术_韩顺平PHP视频听课笔记

韩顺平PHP视频听课笔记 第84讲 http请求详解,防盗链技术 1,  通过httpwatch插件来抓取http请求内容 2,  http1.0短连接, http1.1长连接 http1.0短连接:每次通信时间很短,效率极低,已被废除. http1.1长连接:通话时间长.只要现在基本都采用http1.1. 只要Connection的状态为keep-alive,就说明是通话状态 3,  http是tcp/ip协议的一个应用层协议,http也是我们web开发的基础. 4,  一个问题:看一个tes

php防盗链技术

在Http协议中,头信息里,有一个重要的选项: Referer Referer: 代表网页的来源,即上一页的地址 如果是直接在浏览器上输入地址,回来进来,则没有Referer头. 这也是: 为什么服务器知道我们的图片是从哪儿引用的,也知道我们的客户从哪个网站链接点击过来的. 问题: 如何配置apache服务器,用于图片防盗链? 原理: 在web服务器层面,根据http协议的referer头信息,来判断. 如果来自站外,则统一重写到一个很小的防盗链提醒图片上去. 具体步骤: 1:打开apache 

php笔记05:http协议中防盗链技术

倘若我们自己在电脑上写了一个网站文件(可以是html,php文件等等),但是只希望本机可以访问这个文件,不希望别的电脑访问就需要这里的防盗链技术 1.我们在本地写了一个import.php文件: 而且这里import.php文件的内容是如下: <?php //没有防止 //获取REFERER if(isset($_SERVER['HTTP_REFERER'])){ //取出来 //判断 $_SERVER['HTTP_REFERER']是不是以http://localhost/http开始,这里涉

防盗链技术终极解决方案(squid+cookie)

防盗链技术现状:1.通过识别Referer确认请求来源页面2.Apache,squid等都能对Referer进行识别3.通过ActiveX显示的内容不向服务器提供Referer Header(例如,Flash,WindowsMedia视频等)4.流媒体的RTSP协议也不向服务器提供Referer Header5.通过服务器端程序代码实现防盗链应用现状:1.对图片.HTML等可以实现防盗链2.无法对Flash,WindowsMedia视频(MMS,RTSP)实现防盗链3.服务器端程序代码实现的防盗

[php]referer应用--http防盗链技术

1.防盗链的理解 所谓防盗链是防止其他的网站引用自己网站的资源连接,比如图片.视频等等,但是并不会阻碍从自己网站上享受资源的用户,这就要求能够将其他网站的连接请求阻止 2.防盗链的原理 其实从自己网站使用资源的时候不是由浏览器直接请求资源的,肯定是通过在自己网站上点击,然后从这个页面跳转到资源,无论怎么样,用户是通过自己的网站页面作为中介来访问资源,就类似通过类中定义的方法来访问受保护的变量一样,因此在发向服务器的http请求中就有一个字段为referer用来表明来源于何处,假如是从自己网站发出

简单的防盗链技术(过滤器原理)

public class ImgFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { System.out.println("过滤器初始化..."); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws

网站资源被盗链的:预防方法 VS 网站资源防盗链的:破解技巧

资源被盗链:(简明定义) 下载者不是从你的网站直接下载资源,而是通过其他盗链网站提供的你的下载资源链接进行下载你的服务器资源! http://baike.baidu.com/view/272422.htm 一>预防方法: 方法1:判断引用地址这个方法是最早及最常见的方法.所谓判断引用地址,就是判断浏览器请求时HTTP头的Referer字段的 值,这个值在asp.net里面可以用 Request.UrlReferrer属性取得.几个例子来说,在正常情况下当用户在浏览 http://uushare.

谈谈网站的防盗链(Filter过滤器)

导语:明明引用了一个正确的图片地址,但显示出来的却是一个红叉或写有“此图片仅限于***网站用户交流沟通使用”之类的“假图片”(下图便是网易博客的防盗链效果).用嗅探软件找到了多媒体资源的真实地址用下载软件仍然不能下载.下载一些资源时总是出错,如果确认地址没错的话,大多数情况都是遇上防盗链系统了.常见的防盗链系统,一般使用在图片.音视频.软件等相关的资源上. 一.什么是防盗链系统:         在确保地址正确的情况下,不能下载相应的资源,均是受到防盗链系统的影响,那么究竟什么是防盗链系统呢?防

php防盗链实现

有时我们希望访问我们网站的用户只能通过特定的链接或页面进入我们的网站页面,此时就需要实现防盗链技术.这就用到了http协议中的referer内容过滤. 例如在我们本地有一个网页,路径为:http://localhost/http/fdl_one.php,内容如下: <a href="fdl_two.php">click here to see more</a> 还有另一个网页,路径为:http://localhost/http/fdl_three.php,内容如