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作为Shell脚本语言使用
Oct 09 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
Aug 01 PHP
php使用function_exists判断函数可用的方法
Nov 19 PHP
使用php的HTTP请求的库Requests实现美女图片墙
Feb 22 PHP
php写入数据到CSV文件的方法
Mar 14 PHP
怎样搭建PHP开发环境
Jul 28 PHP
php判断当前操作系统类型
Oct 28 PHP
PHP二维数组去重算法
Dec 17 PHP
PHP 验证身份证是否合法的函数
Feb 09 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 PHP
PHP实现的curl批量请求操作示例
Jun 06 PHP
PHP使用递归按层级查找数据的方法
Nov 10 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
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
php增删改查示例自己写的demo
2013/09/04 PHP
PHP多态代码实例
2015/06/26 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
JQuery中each()的使用方法说明
2010/08/19 Javascript
jquery Mobile入门—多页面切换示例学习
2013/01/08 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
Jquery自定义button按钮的几种方法
2014/06/11 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
vue实现ToDoList简单实例
2017/02/07 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
Python脚本实现代码行数统计代码分享
2015/03/10 Python
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
python bmp转换为jpg 并删除原图的方法
2018/10/25 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
python异步Web框架sanic的实现
2020/04/27 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
Python实现冒泡排序算法的完整实例
2020/11/04 Python
日本高端护肤品牌:Tatcha
2016/08/29 全球购物
Farfetch香港官网:汇集全球时尚奢侈品购物平台
2017/11/26 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
财务助理岗位职责
2013/11/10 职场文书
应届毕业生求职自荐书
2014/01/03 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
2016年员工年度考核评语
2015/12/02 职场文书
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android