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 相关文章推荐
基于文本的留言簿
Oct 09 PHP
php 获取可变函数参数的函数
Aug 26 PHP
使用php来实现网络服务
Sep 15 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
Mar 18 PHP
PHP生成器简单实例
May 13 PHP
PHP面向对象程序设计之类与反射API详解
Dec 02 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
Oct 17 PHP
PHP实现网站访问量计数器
Oct 27 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
PHPTree――php快速生成无限级分类
Mar 30 PHP
Laravel框架创建路由的方法详解
Sep 04 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
建立动态的WML站点(三)
2006/10/09 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
PHP实现递归目录的5种方法
2016/10/27 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
自己的js工具 Cookie 封装
2009/08/21 Javascript
取选中的radio的值
2010/01/11 Javascript
JQuery live函数
2010/12/24 Javascript
js变量以及其作用域详解
2020/07/18 Javascript
javascript动画浅析
2012/08/30 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
详解ES6中的 Set Map 数据结构学习总结
2018/11/06 Javascript
js console.log打印对象时属性缺失的解决方法
2019/05/23 Javascript
element-ui table组件如何使用render属性的实现
2019/11/04 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
python实现目录树生成示例
2014/03/28 Python
Python实现KNN邻近算法
2021/01/28 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
python3实现名片管理系统
2020/11/29 Python
python+opencv实现阈值分割
2018/12/26 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
Python 实现自动登录+点击+滑动验证功能
2020/06/10 Python
树莓派4B安装Tensorflow的方法步骤
2020/07/16 Python
python实现逻辑回归的示例
2020/10/09 Python
HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题
2021/01/19 HTML / CSS
墨西哥网上超市:Superama
2018/07/10 全球购物
应用数学专业求职信
2014/03/14 职场文书
计算机求职自荐信范文
2014/04/19 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis