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
关于Intype一些小问题的解决办法
Mar 28 PHP
php写的简易聊天室代码
Jun 04 PHP
PHP 设计模式之观察者模式介绍
Feb 22 PHP
php实现cc攻击防御和防止快速刷新页面示例
Feb 13 PHP
PHP实现的sqlite数据库连接类
Dec 12 PHP
PHP删除指定目录中的所有目录及文件的方法
Feb 26 PHP
php简单统计字符串单词数量的方法
Jun 19 PHP
PHP递归创建多级目录
Nov 05 PHP
php中文字符串截取多种方法汇总
Oct 06 PHP
laravel migrate初学常见错误的解决方法
Oct 11 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
Oct 12 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 多维数组排序实现代码
2009/08/05 PHP
php 数组的指针操作实现代码
2011/02/08 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
带密匙的php加密解密示例分享
2014/01/29 PHP
thinkphp配置连接数据库技巧
2014/12/02 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
node.js中的socket.io的广播消息
2014/12/15 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
jquery实现经典的淡入淡出选项卡效果代码
2015/09/22 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
2015/11/30 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
2016/08/10 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
JS实现读取xml内容并输出到div中的方法示例
2018/04/19 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
使用rollup打包JS的方法步骤
2018/12/05 Javascript
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
[02:03]《现实生活中的DOTA2》—林书豪&DOTA2职业选手出演短片
2015/08/18 DOTA
python中pycurl库的用法实例
2014/09/30 Python
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
2017/11/24 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
Python K最近邻从原理到实现的方法
2019/08/15 Python
Python调用scp向服务器上传文件示例
2019/12/22 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
python实现KNN近邻算法
2020/12/30 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
eDreams德国:南欧领先的在线旅游公司
2020/12/07 全球购物
C#笔试题和英文面试题
2013/02/07 面试题
C#面试题问题集
2016/04/02 面试题
主管职责范文
2013/11/09 职场文书
领导欢迎词范文
2015/01/26 职场文书
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
SQL实现LeetCode(177.第N高薪水)
2021/08/04 MySQL