|
<br> 这是一个值得重视的问题,但并不如文章中说的那么严重,只是希望各位使用php上传文件是留心这个问题。 <BR><BR>【来源】 <BR>Secure Reality Pty Ltd. Security Advisory #1 (SRADV00001) <BR>http://www.securereality.com.au,2000-09-04 <BR><BR>【影响系统】 <BR>几乎任何提供文件上载能力的PHP程序都受影响。 <BR><BR>【简介】 <BR>HP是一个功能很强的web脚注语言,已经广泛流行。它有一个特性就是易于处理从远程浏览器上载来的文件。这个功能运用得非常普遍,特别是在图片画廊、拍卖和web邮件风格的应用中。 <BR><BR>HP处理文件上载的方法容易使PHP应用程序工作于服务器上的任意文件,而不是用户上载来的文件。这通常会引导远程攻击者读取服务器上的任何文件,而它们通常只能被运行web服务器(一般是’nobody’)的用户访问。 <BR><BR>【影响】 <BR>1.暴露文件 <BR>2.经常会泄漏PHP代码 <BR>3.经常会泄漏数据库认证数据 <BR>4.可能使机器崩溃 <BR><BR>【细节】 <BR>当文件上载给一个PHP脚本时,PHP接收文件,赋予它一个随机名称,然后把它放在一个配置好的临时目录中。上载文件的信息将传递给PHP脚本,内容是4个全局变量。假设信息的文件域叫做’hello’,那么4个变量将会是: <BR>$hello = 临时文件名 (例如 ’/tmp/ASHDjkjbs’) <BR>$hello_name = 当文件位于远程计算机时的名称 (例 ’c:\hello.tmp) <BR>$hello_type = 文件的Mime类型 (例如 ’text/plain’) <BR>$hello_size = 上载文件的大小 (例如 2000 字节) <BR><BR>临时文件会在脚本执行结束时自动删除,因此PHP脚本通常需要把它移到其它地方。例如,它可能会把文件拷贝到一个MySQL数据库之中。 <BR><BR>问题实际上存在于PHP缺省的行为。除非特意进行另外的配置(通过php.ini文件里的register_globals = Off),否则,提交时表格域指定的值在PHP脚本中会自动定义为全局变量。 <BR><BR>如果有一个表,它的输入域是: <BR><input name="test"> <BR>那么当PHP脚本被调用来处理表格输入时,就会设置全局变量$test。这是一个严重的安全弱点。问题非常简单,通过用户定义的输入搅乱全局名字空间,就会使环境不稳定。 <BR><BR>回到前面提到的示例,我们可以使用如下的表格输入创建四个变量$hello, <BR>$hello_name, $hello_type, $hello_size: <BR><BR>这就会引导PHP脚本工作于口令文件,结果通常是将它暴露给攻击者。 <BR><BR>【补丁】 <BR>目前没有。 <BR>建议改变php.ini,设置register_globals为off, track_vars 为 on。 <br><br> |
|