动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
  
   PHP → 阅读文章

 php中文件上传的安全问题

作者来源: 
阅读 1223 人次 , 2006-3-29 4:16:00 


可以读/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”(通常会导致内容暴露)。这种攻击可以用于暴露任何敏感文件的内容。

 本文Tags安全  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:PHP出错界面
· 下一篇:一个多文件上传的例子
· PHP4.03关于session不能自动去除的临时处理方法
· PHP完全手册
· PHP 编码规范(3)
· NIS 函数库
· 使用php动态生成gif时遇到的问题和解决办法


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077