php如何控制用户对图片的访问 PHP禁止图片盗链


Posted in PHP onMarch 25, 2016

把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);
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禁止图片盗链
1、假设充许连结图片的主机域名为:www.test.com
2、修改httpd.conf

SetEnvIfNoCase Referer “^http://www.test.com/” local_ref=1

<FilesMatch “.(gif|jpg)”>

Order Allow,Deny

Allow from env=local_ref

</FilesMatch>

这个简单的应用不光可以解决图片盗链的问题,稍加修改还可以防止任意文件盗链下载的问题。
使用以上的方法当从非指定的主机连结图片时,图片将无法显示,如果希望显示一张“禁止盗链”的图片,我们可以用mod_rewrite 来实现。
首先在安装 apache 时要加上 ?enable-rewrite 参数加载 mod_rewrite 模组。
假设“禁止盗链”的图片为abc.gif,我们在 httpd.conf 中可以这样配置:

RewriteEngine on

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^http://(www\.)?test.com /.*$ [NC]

RewriteRule \.(gif|jpg)$ http://www.test.com/abc.gif [R,L]

当主机的图片被盗链时,只会看到 abc.gif 这张“禁止盗链”的图片!

PHP 相关文章推荐
一个PHP+MSSQL分页的例子
Oct 09 PHP
模拟flock实现文件锁定
Feb 14 PHP
仿AS3实现PHP 事件机制实现代码
Jan 27 PHP
php模板中出现空行解决方法
Mar 08 PHP
php强制下载类型的实现代码
Apr 21 PHP
6种php上传图片重命名的方法实例
Nov 04 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
Jun 23 PHP
php实现用手机关闭计算机(电脑)的方法
Apr 22 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
PHP提高编程效率的20个要点
Sep 23 PHP
php利用gd库为图片添加水印
Nov 09 PHP
PHP反射原理与用法深入分析
Sep 28 PHP
PHP 生成微信红包代码简单
Mar 25 #PHP
PHP实现动态执行代码的方法
Mar 25 #PHP
PHP动态生成指定大小随机图片的方法
Mar 25 #PHP
PHP5.2中PDO的简单使用方法
Mar 25 #PHP
PHP简单判断字符串是否包含另一个字符串的方法
Mar 25 #PHP
PHP错误机制知识汇总
Mar 24 #PHP
ThinkPHP的常用配置选项汇总
Mar 24 #PHP
You might like
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
PHP中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
PHP5 的对象赋值机制介绍
2011/08/02 PHP
php socket客户端及服务器端应用实例
2014/07/04 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
2014/09/10 PHP
js png图片(有含有透明)在IE6中为什么不透明了
2010/02/07 Javascript
IE event.srcElement和FF event.target 功能比较
2010/03/01 Javascript
JavaScript 参数中的数组展开 [译]
2012/09/21 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
JavaScript中操作字符串之localeCompare()方法的使用
2015/06/06 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
原生javascript实现图片放大镜效果
2017/01/18 Javascript
Angularjs添加排序查询功能的实例代码
2017/10/24 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
2018/02/07 Javascript
nodejs实现超简单生成二维码的方法
2018/03/17 NodeJs
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
seajs和requirejs模块化简单案例分析
2019/08/26 Javascript
nuxt 自定义 auth 中间件实现令牌的持久化操作
2020/11/05 Javascript
Python实现批量下载文件
2015/05/17 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
python 函数中的参数类型
2020/02/11 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
好人好事演讲稿
2014/09/01 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
工地食品安全责任书
2015/05/09 职场文书
干部外出学习心得体会
2016/01/18 职场文书
四年级数学教学反思
2016/02/16 职场文书
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript