php中文件上传的安全问题


Posted in PHP onOctober 09, 2006

可以读/etc/passwd!

这段。。

[文件上载]
PHP自动支持基于RFC 1867的文件上载,我们看下面的例子:

<FORM METHOD="POST" ENCTYPE="multipart/form-data">
<INPUT TYPE="FILE" NAME="hello">
<INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="10240">
<INPUT TYPE="SUBMIT">
</FORM>

上面的代码让用户从本地机器选择一个文件,当点击提交后,文件就会被上载到服务器。这显然是很有用的功能,但是PHP的响应方式使这项功能变的不安全。当PHP第一次接到这种请求,甚至在它开始解析被调用的PHP代码之前,它会先接受远程用户的文件,检查文件的长度是否超过“$MAX_FILE_SIZE variable”定义的值,如果通过这些测试的话,文件就会被存在本地的一个临时目录中。

因此,攻击者可以发送任意文件给运行PHP的主机,在PHP程序还没有决定是否接受文件上载时,文件已经被存在服务器上了。

这里我就不讨论利用文件上载来对服务器进行DOS攻击的可能性了。

让我们考虑一下处理文件上载的PHP程序,正如我们上面说的,文件被接收并且存在服务器上(位置是在配置文件中指定的,一般是/tmp),扩展名一般是随机的,类似“phpxXuoXG”的形式。PHP程序需要上载文件的信息以便处理它,这可以通过两种方式,一种方式是在PHP 3中已经使用的,另一种是在我们对以前的方法提出安全公告后引入的。

但是,我们可以肯定的说,问题还是存在的,大多数PHP程序还是使用老的方式来处理上载文件。PHP设置了四个全局变量来描述上载文件,比如说上面的例子:

$hello = Filename on local machine (e.g "/tmp/phpxXuoXG")
$hello_size = Size in bytes of file (e.g 1024)
$hello_name = The original name of the file on the remote system (e.g "c:\\temp\\hello.txt")
$hello_type = Mime type of uploaded file (e.g "text/plain")

然后PHP程序开始处理根据“$hello”指定的文件,问题在于“$hello”不一定是一个PHP设置的变量,任何远程用户都可以指定它。如果我们使用下面的方式:

http://vulnhost/vuln.php?hello=/etc/passwd&hello_size=10240&hello_type=text/plain&hello_name=hello.txt

就导致了下面的PHP全局变量(当然POST方式也可以(甚至是Cookie)):

$hello = "/etc/passwd"
$hello_size = 10240
$hello_type = "text/plain"
$hello_name = "hello.txt"

上面的表单数据正好满足了PHP程序所期望的变量,但是这时PHP程序不再处理上载的文件,而是处理“/etc/passwd”(通常会导致内容暴露)。这种攻击可以用于暴露任何敏感文件的内容。 

 

PHP 相关文章推荐
模仿OSO的论坛(一)
Oct 09 PHP
php面向对象全攻略 (十六) 对象的串行化
Sep 30 PHP
浅谈apache和nginx的rewrite的区别
Feb 22 PHP
php获取URL中带#号等特殊符号参数的解决方法
Sep 02 PHP
smarty中js的调用方法示例
Oct 27 PHP
PHP5.2下preg_replace函数的问题
May 08 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
Dec 07 PHP
yii2.0实现pathinfo的形式访问的配置方法
Apr 06 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
Apr 21 PHP
PHPStorm+XDebug进行调试图文教程
Jun 13 PHP
PHP的mysqli_stat()函数讲解
Jan 23 PHP
Yii框架核心组件类实例详解
Aug 06 PHP
ftp类(example.php)
Oct 09 #PHP
PHP概述.
Oct 09 #PHP
PHP安装问题
Oct 09 #PHP
提问的智慧
Oct 09 #PHP
DOMXML函数笔记
Oct 09 #PHP
一个很方便的 XML 类!!原创的噢
Oct 09 #PHP
提问的智慧(2)
Oct 09 #PHP
You might like
PHP分页显示制作详细讲解
2008/11/19 PHP
php 图片上添加透明度渐变的效果
2009/06/29 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
js 程序执行与顺序实现详解
2013/05/13 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
2015/03/03 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
基于打包工具Webpack进行项目开发实例
2018/05/29 Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
2019/10/24 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python将每个单词按空格分开并保存到文件中
2018/03/19 Python
python3解析库lxml的安装与基本使用
2018/06/27 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
Python 做曲线拟合和求积分的方法
2018/12/29 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
Python 自由定制表格的实现示例
2020/03/20 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
Python中qutip用法示例详解
2020/10/02 Python
ivx平台开发之不用代码实现一个九宫格抽奖功能
2021/01/27 HTML / CSS
科沃斯机器人官网商城:Ecovacs
2016/08/29 全球购物
教师辞职报告范文
2014/01/20 职场文书
体育活动总结范文
2014/05/04 职场文书
酒店七夕情人节活动策划方案
2014/08/24 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
电信营业员岗位职责
2015/04/14 职场文书
学校工会工作总结2015
2015/05/19 职场文书
光荣之路观后感
2015/06/12 职场文书
创业计划书之牛肉汤快餐店
2019/10/08 职场文书
怎么用Python识别手势数字
2021/06/07 Python
Windows server 2016服务器基本设置
2022/08/14 Servers