PHP设置images目录不充许http访问的方法


Posted in PHP onNovember 01, 2016

防盗链的技术已经很普遍了,有些网站不喜欢自己的图片被别的网站直接复制使用,便使用了防盗链的技术,这样别人在直接复制使用网站图片时,图片便会按照程序的设定不显示或显示防盗链等字样。

如今的互联网,采集网站非常多,很多网站都喜欢盗链/盗用别人网站的图片,这样不仅侵犯网权,还导致被盗链的网站消耗大量的流量,给服务器造成比较大的压力,本文章向大家介绍php如何防止图片盗用/盗链的两种方法,需要的朋友可以参考一下。

图片防盗链有什么用? 防止其它网站盗用你的图片,浪费你宝贵的流量。本文章向大家介绍php防止图片盗用/盗链的两种方法

1.Apache图片重定向方法

2.设置images目录不充许http访问

Apache服务器下防止图片盗链的办法

如果你的网站以图片为主,哪天发现月底没到流量就快用光了,那就可以利用图片转向,在不修改网页的前提下,把图片下载请求转向到其它空间(比如试用主机),临时过渡。

下面开始讲解,比如你的图片都在img目录下,那就在该目录下放一个名为 .htaccess 的文件,内容如下:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !simcole.cn [NC]
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !baidu.com [NC]
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]
/* 作者:码农教程 http://www.manongjc.com */
RewriteRule .(jpg|gif|png|bmp|swf|jpeg) /image/replace.gif [R,NC,L]
RewriteRule ^(.*)$ http://image.simcole.cn/image/$1 [L]

大概解释下:

RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !simcole.cn [NC]
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
/* 作者:码农教程 http://www.manongjc.com/article/1550.html */
RewriteCond %{HTTP_REFERER} !baidu.com [NC]
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]

这部分是判断是否盗链,如果以上条件都成立(即访问图片的请求,既不是直接输入网址,也不是来自simcole.cn,也不是来自zhuaxia.com,也不是来自google.com,也不是来自baidu.com,也不是来自bloglines.com 的话),就执行下列转向:

RewriteRule .(jpg|gif|png|bmp|swf|jpeg) /image/replace.gif [R,NC,L]

意思是让所有盗链 img 目录下 jpg、gif、png、bmp、swf、jpeg 文件的网页,显示的图片都用 image 目录下的 replace.gif 图片替换掉。注意替换显示的图片不要放在设置防盗链的 img 目录下。如果照上面的规则判断出图片请求不是盗链的,就执行以下转向:

RewriteRule ^(.*)$ http://image.simcole.cn/image/$1 [L]

意思是对 img 目录下所有的请求都转向到目标服务器,比如有个图片原来的 url 是 http://www.bebecn.com/img/girl.jpg ,现在就会转到 http://image.bebecn.com/image/girl.jpg 去。当然了你得先把原服务器 img 目录下的文件统统拷贝到临时服务器的 image 目录下,转向才会真正可用。起到的效果就是把原服务器图片下载所占用的流量统统省下,让临时服务器来承受了.

设置images目录不充许http访问

把images目录设置成不充许http访问(把图片目录的:读取、目录浏览 两个权限去掉)。

用一个PHP文件,直接用file函数读取这个图片。在这个PHP文件里进行权限控制。

apache环境中,在你的图片目录中加上下面这个文件即可。

文件名 .htaccess

文件内容如下

# options the .htaccess files in directories can override.
# Edit apache/conf/httpd.conf to AllowOverride in .htaccess
# AllowOverride AuthConfig
# Stop the directory list from being shown
Options -Indexes
# Controls who can get stuff from this server.
Order Deny,Allow
Deny from all
Allow from localhost

其他web环境如iss,nginx也类似。

class imgdata{
public $imgsrc;
public $imgdata;
public $imgform;
public function getdir($source){
$this->imgsrc = $source;
}
public function img2data(){
$this->_imgfrom($this->imgsrc);
return $this->imgdata=fread(fopen($this->imgsrc,'rb'),filesize($this->imgsrc));
}
public function data2img(){
header(“content-type:$this->imgform”);
echo $this->imgdata;
//echo $this->imgform;
//imagecreatefromstring($this->imgdata);
}
public function _imgfrom($imgsrc){
$info=getimagesize($imgsrc);
//var_dump($info);
/* 作者:码农教程 http://www.manongjc.com */
return $this->imgform = $info['mime'];
}
}
$n = new imgdata;
$n -> getdir(“1.jpg”); //图片路径,一般存储在数据库里,用户无法获取真实路径,可根据图片ID来获取
$n -> img2data();
$n -> data2img();

