PHP怎么实现图片防盗链破解操作

  介绍

这篇文章主要介绍了PHP怎么实现图片防盗链破解操作,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

1防盗的原理是什么?

当客户端(浏览器)向服务器请求内容的时候,会提交一个<强>头强劲,这个标题中包含了如:浏览器信息,饼干等内容,那么有一个叫<强>引用页强的东东,也包含在这里面。

<强>推荐人是干啥用的呢?

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

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

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

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

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

<李>

本网站。

<李>

无推荐人信息的情况。(服务器认为是从浏览器直接访问的图片URL,所以这种情况下能正常访问)

<李>

白名单网址。

开始做防盗链处理

1,需要有一个服务器
2代码使用PHP

& lt; PHP ?   ,class  ImgBridge {   private 才能;$=& # 39;水& # 39;;   private 才能;$ imgUrl=& # 39; & # 39;,,   private 才能;推荐人美元=& # 39;& # 39;;   private 才能;$ ua=& # 39; MQQBrowser/26, Mozilla/5.0, (Linux;,你,,Android  2.3.7;,应用;,MB200 构建/GRJ22;, CyanogenMod-7), AppleWebKit/533.1, (KHTML, like 壁虎),版本/4.0,Mobile  Safari/533.1 & # 39;;   private 才能;$ imgCode=& # 39; & # 39;;   private 才能;$ imgHeader=& # 39; & # 39;;   private 才能;$ imgBody=& # 39; & # 39;;   private 才能;$ imgType=& # 39; & # 39;;      public 才能;function  \ _ \ _construct ($ config=array ()) {   ,,,foreach (config 美元;as 关键=美元在美元值){   ,,,,,这个美元→键=美元价值;   ,,,}   ,,}   ,,   public 才能;function  getImg (imgUrl美元){   ,,,这个→美元imgUrl=$ imgUrl;   ,,,/* \ \ *,处理url  \ */,,,如果(substr ($ this→imgUrl, 0, 7) !==& # 39; http://& # 39;,,,, substr ($ this→imgUrl, 0, 8) !==& # 39; https://& # 39;) {   ,,,,,这个→美元imgUrl=& # 39; http://& # 39;。$ this→imgUrl;   ,,,}   ,,,/* \ \ *,解析url中的host  \ */,,,\ _array=$ url解析\ _url ($ this→imgUrl);   ,,,/* \ \ *,设置referer  \ */,,,这个→美元推荐人=$这→推荐人==啊? & # 39;http://& # 39;。$ url \ _array \[& # 39;主机# 39;\]:$ this→推荐人;   ,,,/* \ \ *开始获取,\ */,,,这个→美元urlOpen ();   ,,,这个→美元imgBody;   ,,,/* \ \ *处理错误,\ */,,,如果($ this→imgCode !=200) {   ,,,,,这个美元→错误(1);   ,,,,,退出();   ,,,}   ,,,,   ,,,/* \ \ *获取图片格式,\ */,,,怀孕的\ _match(“/内容类型:图像\ \/(. + ?)\ \ n/sim",这→美元imgHeader,美元的结果);   ,,,/* \ \ *看看是不是图片,\ */,,,如果(!收取($结果\ [1 \])){   ,,,,,这个美元→错误(2);   ,,,,,退出();   还有,,,}{   ,,,,,这个→美元imgType=$结果\ [1 \];   ,,,}   ,,,/* \ \ *,输出内容,\ */,,,这个→美元(),,,,,   ,,}   private 才能;function  () {   ,,,/* \ \ *,gif 不处理,直接出图,\ */,,,如果($ this→imgType==& # 39; gif # 39;) {   ,,,,,头(“内容类型:图像/gif");   ,,,,,echo  $ this→imgBody;   ,,,,,退出();   ,,,}   ,,,头(“内容类型:图像/png");   ,,,/* \ \ *,其他类型的,加水印,\ */,,,im=imagecreatefromstring美元($ this→imgBody);   ,,,white 美元;=,imagecolorallocate (im美元,,255,,255,,255);   ,,,/\ *加上水印\ */,,,如果($ this→水){   ,,,,,imagettftext (im美元,12日,0,,20日,20日,白色,美元,“/字体/hwxh.ttf",, $ this→水),,,,,,,   ,,,}   ,,,imagepng (im);   ,,,,   ,,}   private 才能;function 错误(犯错美元){   ,,,头(“内容类型:图像/jpeg");   ,,,我=美元imagecreatefromstring(文件\ _get \ _contents (& # 39;。/default.jpg& # 39;));   ,,,imagejpeg (im);   ,,}      private 才能;function  urlOpen ()   {才能   ,,,ch 美元;=,旋度\ _init ();   ,,,旋度\ _setopt (ch美元,CURLOPT \ _URL, $ this→imgUrl);   ,,,旋度\ _setopt (ch美元,CURLOPT \ _USERAGENT, $ this→ua);   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

PHP怎么实现图片防盗链破解操作