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 相关文章推荐
php 模拟POST|GET操作实现代码
Jul 20 PHP
php通用防注入程序 推荐
Feb 26 PHP
php设计模式 Composite (组合模式)
Jun 26 PHP
php中数组首字符过滤功能代码
Jul 31 PHP
解析php中两种缩放图片的函数,为图片添加水印
Jun 14 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
Apr 05 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
Aug 16 PHP
PHP抓取网页、解析HTML常用的方法总结
Jul 01 PHP
PHP中key和current,next的联合运用实例分析
Mar 29 PHP
非常有用的9个PHP代码片段
Apr 06 PHP
php基于dom实现读取图书xml格式数据的方法
Feb 03 PHP
php根据用户名和手机号查询是否存在手机号码
Feb 16 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
收音机的保养
2021/03/01 无线电
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
PHP计算指定日期所在周的开始和结束日期的方法
2015/03/24 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
2017/02/03 PHP
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
jquery delay()介绍及使用指南
2014/09/02 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
学习javascript文件加载优化
2016/02/19 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
JavaScript中常用的验证reg
2016/10/13 Javascript
vue2项目使用sass的示例代码
2017/06/28 Javascript
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
vue项目引入字体.ttf的方法
2018/09/28 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
antd form表单数据回显操作
2020/11/02 Javascript
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
python使用分治法实现求解最大值的方法
2015/05/12 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
2019/12/30 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
2020/11/28 Python
如何通过python检查文件是否被占用
2020/12/18 Python
巴西最大的体育用品商城:Netshoes巴西
2016/11/29 全球购物
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
总经理岗位职责描述
2014/02/08 职场文书
少儿节目主持串词
2014/04/02 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
应收账款管理制度
2015/08/06 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle