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数组
Oct 09 PHP
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
Apr 16 PHP
PHP获取当前文件所在目录 getcwd()函数
May 13 PHP
php5 图片验证码实现代码
Dec 11 PHP
PHP 类相关函数的使用详解
May 10 PHP
php使用function_exists判断函数可用的方法
Nov 19 PHP
PHP常用的三种设计模式汇总
Aug 28 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
Yii2框架实现登陆添加验证码功能示例
Jul 12 PHP
Laravel 添加多语言提示信息的方法
Sep 29 PHP
详解PHP中curl_multi并发的实现
Jun 08 PHP
php在linux环境中如何使用redis详解
Dec 15 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
PHP教程 变量定义
2009/10/23 PHP
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
2017/08/10 PHP
JQuery防止退格键网页后退的实现代码
2012/03/23 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
2014/02/04 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
2018/01/02 jQuery
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
vue-cli项目无法用本机IP访问的解决方法
2018/09/20 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
Windows上使用Python增加或删除权限的方法
2018/04/24 Python
python多进程控制学习小结
2018/10/31 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
幼儿教师个人求职信范文
2013/09/21 职场文书
护理专业大学生自我推荐信
2014/01/25 职场文书
公司薪酬管理制度
2014/01/31 职场文书
音乐教学随笔感言
2014/02/19 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
2014会计年终工作总结
2014/12/20 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书
zabbix监控mysql的实例方法
2021/06/02 MySQL
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python
详解Golang如何实现支持随机删除元素的堆
2022/09/23 Python