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 高效率写法 推荐
Feb 21 PHP
PHP实现异步调用方法研究与分享
Oct 27 PHP
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
Jun 07 PHP
php遍历文件夹和文件列表示例分享
Mar 11 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
php中substr()函数参数说明及用法实例
Nov 15 PHP
php中heredoc与nowdoc介绍
Dec 25 PHP
php用ini_get获取php.ini里变量值的方法
Mar 04 PHP
又十个超级有用的PHP代码片段
Sep 24 PHP
如何解决PHP无法实现多线程的问题
Sep 25 PHP
详解php魔术方法(Magic methods)的使用方法
Feb 14 PHP
PHP数学运算与数据处理实例分析
Apr 01 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默认安装产生系统漏洞
2006/10/09 PHP
PHP include_path设置技巧分享
2011/07/03 PHP
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
Javascript的匿名函数小结
2009/12/31 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
2015/04/30 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
Vue.JS入门教程之处理表单
2016/12/01 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
Electron vue的使用教程图文详解
2019/07/05 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
JavaScript对象原型链原理解析
2020/01/22 Javascript
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
详解Python中for循环的使用
2015/04/14 Python
python简单实现获取当前时间
2016/08/27 Python
Django URL传递参数的方法总结
2016/08/28 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
Python Collatz序列实现过程解析
2019/10/12 Python
Python持续监听文件变化代码实例
2020/07/22 Python
一文读懂Python 枚举
2020/08/25 Python
CSS3实例分享--超炫checkbox复选框和radio单选框
2014/09/01 HTML / CSS
使用Vue.js和MJML创建响应式电子邮件
2021/03/23 Vue.js
初中同学聚会邀请函
2014/02/03 职场文书
统计岗位职责
2014/02/21 职场文书
给校长的一封建议书
2014/03/12 职场文书
代办委托书怎样写
2014/04/08 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
企业安全生产责任书范本
2014/07/28 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
Oracle表空间与权限的深入讲解
2021/11/17 Oracle