防盗链技术及破解方法详细解析
盗链的定义
此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。
为什么会产生盗链
一般浏览有一个重要的现象就是一个完整的页面并不是一次全部传送到客户端的。如果请求的是一个带有许多图片和其它信息的页面,那么最先的一个Http请求被传送回来的是这个页面的文本,然后通过客户端的浏览器对这段文本的解释执行,发现其中还有图片,那么客户端的浏览器会再发送一条Http请求,当这个请求被处理后那么这个图片文件会被传送到客户端,然后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面也许要经过发送多条Http请求才能够被完整的显示。基于这样的机制,就会产生一个问题,那就是盗链问题:就是一个网站中如果没有起页面中所说的信息,例如图片信息,那么它完全可以将这个图片的连接到别的网站。这样没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现,这样显然,对于那个被利用了资源的网站是不公平的。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。
如何实现防盗链
要实现防盗链,我们就必须先理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。有了referer跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。
如果想对自己的网站进行防盗链保护,则需要针对不同的情况进行区别对待。如果网站服务器用的是apache,那么使用apache自带的Url Rewrite功能可以很轻松地防止各种盗链,其原理是检查referer,如果referer的信息来自其他网站则重定向到指定图片或网页上。
如果服务器使用的是IIS的话,则需要通过第三方插件来实现防盗链功能了,现在比较常用的一款产品叫做ISAPI_Rewrite,可以实现类似于apache的防盗链功能。另外对于论坛来说还可以使用“登录验证”的方法进行防盗链。
在IE或firefox浏览器中,我们可以使用HttpWatch抓包工具抓取网页的表头信息,该信息就包含了referer段内容,该内容反映的就是用户是从哪个地址到达当前页面的。下面使用PHP语句模拟“限制来路链接只能是本网站地址”的防盗链技术:
<?phpif(isset($_SERVER['HTTP_REFERER'])){//通过字符串处理函数匹配来路URL是否以本站域名打头,是,则说明非盗链if(strpos($_SERVER['HTTP_REFERER']),'http://www.thanks.live')==0){echo "您是通过本站其他页面链接到该页面";}else{echo "本站禁止盗链";}}esle{echo "您是通过类似直接输入当前URL的方式进入该页面的";}?>由于referer值是极易伪造的,所以上述方法只是简单的防盗链。
关于防御方法,有以下3点:
1、不允许referer为空(不建议,因在某些开启隐私模式的浏览器中,或https页面引用下,referer是空的)
2、地址变更(lighttpd的是根据有效时间,nginx的根据是md5)
3、登录校验(如必须登录网站帐号后才能访问)
4.可以借鉴效仿crsf token令牌
二、应对方法
前端脚本
实现代码:
|
调用方式:
|
关于防御方法,有以下3点:
1、不允许referer为空(不建议,因在某些开启隐私模式的浏览器中,或https页面引用下,referer是空的)
2、地址变更(lighttpd的是根据有效时间,nginx的根据是md5)
3、登录校验(如必须登录网站帐号后才能访问)
后端代理:
那么如何才能绕过防盗链对所需资源进行抓取???
php实战
在通常的处理过程中,如果在自己的站点直接引入百度的图片
这里写图片描述
(⊙o⊙)哦,引入链接失败咯啊!!!那么怎么用curl处理
毕竟要爬取必要的信息
$url="http://c.hiphotos.baidu.com/image/w%3D210/sign=ed30880babec8a13141a50e1c7029157/d52a2834349b033be1a9503e17ce36d3d539bd35.jpg";
//$url = str_replace("http:/","http://",$url);
$dir = pathinfo($url);
$host = $dir['dirname'];
$refer = $host.'/';
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_REFERER, $refer);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
header("Content-type: image/jpeg");
print( $data );
然后么,因为直接print了,所以结果是这样的
这里写图片描述
python实战
Flask响应请求有以下几种方法:
- render_template 返回模板文件
- jsonify 返回json格式的数据
- Response 自定义返回的数据及类型
当服务端需要返回图片或者各种格式的文件时,就需要使用Response进行自定义返回
评价;
后端返回base64数据流,浪费带宽,有点本末倒置
cdn方案:
寻找开源图床,免费引用
吐槽:
百度终究没有阿里的气量与格局,别人这时后免费开放算力时百度在干啥,
防盗链技术及破解方法详细解析相关推荐
- http协议以及防盗链技术
http协议,又称为超文本传输协议,顾名思义,http协议不仅能传输文本,还能传输图片,视频,压缩包等文件,http协议是建立在tcp/ip协议的基础之上的,http协议对php程序员来讲可以说是重中 ...
- 修改mysql数据库默认字符集_MySQL数据库之修改mysql默认字符集的两种方法详细解析...
本文主要向大家介绍了MySQL数据库之修改mysql默认字符集的两种方法详细解析 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. (1) 最简单的修改方法,就是修改mysql的m ...
- 单机十万并发HLS直播服务器的防盗链技术
单机十万并发HLS直播服务器的防盗链技术 本文主要介绍基于HLS直播服务器的十万并发防盗链实现 录制切片服务器 HTTP 服务器 (nginx) LuaLib 录制切片服务器 录制切片服务器负责把直播 ...
- 文章抓取显示盗链 php,web资源盗链与防盗链技术解析
摘要:什么是资源盗链?简单的说,就是某些不法的网站,通过在其自身网站程序里未经过许可非法调用其他网站的资源,然后在自己的网站上显示这些调用的资源,达到了填充自身网站显示的效果,但是浪费了调用资源网站的 ...
- web 下载 防盗链技术(二)
朋友有个音乐站www.54star.net,让我做的程序,全是320K的mp3,320K的MP3文件通常是普通56kmmp3大小的6,7倍,所以人稍微多些服务器带宽就吃紧.服务器经常是因为带宽不够远程 ...
- Nginx防盗链,Nginx访问控制, Nginx解析php相关配置, Nginx代理
2019独角兽企业重金招聘Python工程师标准>>> Nginx防盗链 Nginx防盗链配置需要与不记录日志和过期时间结合在一起,因为都用到了location. 打开配置文件,注释 ...
- 方舟手游服务器能修改密码吗,明日方舟怎么改密码_明日方舟改密码方法详细解析一览[多图]...
明日方舟是一款末日策略生存类手游,在游戏中想要赢得胜利是需要考验大家的思考能力的.很多小伙伴最近都在询问要怎么在游戏中修改密码,虽然说明日方舟暂时还没有开放该名功能,但是修改密码还是可以的.接下来要给 ...
- linux的Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理介绍
Nginx防盗链 思路与httpd一样,配置也不难,但要与过期时间.不记录日志配置结合起来. 1.配置文件内容 [root@gary-tao test.com]# vim /usr/local/ngi ...
- 跨链技术如何破解区块链的可扩展性难题?
区块链技术的初衷是将所有数据的流转.智能合约的运行等放在同一条链上进行,打造一个全球一体化的共享开放平台.但是,在此后的实践和应用过程中,诸多技术和商业因素的限制让我们越来越发现这样一个美好愿景有些不 ...
最新文章
- php程序员进阶篇 [十问PHP程序员]
- asp.net mysql 事务_ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)
- 斯坦福大学深度学习与自然语言处理第一讲:引言
- 终身学习这件事,比你想的还要重要
- 问题 E: 括号规则
- set()与get()详细解答(C#)
- sqlite3的基本操作
- 多次fork问题(python 版)
- inheritConstructorStealing.js
- 再谈子网划分方法与子网划分示例
- RTKLIB之RTCM解析
- 校招行测笔试--资料分析
- php的在线问卷调查_php 在线问卷调查程序一
- 红蜘蛛显示器测试软件,红蜘蛛5校色仪怎么用?显示器校色及测试色域和色彩精准度详细教程...
- css 画一条竖线 或横线
- linux 查看文件命令
- 「UG/NX」BlockUI 标签/位图Label
- 北大光华管理学院公开课北京站
- vscode快速注释代码
- 二进制位运算 左移与右移