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 相关文章推荐
漂亮但不安全的CTB
Oct 09 PHP
php缓存技术介绍
Nov 25 PHP
PHP的单引号和双引号 字符串效率
May 27 PHP
php支持中文字符串分割的函数
May 28 PHP
详解PHP对象的串行化与反串行化
Jan 24 PHP
浅析Yii2中GridView常见操作
Apr 22 PHP
PHP常用操作类之通信数据封装类的实现
Jul 16 PHP
PHP迭代器接口Iterator用法分析
Dec 28 PHP
yii2 url重写并隐藏index.php方法
Dec 10 PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 PHP
PHP单文件上传原理及上传函数的封装操作示例
Sep 02 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 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
一个SQL管理员的web接口
2006/10/09 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
php常用ODBC函数集(详细)
2013/06/24 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
firefox下input type=&quot;file&quot;的size是多大
2011/10/24 Javascript
JQuery触发事件例如click
2013/09/11 Javascript
Javascript前端UI框架Kit使用指南之kitjs事件管理
2014/11/28 Javascript
javascript中Object使用详解
2015/01/26 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
从零开始做一个pagination分页组件
2017/03/15 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
Python生成随机密码
2015/03/10 Python
使用C语言扩展Python程序的简单入门指引
2015/04/14 Python
Python 序列的方法总结
2016/10/18 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
Python3.4 splinter(模拟填写表单)使用方法
2018/10/13 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
python小程序实现刷票功能详解
2019/07/17 Python
python爬虫使用requests发送post请求示例详解
2020/08/05 Python
django 获取字段最大值,最新的记录操作
2020/08/09 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
HTML5+WebSocket实现多文件同时上传的实例
2016/12/29 HTML / CSS
2015年圣诞节活动总结
2015/03/24 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA