很多站长朋友们都不太清楚php反盗链机制,今天小编就来给大家整理php反盗链机制,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 防盗链的代码处理流程 2、 打开网页时显示这个,如何解决 { "error_code":31326, "error_msg" 3、 php怎么通过refer来禁止外部盗链 4、 反盗链怎么做到的? 防盗链的代码处理流程此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。
为什么会产生盗链
一般浏览有一个重要的现象就是一个完整的页面并不是一次全部传送到客户端的。如果请求的是一个带有许多图片和其它信息的页面,那么最先的一个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']),'')==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="/data/upload/help/202303/02/ef8d1634ec2d60f5805a6aa8e0d9dd29.img;" frameBorder="0" scrolling="no" width="100%"></iframe>');
}
调用方式:
showImg('图片地址');
关于防御方法,有以下3点:
1、不允许referer为空(不建议,因在某些开启隐私模式的浏览器中,或https页面引用下,referer是空的)
2、地址变更(lighttpd的是根据有效时间,nginx的根据是md5)
3、登录校验(如必须登录网站帐号后才能访问)
后端代理:
那么如何才能绕过防盗链对所需资源进行抓取???
php实战
在通常的处理过程中,如果在自己的站点直接引入百度的图片
这里写图片描述
(⊙o⊙)哦,引入链接失败咯啊!!!那么怎么用curl处理
毕竟要爬取必要的信息
$url="";
//$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进行自定义返
打开网页时显示这个,如何解决 { "error_code":31326, "error_msg"原因:百度云的反盗链机制
A网站将自己的静态资源如图片或视频等存放在百度智能云存储的BOS上。B网站在未经A允许的情况下,使用A网站的图片或视频资源,放置到自己的网站中。
由于BOS是按照使用量收费,这样网站B盗取了网站A的空间和流量,而A没有获取任何利益却承担了资源使用费。B盗用A资源放到自己网站的行为即为盗链。
解决方法:用户必须登录,并且从百度的网站页面进入才能下载。
扩展资料
原理
防盗链的主要方法是通过限制引用页来实现的,有设置Referer防盗链和设置签名URL防盗链两种方式。
设置Referer防盗链的原理将HTTP请求表头的Referer属性(保存了该请求是从哪个URL发送到服务器的)和服务端许可的白名单进行比对,如果一致则表明是站内请求,或者为自己信任的站点请求,否则视为盗链。
但是Referer属性可以被恶意的篡改,针对这种情况,可以通过签名URL来实现防盗链。
参考资料:百度智能云 - 防盗链
php怎么通过refer来禁止外部盗链应该是reffer,判断reffer是否为本站,如果是,则说明来源本站,可以提供图片,反之,就拒绝
当然,reffer可以伪造,有的时候reffer丢失等会导致判断出错~,所以,并不是一个完美的解决方案
反盗链怎么做到的?如果做为站长的你,不知不觉间发现自己站点的带宽流量和网站访问量之间的差距越来越大,而且伴随着增长,服务器承受的负荷却与收入不成比例,这是什么原因造成的?站长们或许会猜到:是“盗链”!没错,就是它。
曾经站长们为了摆脱盗链对服务器的纠缠,费了很多功夫在上面,有的使用验证环节进行来路控制,有的防盗链产品(如:VM,UUIIS等产品)使用发送包条件处理技术,如URLS参数,Referer,Cookies等来判断来路,从而最终进行合法与非法用户的辨别。然而在几年前或许这样的办法实实在在的获得了非常好的效果,但是随着下载软件的发展,越来越多的软件采用了多服务器资源技术,并且运用了很多针对防盗链产品的破解技术手段,站长们不得不重新考虑另外一个站点资源杀手:”下载软件“。
只要一个用户使用这些软件从您的站点下载,那么这个下载地址就会暴露在千千万万的用户眼前。有的站长或许会说:这个没有什么啊,只要用户不访问我的网页,再加上我的Referer,Cookies加密等做为来路控制,我的资源就不会被盗用了啊,但是事实上果真如此吗?答案是否定的。
因为用户在下载资源的时候,发送包里存放着一些基本的信息,包括这个资源的地址,服务器主机名,引用页(即用户是从什么地址过来的,Referer),以及用户在登陆站点的时候站点分配的一些用户信息(Cookies)。那问题在哪里呢??站长们会发出这样的疑问,为什么我使用了上面所述的反盗链措施,但丝毫起不到反盗链效果呢??
问题就在发送包里,因为发送包是可以模仿的,可以伪造的。当一个用户通过访问您的站点,并使用下载软件从您的站点 下载资源。这个过程中,下载软件已经将发送包的格式和内容推荐给了其他用户,使用资源信息识别技术,哪一个资源在不同的站点,但却拥有相同的内容,这样,你的站点资源就被引用了,站点所需要的发送包格式信息就这样被轻松COPY了。
基于以上特点,站长们也许想到了:只要用户从我们这里下载资源时,不依靠发送包,那不就成了吗?提议是正确的,所以有非常多的站长采用了比较直观,操作也非常简便的方法,那就是:不停的变更下载服务器的主机名和下载目录名。这个办法虽然看起来似乎技术含量低了点,但非常行的通。然而聪明的人们总会想出应对的方法:你不是经常变吗?无所谓,只要让我的数据库中资源和你的主机名和目录名保持同步不就OK了吗?因为我的用户从你的站点下载资源,这个资源的变更后的主机名和目录还是被我搞到了。
改文章转载自 链盾 说明的是关于盗链,感觉有学习意思,所以来我的博客上转载一下,可以了解到盗链究竟是怎么一回事。呵呵
本文来自 长河日志 YL'S blog:
关于php反盗链机制的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php反盗链机制 防止盗链的php代码的详细内容...