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 获取一个月第一天与最后一天的代码
May 16 PHP
php设计模式 Strategy(策略模式)
Jun 26 PHP
php简单开启gzip压缩方法(zlib.output_compression)
Apr 13 PHP
php jq jquery getJSON跨域提交数据完整版
Sep 13 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
Jan 06 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
php去除二维数组的重复项方法
Nov 03 PHP
php数据访问之增删改查操作
May 09 PHP
php使用pdo连接sqlite3的配置示例
May 27 PHP
PHP实现对图片的反色处理功能【测试可用】
Feb 01 PHP
windows 2008r2+php5.6.28环境搭建详细过程
Jun 18 PHP
php实例化一个类的具体方法
Sep 19 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计数器的实现代码
2013/06/08 PHP
php实现12306余票查询、价格查询示例
2014/04/17 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
PHP-FPM的配置与优化讲解
2019/03/15 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
jQuery学习笔记之DOM对象和jQuery对象
2010/12/22 Javascript
修改jquery.lazyload.js实现页面延迟载入
2010/12/22 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
jQuery中table数据的值拷贝和拆分
2017/03/19 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
2018/04/18 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
Python中的Classes和Metaclasses详解
2015/04/02 Python
python连接mysql实例分享
2016/10/09 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
Pandas DataFrame 取一行数据会得到Series的方法
2018/11/10 Python
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
基于css3的属性transition制作菜单导航效果
2015/09/01 HTML / CSS
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
Python面试题:Python是如何进行内存管理的
2014/08/04 面试题
教师政风行风评议心得体会
2014/10/21 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
高二英语教学反思
2016/03/03 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书
Python基础之元类详解
2021/04/29 Python
vue Element-ui表格实现树形结构表格
2021/06/07 Vue.js