PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】

2025-05-27 0 85

本文实例讲述了PHP实现图片防盗链破解操作。分享给大家供大家参考,具体如下:

很多小伙伴的博客,网站都是用图床来实现的,那么现在很多稳定的图床接口都被做了防盗链处理,例如百度、阿里、京东、小米、搜狗等。

所以我们应该怎么避开防盗链直接使用图片呢?

1 防盗的原理是什么?

当客户端(浏览器)向服务器请求内容的时候,会提交一个header,这个header中包含了如:浏览器信息、cookie等内容,那么有一个叫referer的东东,也包含在这里面。

referer是干啥用的呢?

它就是告诉服务器,这个请求的来源是谁,比如:从页面A跳转到页面B,那么页面B收到的referer就是页面A。

但是在图片身上和这个有点不同,图片是在html页面加载完毕后才加载的,所以图片收到的referer不是网页的上一个页面,而是当前页面。

说这么多,不要被说绕了,简单点就是:对于图片而言,收到的referer就是引用图片的这个网页的网址。

那么现在的很多网站是如何利用referer来进行防图片盗链的呢?

三种情况下允许引用图片:

  1. 本网站。
  2. 无referer信息的情况。(服务器认为是从浏览器直接访问的图片URL,所以这种情况下能正常访问)
  3. 白名单网址。

开始做防盗链处理

1、需要有一个服务器
2、代码使用php

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100
<?php

class ImgBridge{

private $water='';

private $imgUrl='';

private $referer='';

private $ua='MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1';

private $imgCode='';

private $imgHeader='';

private $imgBody='';

private $imgType='';

public function \\_\\_construct($config=array()){

foreach($config as $key=>$value){

$this->$key=$value;

}

}

public function getImg($imgUrl){

$this->imgUrl=$imgUrl;

/\\*\\* 处理url \\*/

if(substr($this->imgUrl,0,7)!=='http://' && substr($this->imgUrl,0,8)!=='https://'){

$this->imgUrl='http://'.$this->imgUrl;

}

/\\*\\* 解析url中的host \\*/

$url\\_array=parse\\_url($this->imgUrl);

/\\*\\* 设置referer \\*/

$this->referer=$this->referer==""?'http://'.$url\\_array\\['host'\\]:$this->referer;

/\\*\\*开始获取 \\*/

$this->urlOpen();

$this->imgBody;

/\\*\\*处理错误 \\*/

if($this->imgCode!=200){

$this->error(1);

exit();

}

/\\*\\*获取图片格式 \\*/

preg\\_match("/Content-Type: image\\\\/(.+?)\\\\n/sim",$this->imgHeader,$result);

/\\*\\*看看是不是图片 \\*/

if(!isset($result\\[1\\])){

$this->error(2);

exit();

}else{

$this->imgType=$result\\[1\\];

}

/\\*\\* 输出内容 \\*/

$this->out();

}

private function out(){

/\\*\\* gif 不处理,直接出图 \\*/

if($this->imgType=='gif'){

header("Content-Type: image/gif");

echo $this->imgBody;

exit();

}

header("Content-Type: image/png");

/\\*\\* 其他类型的,加水印 \\*/

$im=imagecreatefromstring($this->imgBody);

$white = imagecolorallocate($im, 255, 255, 255);

/\\*加上水印\\*/

if($this->water){

imagettftext($im, 12, 0, 20, 20, $white, "/fonts/hwxh.ttf", $this->water);

}

imagepng($im);

}

private function error($err){

header("Content-Type: image/jpeg");

$im=imagecreatefromstring(file\\_get\\_contents('./default.jpg'));

imagejpeg($im);

}

private function urlOpen()

{

$ch = curl\\_init();

curl\\_setopt($ch, CURLOPT\\_URL, $this->imgUrl);

curl\\_setopt($ch, CURLOPT\\_USERAGENT, $this->ua);

curl\\_setopt ($ch,CURLOPT\\_REFERER,$this->referer);

curl\\_setopt($ch, CURLOPT\\_RETURNTRANSFER, 1);

curl\\_setopt($ch, CURLOPT\\_HEADER, 1);

/\\*\\*跳转也要 \\*/

curl\\_setopt($ch, CURLOPT\\_FOLLOWLOCATION, true);

/\\*\\* 支持https \\*/

$opt\\[CURLOPT\\_SSL\\_VERIFYHOST\\] = 2;

$opt\\[CURLOPT\\_SSL\\_VERIFYPEER\\] = FALSE;

curl\\_setopt\\_array($ch, $opt);

$response = curl\\_exec($ch);

$this->imgCode=curl\\_getinfo($ch, CURLINFO\\_HTTP\\_CODE) ;

if ($this->imgCode == '200') {

$headerSize = curl\\_getinfo($ch, CURLINFO\\_HEADER\\_SIZE);

$this->imgHeader = substr($response, 0, $headerSize);

$this->imgBody = substr($response, $headerSize);

return ;

}

curl\\_close($ch);

}

}

$img=new ImgBridge(array('water'=>''));

$img->getImg(strstr($\\_SERVER\\["QUERY\\_STRING"\\], "http"));

代码命名为dl.php

那么直接可以访问

http://域名/dl.php?url=防盗链图片地址

下面是我部署的反向代理

http://www.likeyunba.com/2.php?url=

请不要拿我的直接用,我的不会长期放着的,只保留短暂1-2个月用于给你们体验。

案例

我用135编辑器上传一张图片,获得图片地址

/wp-content/uploads/202505/27/111195.jpg

加上反向代理,破解防盗链处理

http://www.likeyunba.com/2.php?url=/wp-content/uploads/202505/27/111195.jpg

HTML格式

<img src="http://www.likeyunba.com/2.php?url=/wp-content/uploads/202505/27/111195.jpg" width="500" />

希望本文所述对大家PHP程序设计有所帮助。

原文链接:https://segmentfault.com/a/1190000021435532

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】 https://www.kuaiidc.com/70577.html

相关文章

发表评论
暂无评论