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数据饼图效果实现代码
Nov 23 PHP
php摘要生成函数(无乱码)
Feb 04 PHP
php数字游戏 计算24算法
Jun 10 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
Jun 28 PHP
php输出1000以内质数(素数)示例
Feb 16 PHP
PHP中IP地址与整型数字互相转换详解
Aug 20 PHP
php绘制圆形的方法
Jan 24 PHP
laravel 事件/监听器实例代码
Apr 12 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
May 06 PHP
laravel框架中间件简单使用方法示例
Jan 25 PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 PHP
php双向队列实例讲解
Nov 17 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
Discuz 模板引擎的封装类代码
2008/07/18 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
js中opener与parent的区别详细解析
2014/01/14 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
AngularJS中的JSONP实例解析
2016/12/01 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
完美实现js选项卡切换效果(一)
2017/03/08 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
2017/03/24 jQuery
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
jquery实现倒计时小应用
2017/09/19 jQuery
React BootStrap用户体验框架快速上手
2018/03/06 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
Vue监听事件实现计数点击依次增加的方法
2018/09/26 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
JavaScript实现省市区三级联动
2020/02/13 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
python数据结构之二叉树的遍历实例
2014/04/29 Python
全面解读Python Web开发框架Django
2014/06/30 Python
python连接字符串的方法小结
2015/07/13 Python
wxPython的安装图文教程(Windows)
2017/12/28 Python
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
将相和教学反思
2014/02/04 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
法制宣传标语集锦
2014/06/25 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
毕业设计致谢语
2015/05/14 职场文书
女性励志书籍推荐
2019/08/19 职场文书
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
2021/04/16 PHP
MySQL系列之十 MySQL事务隔离实现并发控制
2021/07/02 MySQL
简单聊聊Golang中defer预计算参数
2022/03/25 Golang