什么是盗链,如何进行盗链,怎么避免,下面我们就来介绍下。
按照百度百科的定义:
盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。
说白了就是我使用你的图片,这样我的空间节省了,而压力都跑到你的服务器上去了。很多网站为了防止别人盗取你的图片,就可以采用reffer字段来判断,如果你请求的header中不是我自己的域名,我就认为是错误访问,我就可以给你一个错误图片,这样就防止了图片被盗取。
可是道高一尺,魔高一丈。既然你是通过header字段来判断是否是本站请求,我就可以伪造header来发送请求,这样我就可以得到正确的图片。
下面看下在php中如何破解百度图片的防盗链
<?php
$url = 'http://c.hiphotos.baidu.com/image/w%3D210/sign=ed30880babec8a13141a50e1c7029157/d52a2834349b033be1a9503e17ce36d3d539bd35.jpg';//$_GET["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);//Activation can modify the page
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 );
这个图片如果直接在网站上引入,会得不到正确的图片,所以我们采用curl发送header请求,然后输出返回内容就可以了。
魔高一尺道高一丈。
既然header可以伪造,那么我们就可以给图片访问加一个access_token,只有正确的token才能访问,而且这个token会定时超时。亚马逊的云服务对于下载内容就是这么处理的。
总之,盗链与反盗链的技术是不断演进的,我们需要做的就是了解各个技术的底层原理,做到自己的网站的图片少被人盗用。
同时,我们尽量少盗用他人的图片,毕竟东西还是自己的靠谱。