这段代码是读取图片,然后直接输出给浏览器,在读取和输出之前,进行用户权限判断。

这里说的PHP读取图片,不是指读取路径,而是指读取图片的内容,然后通过

Header();输入图片类型,比如 gif png jpg等,下面输出图片的内容,所以用到了fread()

实际上,你看到 image.php?id=100 就是显示这张图片在浏览器上,而你查看源文件,看到的不会是图片的路径,而是乱码似的图片内容。

类似于qq空间的加密相册,只有输入密码才能访问,并且直接在浏览器输入 加密相册中的相片地址也是无法访问。我目前的想法是 图片的地址是一个php文件,通过 php 验证权限 ,读取图片,并输出,不知道除了这样的方法还有更简单高效的做法没有?比如生成临时的浏览地址,使用一些 nginx 的一些防盗链插件?
你可以利用ngx_http_auth_basic_module来完成。

修改配置文件

location / {
root /usr/local/nginx/html;
auth_basic “Auth”;
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
index index.php index.htm;
}

auth_basic “Auth”中的Auth是弹出框(输入用户名和密码)的标题

auth_basic_user_file /usr/local/nginx/conf/htpasswd; 中的/usr/local/nginx/conf/htpasswd是保存密码的文件

以上所述是小编给大家介绍的PHP防止图片盗用/盗链的两种方法(推荐),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
php 读取shell管道传输过来的内容
Mar 01 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
Oct 30 PHP
php输出金字塔的2种实现方法
Dec 16 PHP
浅谈php命令行用法
Feb 04 PHP
ThinkPHP文件缓存类代码分享
Apr 22 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
Mar 25 PHP
PHP中FTP相关函数小结
Jul 15 PHP
浅谈PHP中类和对象的相关函数
Apr 26 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
Oct 25 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
PHP之多条件混合筛选功能的实现方法
Oct 09 PHP
解决Laravel使用验证时跳转到首页的问题
Nov 17 PHP
PHP递归获取目录内所有文件的实现方法
Nov 01 #PHP
php获得文件夹下所有文件的递归算法的简单实例
Nov 01 #PHP
ecshop适应在PHP7的修改方法解决报错的实现
Nov 01 #PHP
遍历echsop的region表形成缓存的程序实例代码
Nov 01 #PHP
CI框架无限级分类+递归的实现代码
Nov 01 #PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
Nov 01 #PHP
PHP之十六个魔术方法详细介绍
Nov 01 #PHP
You might like
php 操作调试的方法
2012/07/12 PHP
php读取和保存base64编码的图片内容
2017/04/22 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
javascript 对象的定义方法
2007/01/10 Javascript
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
Node.js中的缓冲与流模块详细介绍
2015/02/11 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
2017/02/27 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
微信小程序云开发之云函数详解
2019/05/16 Javascript
微信小程序如何获取用户头像和昵称
2019/09/23 Javascript
JS实现页面数据懒加载
2020/02/13 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[41:17]完美世界DOTA2联赛PWL S3 access vs CPG 第二场 12.13
2020/12/17 DOTA
python调用windows api锁定计算机示例
2014/04/17 Python
Sublime开发python程序的示例代码
2018/01/24 Python
使用pandas read_table读取csv文件的方法
2018/07/04 Python
Python实现两个list求交集,并集,差集的方法示例
2018/08/02 Python
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
python批量下载网站马拉松照片的完整步骤
2018/12/05 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
大学生在校学习的自我评价
2014/02/18 职场文书
清明节网上祭英烈活动总结
2014/04/30 职场文书
产品生产计划书
2014/05/07 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers
比较几种Redis集群方案
2021/06/21 Redis
Python3中最常用的5种线程锁实例总结
2021/07/07 Python
使用SQL实现车流量的计算的示例代码
2022/02/28 SQL Server