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 版本]
Mar 20 PHP
PHP定时自动生成静态HTML的实现代码
Jun 20 PHP
PHP include任意文件或URL介绍
Apr 29 PHP
PHP定时执行任务实现方法详解(Timer)
Jul 30 PHP
PHP实现删除字符串中任何字符的函数
Aug 11 PHP
PHP编写RESTful接口
Feb 23 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
Mar 06 PHP
php解决DOM乱码的方法示例代码
Nov 20 PHP
PHP连接MYSQL数据库的3种常用方法
Feb 27 PHP
PHP实现的二分查找算法实例分析
Dec 19 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 PHP
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
Apr 11 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/17 PHP
PHP生成等比缩略图类和自定义函数分享
2014/06/25 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
jQuery Ajax 全解析
2009/02/08 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
AngularJS基础学习笔记之表达式
2015/05/10 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
2016/10/05 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
JavaScript 异步调用
2017/10/25 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
六个窍门助你提高Python运行效率
2015/06/09 Python
Django中Forms的使用代码解析
2018/02/10 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
布隆过滤器的概述及Python实现方法
2019/12/08 Python
Python找出列表中出现次数最多的元素三种方式
2020/02/24 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
Python接口自动化测试的实现
2020/08/28 Python
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
法国亚马逊官方网站:Amazon.fr
2020/12/19 全球购物
办公室前台岗位职责范本
2013/12/10 职场文书
安全生产活动月方案
2014/03/09 职场文书
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
区域销售大会开幕词
2016/03/04 职场文书
Oracle笔记
2021/04/05 Oracle
浅谈什么是SpringBoot异常处理自动配置的原理
2021/06/21 Java/Android