All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
PHP技巧:PHP中几种删除目录的三种方法_[PHP教程]
动态网页PHP函数速查大全汇总_[PHP教程]
基于AJAX技术提高搜索引擎排名_[AJAX教程]
asp程序页面出现超时已过期问题_mssql学习_编程技术
visual c++ MFC的CObject类
visual c++中调试窗口(Call Stack窗口)
用javascript操纵GridView中CheckBox的两个常用技巧_[Asp.Net教程]
学习PHP技术:txtSQL安装手册中文版_php资料_编程技术
asp.net中客户端怎么保持与服务器时间一致_[Asp.Net教程]
SQL语句经验技巧_[SQL Server教程]
Reading number is top 10 pictures
Plump, too plump!1
为什么别人说你是疯子
The little girl with long hair2
西游四格漫画(二)
西班牙山村小景3
The service WaLiangGe Chinese aircraft carrier1
This is heaven to some path
上传几张色图
人美胸美腿更美4
BingBingFan apple dew point photo gallery5
Download software ranking
WebService在.NET中的实战应用教学视频 → 第1集
C#编程思想
Tram sex maniac 2 (H) rar bag14
电车之狼R
传奇私服架设教程
Eclipse 4.2.2 For Win32
Boxer's Top ten classic battle3
Boxer Classic video3
Unix video tutorial11
Unix video tutorial3
归海一刀 published in(发表于) 2014/2/17 7:35:44 Edit(编辑)
PHP技巧:PHP程序中文件上传的安全问题_[PHP教程]

PHP技巧:PHP程序中文件上传的安全问题_[PHP教程]

PHP技巧:PHP程序中文件上传的安全问题_[PHP教程]

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







上面的代码让用户从本地机器选择一个文件,当点击提交后,文件就会被上载到服务器。这显然是很有用的功能,但是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”(通常会导致内容暴露)。这种攻击可以用于暴露任何敏感文件的内容。







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.