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 购物车的例子
May 04 PHP
PHP中的string类型使用说明
Jul 27 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
Mar 26 PHP
PHP之生成GIF动画的实现方法
Jun 07 PHP
PHP操作MongoDB GridFS 存储文件的详解
Jun 20 PHP
php Calender(日历)代码分享
Jan 03 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
Jun 13 PHP
PHP中使用foreach()遍历二维数组的简单实例
Jun 13 PHP
PHP编写daemon process详解及实例代码
Sep 30 PHP
thinkPHP实现多字段模糊匹配查询的方法
Dec 01 PHP
DWZ+ThinkPHP开发时遇到的问题分析
Dec 12 PHP
PHP children()函数讲解
Feb 03 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模板中出现空行解决方法
2011/03/08 PHP
php将session放入memcached的设置方法
2014/02/14 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
js URL参数的拼接方法比较
2012/02/15 Javascript
javascript对象的使用和属性操作示例详解
2014/03/02 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
2015/12/04 Javascript
js表单提交和submit提交的区别实例分析
2015/12/10 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
2016/12/08 Javascript
Bootstrap CSS组件之导航(nav)
2016/12/17 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
JS引用传递与值传递的区别与用法分析
2018/06/01 Javascript
Vue中用props给data赋初始值遇到的问题解决
2018/11/27 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
JavaScript中交换值的10种方法总结
2020/08/18 Javascript
解决Python安装后pip不能用的问题
2018/06/12 Python
python利用小波分析进行特征提取的实例
2019/01/09 Python
Python values()与itervalues()的用法详解
2019/11/27 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
纯CSS3实现带动画效果导航菜单无需js
2013/09/27 HTML / CSS
美国正版电视节目和电影在线观看:Hulu
2018/05/24 全球购物
ANINE BING官方网站:奢华的衣橱基本款和时尚永恒的单品
2019/11/26 全球购物
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
应届生找工作求职信
2014/06/24 职场文书
2014年市场部工作总结
2014/11/25 职场文书
家长通知书家长意见
2014/12/30 职场文书
投标售后服务承诺书
2015/04/29 职场文书
超级礼物观后感
2015/06/15 职场文书