php伪造Referer访问防盗链图片

绕过防盗链的姿势分享~

基础防盗链

基础防盗链主要是针对客户端请求过程中所携带的一些关键信息来验证请求的合法性, 比如客户端请求IP,请求URL中携带的referer。优点是规则简单,配置和使用都很方便,缺点是防盗链所依赖的验证信息很多都是可以伪造的,因此此类防盗链可靠性较低。

Referer防盗链

Referer在HTTP协议里有特殊的用途,当浏览器向服务器发送请求时,一般会带上Referer头,告知服务器该请求是从哪个页面链接过来的。Referer经常被用于页面访问统计、图片防盗链等。

适用场景举例:

比如:千图库(58pic)无水印解析

使用浏览器直接访问这张图片http://pic.qiantucdn.com/58pic/34/81/68/43g58PIC9ZK2GIjdy4Nff_PIC2018.jpg
是访问不了的
回显报错 {“code”:”40310014”,”msg”:”invalid Referer header”}

但是用火狐修改请求头,添加Referer: https://www.58pic.com/c/1599016 之后就可以正常显示啦
火狐修改Referer.png

php伪造Referer

代码如下:

1
2
3
4
5
6
7
8
<?php
//$img_url=$_GET['img_url'];
$img_url="http://pic.qiantucdn.com/58pic/34/81/68/43g58PIC9ZK2GIjdy4Nff_PIC2018.jpg";
header('Content-type: image/jpeg');
$context=array('http' => array ('header'=> 'Referer: https://www.58pic.com/c/1599016',),);
$xcontext = stream_context_create($context);
echo $str=file_get_contents($img_url,FALSE,$xcontext);
?>