Ⅰ 防盗链的代码处理流程
此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。
为什么会产生盗链
一般浏览有一个重要的现象就是一个完整的页面并不是一次全部传送到客户端的。如果请求的是一个带有许多图片和其它信息的页面,那么最先的一个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令牌
二、应对方法
前端脚本
实现代码:
function showImg( url ) {
var frameid = 'frameimg' + Math.random();
window.img = '<img id="img" src=\''+url+'?'+Math.random()+'\' /><script>window.onload = function() { parent.document.getElementById(\''+frameid+'\').height = document.getElementById(\'img\').height+\'px\'; }<'+'/script>';
document.write('<iframe id="'+frameid+'" src="javascript:parent.img;" frameBorder="0" scrolling="no" width="100%"></iframe>');
}
调用方式:
showImg('图片地址');
关于防御方法,有以下3点:
1、不允许referer为空(不建议,因在某些开启隐私模式的浏览器中,或https页面引用下,referer是空的)
2、地址变更(lighttpd的是根据有效时间,nginx的根据是md5)
3、登录校验(如必须登录网站帐号后才能访问)
后端代理:
那么如何才能绕过防盗链对所需资源进行抓取???
php实战
在通常的处理过程中,如果在自己的站点直接引入网络的图片
这里写图片描述
(⊙o⊙)哦,引入链接失败咯啊!!!那么怎么用curl处理
毕竟要爬取必要的信息
$url="https://gss0..com/9fo3dSag_xI4khGko9WTAnF6hhy/image/w%3D210/sign=/.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进行自定义返
Ⅱ 怎么解决网站防盗链
防盗链原理: http标准协议中有专门的字段记录referer一来可以追溯上一个入站地址是什么二来对于资源文件,可以跟踪到包含显示他的网页地址是什么。因此所有防盗链方法都是基于这个Referer字段网上比较多的2种一种是使用apache文件FileMatch限制,在httpd.conf中增加 ( 其实也可以将把下面的语句存成一个.htaccess文件),并放到你的网站的根目录(就是www/html目录),这样子别人就没有办法盗连你的东东了~~SetEnvIfNoCase Referer "^ http://yahoo.com/" local_ref=1Order Allow,DenyAllow from env=local_refAllow from 127.0.0.1这种很方便禁止非允许访问URL引用各种资源文件请大家注意,把第一句"^ http://yahoo.com/"改为你的网站,比如我的网站是: http://www.linji.cn我应该这么写的"^ http://www.linji.cn/"第二种是使用rewrite,需要增加apache的mode_rewrite,支持.htaccess文件目录权限限制在虚拟主机根目录增加.htaccess文件,描述从定向,把非本地地址refer的图片文件都从定向到警告图片或者警告网页上。首先要确认你的服务器或空间的服务器解译引擎为Apache2,还有支持.htaccess客户设置文件,如果你有自己的服务器就请先对./conf/httpd.conf 文件做以下修改找到:#LoadMole rewrite_mole moles/mod_rewrite.so把前面的 # 给去丢找到等一个 AllowOverride None 改为 AllowOverride All重启Apache2服务器接下就是做一个 .htaccess 文件了,其 .htaccess 文件内容为RewriteEngine onRewriteCond %{HTTP_REFERER} !^ http://aaoo.net/.*$ [NC]RewriteCond %{HTTP_REFERER} !^ http://aaoo.net$ [NC]RewriteCond %{HTTP_REFERER} !^ http://www.aaoo.net/.*$ [NC]RewriteCond %{HTTP_REFERER} !^ http://www.aaoo.net$ [NC]RewriteRule .*.(jpg|jpeg|gif|png|bmp|rar|zip|exe)$ http://down.yoyo.com.ru/err.html [R,NC]其中有色的地方都是要改为你的:红色:就是改为你提供下载页面的地址,也就是只有通过这个地址才可以下载你所提供的东东。蓝色:就是要保护文件的扩展名(以|分开),也就是说以这些为扩展名的文件只有通过红色的地址才可以访问。绿色:如果不是通过红色的地址访问蓝色这些为扩展名的文件时就回重定向到绿色地址上。这个方法有个好处是,不同的虚拟主机用不同的描述定义。接下就是怎么用 .htaccess 文件来实现防盗链了。首先要在空间上建两个目录(当然目录名随你),一个为 web 另一个为 down ,web 是用来放下载页面的(或下载程序),down 当然就是放你提供的东东的啦,把 .htaccess 文件的红色部分改一下,改为http://你的域名/web。蓝色部分改为你要保护文件的扩展名。绿色部分改为http://你的域名/web。改后保存.htaccess 文件把它上传到 down 目录。还有第三种:我在解决plog禁止盗链的时候,发现个问题,也算个好方法。plog把所有资源都自己管理起来,用resserver.php来动态显示,这样统一的入口方便添加权限操作。同时造成上面2种方法无法使用,因为不再是apache直接访问资源文件,而是php通过文件读取。因此只能在代码中做手脚:在读取资源文件输出之前,加如下判断代码引用$referer = $_SERVER['HTTP_REFERER'];$selfurl = $_SERVER['HTTP_HOST'];if(false == strpos($referer,$selfurl)){echo '非法盗链!';exit(1);}这里有些偷懒,直接看引用地址中是否包含host地址,不过原理就是这样,判断referer是否是本站地址。我们常常在下载的时候,也碰到盗链网站无法下载,报盗链的问题。要下载这类文件最简单的方法就是改referer比方flashget中,网址下面的"引用"一栏中,直接填写下载地址就可以了。
Ⅲ php 高并发解决思路解决方案
php 高并发解决思路解决方案,如何应对网站大流量高并发情况。本文为大家总结了常用的处理方式,但不是细节,后续一系列细节教程给出。希望大家喜欢。
一 高并发的概念
在互联网时代,并发,高并发通常是指并发访问。也就是在某个时间点,有多少个访问同时到来。
二 高并发架构相关概念
1、QPS (每秒查询率) : 每秒钟请求或者查询的数量,在互联网领域,指每秒响应请求数(指 HTTP 请求)
2、PV(Page View):综合浏览量,即页面浏览量或者点击量,一个访客在 24 小时内访问的页面数量
--注:同一个人浏览你的网站的同一页面,只记做一次 pv
3、吞吐量(fetches/sec) :单位时间内处理的请求数量 (通常由 QPS 和并发数决定)
4、响应时间:从请求发出到收到响应花费的时间
5、独立访客(UV):一定时间范围内,相同访客多次访问网站,只计算为 1 个独立访客
6、带宽:计算带宽需关注两个指标,峰值流量和页面的平均大小
7、日网站带宽: PV/统计时间(换算到秒) * 平均页面大小(kb)* 8
三 需要注意点:
1、QPS 不等于并发连接数(QPS 是每秒 HTTP 请求数量,并发连接数是系统同时处理的请求数量)
2、峰值每秒请求数(QPS)= (总 PV 数*80%)/ (六小时秒数*20%)【代表 80%的访问量都集中在 20%的时间内】
3、压力测试: 测试能承受的最大并发数 以及测试最大承受的 QPS 值
4、常用的性能测试工具【ab,wrk,httpload,Web Bench,Siege,Apache JMeter】
四 优化
1、当 QPS 小于 50 时
优化方案:为一般小型网站,不用考虑优化
2、当 QPS 达到 100 时,遇到数据查询瓶颈
3、当 QPS 达到 800 时, 遇到带宽瓶颈
优化方案:CDN 加速,负载均衡
4、当 QPS 达到 1000 时
优化方案: 做 html 静态缓存
5、当 QPS 达到 2000 时
优化方案: 做业务分离,分布式存储
五、高并发解决方案案例:
1、流量优化
防盗链处理(去除恶意请求)
2、前端优化
(1) 减少 HTTP 请求[将 css,js 等合并]
(2) 添加异步请求(先不将所有数据都展示给用户,用户触发某个事件,才会异步请求数据)
(3) 启用浏览器缓存和文件压缩
(4) CDN 加速
(5) 建立独立的图片服务器(减少 I/O)
3、服务端优化
(1) 页面静态化
(2) 并发处理
(3) 队列处理
4、数据库优化
(1) 数据库缓存
(2) 分库分表,分区
(3) 读写分离
(4) 负载均衡
5、web 服务器优化
(1) nginx 反向代理实现负载均衡
(2) lvs 实现负载均衡
Ⅳ nginx 解决微信文章图片防盗链
解决图片防盗链的方法就是要把请求 头的 referer 去掉就可以。
我们可以用 nginx 反向代理微信图片的链接,并把请求的 referer 去掉。
使用 sub_filter 移除微信图片的域名
到这儿以微信文章图片防盗链
Ⅳ 网站防盗链怎么解决
盗链网站无法下载,报盗链的问题。
要下载这类文件最简单的方法就是改referer。
比方flashget中,网址下面的"引用"一栏中,直接填写下载地址就可以了。