介绍
这篇文章主要介绍了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 nullPHP怎么实现图片防盗链破解操作