HTTP防盗链与反防盗链

HTTP防盗链

通过上一次,我没对HTTP请求不再那么陌生了。防盗链无非就是别人来请求自己网站的信息,用于其他网站,那么如果我们能识别请求是来自那个网站,如果是外网,那么就重定向等其他处理。但在web服务器层面,服务器根据HTTP协议的Referer头信息来判断该请求是来自外网还是内网。到此基本了解原理。接下来进行操作。

  • 加载重写模块

apache配置文件中去掉重写模块前 #

  • 在需要防盗链的网站或目录,建 .htaccess 文件,写重写规则
RewriteEngine On
#对请求的文件是图片的需要重写
RewriteCond %{REQUEST_FILENAME} .*\.(jpg|jpeg|gif|png|html) [NC]
#对网站外网访问进行重写
RewriteCond %{HTTP_REFERER} !localhost [NC]
RewriteRule  .*   www.baidu.com

反防盗链

既然防盗链是通过头信息 Referer 来判断,那么我们就伪造一个头信息进行采集等操作。

class  implement_socket implements php_socket
{
    protected $http_tpye = ‘HTTP/1.1‘;
    protected $url = ‘‘;
    protected $request_type = ‘‘;
    protected $lines = ‘‘;
    protected $fsoket_open = ‘‘;
    protected $port = ‘‘;
    protected $errstr = ‘‘;
    protected $timeout = 0;
    public $parse_url = ‘‘;
    protected $content_type = ‘‘;
    protected $content_length = 0;
    protected $body = ‘‘;
    protected $header_info = array();

    function __construct($url, $request_type = ‘‘, $port = 80, $timeout = 5)
    {
        $this->url = $url;
        $this->request_type = $request_type;
        $this->port = $port;
        $this->timeout = $timeout;
        $this->parse_url = parse_url($url);
        //链接
        $this->connect();

    }

    /*
     *设置请求行
     * */
    public function get()
    {
        $this->content_type = ‘text/html‘;
        $this->lines = $this->request_type . ‘ ‘ . $this->parse_url[‘path‘] . ‘ ‘ . $this->http_tpye;
        return $this->request();
    }

    public function post($param)
    {
        //设置头信息
        $this->content_type = ‘application/x-www-form-urlencoded‘;
        $data = $this->body_info($param);
        $this->header_info[] = ‘Content-Length:‘ . strlen($data);
        $this->lines = $this->request_type . ‘ ‘ . $this->parse_url[‘path‘] . ‘ ‘ . $this->http_tpye;
        $this->body = $data;
        return $this->request();
    }

    public function request()
    {
        $getinfo = ‘‘;
        /*echo $this->lines . "\r\n" . implode("\r\n", $this->header_info) . " \n\r\n" . $this->body;
        exit();*/
        //链接成功进行写入头信息
        fwrite($this->fsoket_open, $this->lines . "\n" . implode("\n", $this->header_info) . "\n\r\n" . $this->body);
        while (!feof($this->fsoket_open)) {
            $getinfo .= fgets($this->fsoket_open, 2048);
        }
        fclose($this->fsoket_open);
        return $getinfo;
    }

    /*
     * 链接
     * */
    public function connect()
    {
        try {
            $this->fsoket_open = fsockopen($this->parse_url[‘host‘], $this->port, $this->errstr, $this->timeout);
        } catch (Exception $exception) {
            echo ‘connect is failed :‘ . $exception->getMessage() . ‘r\n‘ . $this->errstr;
        }
    }

    /*
     * 设置头信息
     * */
    public function header_info($head_arraay = array())
    {
        $this->header_info = $head_arraay;
    }

    /*
     * 设置主体
     * */
    public function body_info($param = ‘‘)
    {
        // 生成 URL-encode 之后的请求字符串
        return $param;
    }
}

//防盗链
$http = new  implement_socket(‘http://localhost/smarty/explain.png‘, ‘GET‘);
$http->header_info(array(
    ‘Referer:http://localhost/smarty/‘,
    "Host:" . $http->parse_url[‘host‘]
));
//写入文件里
//echo strstr($http->get(),‘\r\n\r\n);
file_put_contents(‘caiji.png‘,substr(strstr($http->get(),"\r\n\r\n"),4));
时间: 2024-08-02 22:41:39

HTTP防盗链与反防盗链的相关文章

图片盗链与反盗链

1.反盗链的原理 就是使用Request Headers中的Referer信息,它会告诉服务器我是从哪里请求过来的.因此,服务端就可以根据这个参数信息,进行反盗链. 破解方法: 1)a标签的话,可以加上rel="noreferrer",这个是h5一个属性,存在兼容性问题 2)https://github.com/knu/noreferrer 3)<meta name="referrer" content="never">,整个页面的所

