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 文件扩展名 获取函数
Jun 03 PHP
php中通过数组进行高效随机抽取指定条记录的算法
Sep 09 PHP
PHP分页类集锦
Nov 18 PHP
浅谈php冒泡排序
Dec 30 PHP
php实现将上传word文件转为html的方法
Jun 03 PHP
php文件读取方法实例分析
Jun 20 PHP
详解WordPress开发中的get_post与get_posts函数使用
Jan 04 PHP
php微信公众号开发(4)php实现自定义关键字回复
Dec 15 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
Dec 24 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
Oct 22 PHP
ThinkPHP5框架中使用JWT的方法示例
Jun 03 PHP
Yii中特殊行为ActionFilter的使用方法示例
Oct 18 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
DOMXML函数笔记
2006/10/09 PHP
PHP的FTP学习(三)
2006/10/09 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
Yii数据读取与跳转参数传递用法实例分析
2016/07/12 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
js中更短的 Array 类型转换
2011/10/30 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
常用的JS验证和函数汇总
2014/12/23 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
2017/10/17 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
使用jquery-easyui的布局layout写后台管理页面的代码详解
2019/06/19 jQuery
javascript使用链接跨域下载图片
2019/11/01 Javascript
vue-router 路由传参用法实例分析
2020/03/06 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
python读取文件名称生成list的方法
2018/04/27 Python
pandas带有重复索引操作方法
2018/06/08 Python
Django组件content-type使用方法详解
2019/07/19 Python
Django实现发送邮件找回密码功能
2019/08/12 Python
【HTML5】3D模型--百行代码实现旋转立体魔方实例
2016/12/16 HTML / CSS
html5 datalist 选中option选项后的触发事件
2020/03/05 HTML / CSS
班训口号大全
2014/06/18 职场文书
护理专科学生自荐书
2014/07/05 职场文书
十佳好少年事迹材料
2014/08/21 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书
MySQL限制查询和数据排序介绍
2022/03/25 MySQL
python实现双向链表原理
2022/05/25 Python