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 相关文章推荐
实用函数10
Nov 08 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
Feb 04 PHP
php中stream(流)的用法
Mar 25 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
Apr 09 PHP
Codeigniter的dom类用法实例
Jun 26 PHP
微信支付开发告警通知实例
Jul 12 PHP
PHP Oauth授权和本地加密实现方法
Aug 12 PHP
php用户密码加密算法分析【Discuz加密算法】
Oct 12 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
Jul 18 PHP
php常用日期时间函数实例小结
Jul 04 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
Oct 21 PHP
PHP unset函数原理及使用方法解析
Aug 14 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
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
JavaScript 用Node.js写Shell脚本[译]
2012/09/20 Javascript
js螺旋动画效果的具体实例
2013/11/15 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
javascript闭包入门示例
2014/04/30 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
Underscore.js常用方法总结
2015/02/28 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
2015/12/17 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
Vue.js 中的实用工具方法【推荐】
2019/07/04 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
vue等两个接口都返回结果再执行下一步的实例
2020/09/08 Javascript
[01:55]2014DOTA2国际邀请赛快报:国土生病 紧急去医院治疗
2014/07/10 DOTA
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
Django如何实现内容缓存示例详解
2017/09/24 Python
python 编码规范整理
2018/05/05 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
python 文件查找及内容匹配方法
2018/10/25 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
Python实现最常见加密方式详解
2019/07/13 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
python匿名函数的使用方法解析
2019/10/10 Python
Python高级特性——详解多维数组切片(Slice)
2019/11/26 Python
露营世界:Camping World
2017/02/02 全球购物
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
Ruby如何创建一个线程
2013/03/10 面试题
光电信息专业应届生求职信
2013/10/07 职场文书
药物学专业学生的自我评价
2013/10/27 职场文书
护士辞职信范文
2014/01/19 职场文书
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL