php应用篇-百度图片的防盗链

众所周知,一个网站如果的图片流量很占用网络带宽,因此,防止图片的被盗连就显得重中之重。这里,简单讲解下百度如何防止图片的盗链的原理,接着介绍下如何通过php来盗取图片,正所谓,道高一尺魔高一丈,防守和进攻总是不断地相互促进发展。

首先,简单介绍下盗链,按照百度百科的介绍“盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。”。所以,这里图片盗链就是在自己的服务器上引用百度的图片结果,而不把图片放到自己的服务器上,这样就减少了服务器的带宽了。

举个例子:给出个百度图片的url:

http://c.hiphotos.baidu.com/image/w%3D210/sign=ed30880babec8a13141a50e1c7029157/d52a2834349b033be1a9503e17ce36d3d539bd35.jpg

如果直接通过浏览器访问,我们就会得到真实的图片,如下图:

但是如果我们在自己的服务器上通过

<img src="http://c.hiphotos.baidu.com/image/w%3D210/sign=ed30880babec8a13141a50e1c7029157/d52a2834349b033be1a9503e17ce36d3d539bd35.jpg" />

来获取它的内容。

那么我们就会得到下面的图片:

这里因为我们请求图片的时候http请求的header中有Referer:这个字段,他标示了我们不是百度自己的服务器,所以请求不被正常处理,这里我们就可以通过php中的curl扩展来伪造http请求从而得到正确的图片。代码如下:

<?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 );

经过这么处理之后,我们就可以盗取到百度的图片了。

php应用篇-百度图片的防盗链,布布扣,bubuko.com

时间: 2024-08-02 22:41:38

php应用篇-百度图片的防盗链的相关文章

微信图片反防盗链的方法

微信图片反防盗链的方法(此图片来自微信公众平台,未经允许不可饮用) (未找到出处,如有侵犯,请及时告知,谢谢) 因为在<img>标签中引用微信的图片 <?php $img = "http://mmbiz.qpic.cn/mmbiz /ibbmVK4uC7iacR4KGWnyJHvQxl276DK6eGibiafBFTLObjBtKU9hGZoiaaiaD49r4u9otkQzCGAPAbWlPVzrpyCRaCVA/0"; ?> <img src=&quo

图片跳板,图片反防盗链

用于反防盗链图片,图片代理,原理:反盗链图片一般允许空referrer访问,所以使用服务端远程伪造referrer抓取图片,然后输出image/* 格式达到反防盗链的效果. 前台使用:<img src="跳板地址/GetImg?imgUrl=原图片地址" /> public FileResult GetImg(string imgUrl) { Uri url = new Uri(imgUrl); HttpWebRequest req = (HttpWebRequest)We

php判断远程图片是否防盗链

function checkpic($url){ $curl = curl_init($url);//设置url curl_setopt($curl, CURLOPT_REFERER, 'http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]);//伪装referer(正常在地址栏输入网址能打开,因为referer是空的,而在网页中用 src 打开时referer是有内容的所以打不开,referer内容可以到浏览器控制台查看,这

微信图片反防盗链 不太成熟的解决方式 仅供参考

$("#imgDiv img").each(function () { var img = $(this); var img_src = img.attr("src") + "?" + Math.random(); var frameid = "frameimg" + Math.random(); var image = new Image(); image.src = img_src; image.onload = func

Asp.net 图片文件防盗链介绍

想要实现文件放盗链的功能 首先添加一个全局文件 Global.asax 在 Application_BeginRequest中我们可以判断Http报文头中的UrlReferre是否来源本站. if (HttpContext.Current.Request.UrlReferrer != null) { if (HttpContext.Current.Request.Url.AbsolutePath.EndsWith("jpg", StringComparison.OrdinalIgnor

PHP反向代理-百度图片

最近在一些开发中需要调用百度贴吧等一系列的百度图片 但是防盗链实在讨厌 于是就简单利用curl实现了反向代理(应该是这么叫的) 如果网站直接调用百度图片 会出现如下(博客园貌似在白名单 可以直接用百度链接 ...) 实际上这张图为(随便找的图) php代码如下: //img.php<?php if(!isset($_GET["url"])) { $url='http://g.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=4d275dc

nginx图片防盗链

1.全站防盗链:配置nginx.conf 2.针对图片目录防盗链:配置nginx.conf 3.使用第三方模块防盗链:ngx_http_accesskey_module(需要重新编译nginx)

Nginx修改配置实现图片防盗链

一般情况下,防盗链是针对软件下载和图片的,由于一般的站点不提供资源下载,所以本文主要是针对图片的防盗链 1.如果对全站图片做防盗链,至少需要一个另外的域名存放指向图片.因为如果对全站图片做了防盗链,包括盗链提示图片在内的所有图片都不可能显示. 此类情况修改 /usr/local/nginx/conf/nginx.conf 文件 2.对单独域名配置图片防盗链,个人比较推荐,一是便于控制,二是可以重新创建一个域名在同服务器上用来存放盗链提示图片. 此类情况修改 /usr/local/nginx/co

PHP实现HTTP防盗链

PHP实现HTTP防盗链 2015-01-25 下午 15:00 我们优化服务器时,有时为了尽量减少本站点的流量,从而防止外部站点盗用引用本站图片等资源. 具体具体步骤: (1):在http.conf中打开Apache重写模块mod_rewrite.ko (2):在需要防盗链的网站或者目录下写.htaccess文件并指定防盗链规则. RewriteEngine On????????????????????????????????//开启重写模块 RewriteBase /foruser/HTTP