百度图片的防盗链


什么是盗链,如何进行盗链,怎么避免,下面我们就来介绍下。


按照百度百科的定义:


盗链


盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。


说白了就是我使用你的图片,这样我的空间节省了,而压力都跑到你的服务器上去了。很多网站为了防止别人盗取你的图片,就可以采用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会定时超时。亚马逊的云服务对于下载内容就是这么处理的。


总之,盗链与反盗链的技术是不断演进的,我们需要做的就是了解各个技术的底层原理,做到自己的网站的图片少被人盗用。


同时,我们尽量少盗用他人的图片,毕竟东西还是自己的靠谱。