微信图片反防盗链的方法

微信图片反防盗链的方法(此图片来自微信公众平台,未经允许不可饮用) (未找到出处,如有侵犯,请及时告知,谢谢) 因为在<img>标签中引用微信的图片 <?php $img = "http://mmbiz.qpic.cn/mmbiz /ibbmVK4uC7iacR4KGWnyJHvQxl276DK6eGibiafBFTLObjBtKU9hGZoiaaiaD49r4u9otkQzCGAPAbWlPVzrpyCRaCVA/0"; ?> <img src=&quo

图片跳板,图片反防盗链

用于反防盗链图片,图片代理,原理:反盗链图片一般允许空referrer访问,所以使用服务端远程伪造referrer抓取图片,然后输出image/* 格式达到反防盗链的效果. 前台使用:<img src="跳板地址/GetImg?imgUrl=原图片地址" /> public FileResult GetImg(string imgUrl) { Uri url = new Uri(imgUrl); HttpWebRequest req = (HttpWebRequest)We

sevlet实现反盗链

有时候为了网站的版权和安全问题,我们需要为我们的网站应用设置防盗链,这样可以保证我们网站的一些资源的安全性.防盗链的主要是通过获取http的请求头referer的信息来和我们的网站地址做对比,如果相同,说明是通过我们网站点击进来访问该资源,那么允许访问,如果为空.或者不相等,那么就说明不是从我们的网站过来的链接,这时就可以拒绝访问,或者重定向到我们的网站,然后再去访问我们的资源信息. servlet实现防盗链的具体代码如下所示: package com.servlet; import java.

反盗链

盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率.受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益. 网站盗链会大量消 耗被盗链网站的带宽,而真正的点击率也许会很小,严重损害了被盗链网站的利益.早期的盗链一般是一些比较小的网站盗取一些有实力的大网站的地址,盗链的目 标比较有针对性,现如今,一些大型的网站也已经开始把盗链的目光锁定在了整个互联网上,窃

通过设置Referer反&quot;反盗链&quot;

package cn.searchphoto.util; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; import java.util.zip.GZIPInputStream; /** * 下载远程网站的图片,通过设置

对付&quot;反盗链&quot;

对付"反盗链" 某些站点有所谓的反盗链设置,其实说穿了很简单, 就是检查你发送请求的header里面,referer站点是不是他自己, 所以我们只需要像把headers的referer改成该网站即可,以cnbeta为例: #... headers = { 'Referer':'http://www.cnbeta.com/articles' } #... headers是一个dict数据结构,你可以放入任何想要的header,来做一些伪装. 例如,有些网站喜欢读取header中的X-Fo

01-区块链入门之 区块链介绍一-大叔思维

1.区块链技术是什么? 总的来说,区块链是一套协议,一组规范,而不是具体代码.项目. 理解了这套协议,你可以基于现有的技术,以不同的语言去实现它.我们也无法用一句简单的话去概况什么是区块链,站的角度不同,得到的结论也不一样. 金融业: 区块链是一个分布式的账本,是一个分布式的银行记账系统. 密码学者:区块链是使用密码学构建的去信任网络. 码农:区块链就是一个确保最终一致性的分布式数据库. 维基百科:区块链(Blockchain)是一种分布式数据库,起源自比特币.区块链是一串使用密码学方法相关联产

深圳源中瑞区块链技术_区块链数字货币网站交易平台系统开发

深圳源中瑞区块链技术_区块链数字货币网站交易平台系统开发13826558593现代货币从物理属性上区分,货币可分为实物货币和虚拟货币两类,实物货币包括纸币和金属货币,而虚拟货币则包括电子货币和数字货币.从信用属性上区分,货币又可分为法定货币和私有货币两种.自2009年1月比特币区块链上线以来,这个世界上又发明出来一种新型的货币--数字货币.数字货币从物理属性上来看,与电子货币一样也是一串串数字,但数字货币的数字又与电子货币的数字不同,它是由一行行计算机代码组成.法定货币是主权政府信用背书,私有货