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 相关文章推荐
弄了个检测传输的参数是否为数字的Function
Dec 06 PHP
PHP 作用域解析运算符(::)
Jul 27 PHP
一个PHP验证码类代码分享(已封装成类)
Jul 17 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
Jan 31 PHP
Laravel框架表单验证详解
Sep 04 PHP
PHP根据两点间的经纬度计算距离
Oct 31 PHP
php基于str_pad实现卡号不足位数自动补0的方法
Nov 12 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
Aug 31 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
Sep 23 PHP
ThinkPHP实现分页功能
Apr 28 PHP
PHP静态延迟绑定和普通静态效率的对比
Oct 20 PHP
php闭包中使用use声明变量的作用域实例分析
Aug 09 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
PHP4实际应用经验篇(1)
2006/10/09 PHP
Discuz! Passport 通行证整合
2008/03/27 PHP
thinkphp浏览历史功能实现方法
2014/10/29 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
extjs render 用法介绍
2013/09/11 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
Canvas 绘制粒子动画背景
2017/02/15 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
2019/09/25 Javascript
js实现拾色器插件(ColorPicker)
2020/05/21 Javascript
python远程登录代码
2008/04/29 Python
在Python的Tornado框架中实现简单的在线代理的教程
2015/05/02 Python
简介Python中用于处理字符串的center()方法
2015/05/18 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
2017/12/09 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
Python中实现输入一个整数的案例
2020/05/03 Python
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
explicit和implicit的含义
2012/11/15 面试题
奥巴马演讲稿
2014/01/08 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
工作态度怎么写
2015/06/25 职场文书
老兵退伍感言
2015/08/03 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android