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));
HTTP防盗链与反防盗链的更多相关文章
- Nginx中防盗链(下载防盗链和图片防盗链)操作记录
日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...
- Nginx中防盗链(下载防盗链和图片防盗链)及图片访问地址操作记录
日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...
- Referer反反盗链
0x00 前言 最近用Python非常多,确实感受到了Python的强大与便利.但同时我并没有相见恨晚的感觉,相反我很庆幸自己没有太早接触到Python,而是基本按着C→C++→Java→Python ...
- sevlet实现反盗链
有时候为了网站的版权和安全问题,我们需要为我们的网站应用设置防盗链,这样可以保证我们网站的一些资源的安全性.防盗链的主要是通过获取http的请求头referer的信息来和我们的网站地址做对比,如果相同 ...
- 关于python 爬虫遇到的反盗链
首先声明:目标网址是从别人案例里得到的,内容你懂的... 本来闲来无事,学习下爬虫的知识,遇到恶心的反盗链,好在目标网址防盗链简单,代码里注明了如何去查看目标网址的防盗检查: 防盗链原理 http标准 ...
- 通过设置Referer反"反盗链"
package cn.searchphoto.util; import java.io.File; import java.io.FileOutputStream; import java.io.In ...
- 对付"反盗链"
对付"反盗链" 某些站点有所谓的反盗链设置,其实说穿了很简单, 就是检查你发送请求的header里面,referer站点是不是他自己, 所以我们只需要像把headers的refer ...
- 跳过图片反盗链js
页面增加<iframe> <iframe id="ifa" style="display:none" /> 原来html: <im ...
- ORALCE 之LRU链与脏LRU链【转载】
今天是2013-09-09,时别n久的一篇经典文章,有被我在google发现了,再次转载一下.学习一下. 一.LRU链: 任何缓存的大小都是有限制的,并且总不如被缓存的数据多.就像Buffer cac ...
随机推荐
- 理解SQL【转http://blog.jobbole.com/55086/】
很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序语言.甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数式语言) ...
- 为什么 I2C(IIC)需要上拉电阻
源鑫问: I2C时钟线和数据线为什么要接上拉电阻? 因为 I2C 的 IO 是开漏的,所以需要上拉电阻. 延伸: 之前 hippo曾经说过有人将 IO 设置为 PP,可能会烧 IO. 之前以为 I2C ...
- 洛谷 4721 【模板】分治 FFT——分治FFT / 多项式求逆
题目:https://www.luogu.org/problemnew/show/P4721 分治FFT:https://www.cnblogs.com/bztMinamoto/p/9749557.h ...
- Oracle中的存储过程简单例子
--创建表create table TESTTABLE( id1 VARCHAR2(12), name VARCHAR2(32))select t.id1,t.name from TESTTAB ...
- etcd使用经历
etcd是一个开源的.分布式的键值对数据存储系统,提供共享配置.服务的注册和发现.etcd与zookeeper相比算是轻量级系统,两者的一致性协议也一样,etcd的raft比zookeeper的pax ...
- find 使用指南
find 使用方法整理 -name 按照文件名查找文件. -perm 按照文件权限来查找文件. -user 按照文件属主来查找文件. -group 按照文件所属的组来查找文件. - n表示文件 ...
- 20位活跃在Github上的国内技术大牛
登录|注册 leon-这个程序员不闷骚的博客 喜欢leon,有追求有原则有爱心的杀手,做一个有追求的程序员,代码是程序员的朋友,虽然没有热情,但是非常忠实.希望拥有一身绝世武功,再配一把绝世好 ...
- 学习FPGA需要做哪些
有些人比较差,做了一些介绍,有误导成分.有些人水平太高,介绍的很好,但是很多人依旧听不懂,得到的肯定很少.学习FPGA,在不同层次的人明显有不同的答案. 熟悉硬件描述语言语法,不需要什么都会,但是要记 ...
- juc线程池原理(五):拒绝策略示例
概要 拒绝策略介绍 线程池的拒绝策略,是指当任务添加到线程池中被拒绝,而采取的处理措施.当任务添加到线程池中之所以被拒绝,可能是由于:第一,线程池异常关闭.第二,任务数量超过线程池的最大限制. 线程池 ...
- Java-Runoob:Java 基础语法
ylbtech-Java-Runoob:Java 基础语法 1.返回顶部 1. Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍 ...
