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 相关文章推荐
第1次亲密接触PHP5(2)
Oct 09 PHP
利用php来自动调用不同服务器上的flash
Oct 09 PHP
php实现遍历目录并删除指定文件中指定内容
Jan 21 PHP
php+mysqli事务控制实现银行转账实例
Jan 29 PHP
php-redis中的sort排序函数总结
Jul 08 PHP
使用图灵api创建微信聊天机器人
Jul 23 PHP
PHP实现的迷你漂流瓶
Jul 29 PHP
基于PHP实现用户注册登录功能
Oct 14 PHP
thinkPHP5.0框架环境变量配置方法
Mar 17 PHP
php微信开发之图片回复功能
Jun 14 PHP
php实现数字补零的方法总结
Sep 12 PHP
PHP date()格式MySQL中插入datetime方法
Jan 29 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
php5.5新数组函数array_column使用
2013/07/08 PHP
PHP输出九九乘法表代码实例
2015/03/27 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
PHP实现伪静态方法汇总
2016/01/13 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
JavaScript isPrototypeOf和hasOwnProperty使用区别
2010/03/04 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
2017/08/29 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
2018/11/27 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
Python with用法实例
2015/04/14 Python
python开发中module模块用法实例分析
2015/11/12 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
详解Python3中ceil()函数用法
2019/02/19 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
mac使用python识别图形验证码功能
2020/01/10 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
维也纳通行证:Vienna PASS
2019/07/18 全球购物
JENNIFER BEHR官网:各种耳环和发饰
2020/06/07 全球购物
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
航空大学应届生求职信
2013/11/10 职场文书
产品质量承诺书范文
2014/03/27 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
2014年劳动部工作总结
2014/12/11 职场文书
社区工作者个人总结
2015/02/28 职场文书
本科毕业论文致谢怎么写
2015/05/14 职场文书
一个都不能少观后感
2015/06/04 职场文书
AngularJS实现多级下拉框
2022/03/25 Javascript