始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

PHP漏洞全解-文件上传漏洞

发布时间:  2012/5/18 19:00:28

一套web应用程序,一般都会提供文件上传的功能,方便来访者上传一些文件。

下面是一个简单的文件上传表单

  1. <form action="upload.php" method="post" enctype="multipart/form-data" name="form1"> 
  2. <input type="file" name="file1" /><br /> 
  3. <input type="submit" value="上传文件" /> 
  4. <input type="hidden" name="MAX_FILE_SIZE" value="1024" /> 
  5. form> 

php的配置文件php.ini,其中选项upload_max_filesize指定允许上传的文件大小,默认是2M

$_FILES数组变量

PHP使用变量$_FILES来上传文件,$_FILES是一个数组。如果上传test.txt,那么$_FILES数组的内容为:

  1. $FILES 
  2. Array 
  3. [file] => Array 
  4. [name] => test.txt //文件名称 
  5. [type] => text/plain //MIME类型 
  6. [tmp_name] => /tmp/php5D.tmp //临时文件 
  7. [error] => 0 //错误信息 
  8. [size] => 536 //文件大小,单位字节 

如果上传文件按钮的name属性值为file

  1. <input type="file" name="file" /> 

那么使用$_FILES['file']['name']来获得客户端上传文件名称,不包含路径。使用$_FILES['file']['tmp_name']来获得服务端保存上传文件的临时文件路径

存放上传文件的文件夹

PHP不会直接将上传文件放到网站根目录中,而是保存为一个临时文件,名称就是$_FILES['file']['tmp_name']的值,开发者必须把这个临时文件复制到存放的网站文件夹中。

$_FILES['file']['tmp_name']的值是由PHP设置的,与文件原始名称不一样,开发者必须使用$_FILES['file']['name']来取得上传文件的原始名称。

上传文件时的错误信息

$_FILES['file']['error']变量用来保存上传文件时的错误信息,它的值如下:

错误信息 数值 说 明
UPLOAD_ERR_OK 0 没有错误
UPLOAD_ERR_INI_SIZE 1 上传文件的大小超过php.ini的设置
UPLOAD_ERR_FROM_SIZE 2 上传文件的大小超过HTML表单中MAX_FILE_SIZE的值
UPLOAD_ERR_PARTIAL 3 只上传部分的文件
UPLOAD_ERR_NO_FILE 4 没有文件上传

文件上传漏洞

如果提供给网站访问者上传图片的功能,那必须小心访问者上传的实际可能不是图片,而是可以指定的PHP程序。如果存放图片的目录是一个开放的文件夹,则入侵者就可以远程执行上传的PHP文件来进行攻击。

下面是一个简单的文件上传例子:

  1. php 
  2. // 设置上传文件的目录 
  3. $uploaddir = "D:/www/images/"
  4. // 检查file是否存在 
  5. if (isset($_FILES['file1'])) 
  6. // 要放在网站目录中的完整路径,包含文件名 
  7. $uploadfile = $uploaddir . $_FILES['file1']['name']; 
  8. // 将服务器存放的路径,移动到真实文件名 
  9. move_uploaded_file($_FILES['file1']['tmp_name'], $uploadfile); 
  10. ?> 
  11. …… 
  12. <form method="post" enctype="multipart/form-data" name="form1"> 
  13. <input type="file" name="file1" /><br /> 
  14. <input type="submit" value="上传文件" /> 
  15. <input type="hidden" name="MAX_FILE_SIZE" value="1024" /> 
  16. form> 

这个例子没有检验文件后缀,可以上传任意文件,很明显的上传漏洞


本文出自:亿恩科技【www.enkj.com】
php 
  • // 设置上传文件的目录 
  • $uploaddir = "D:/www/images/"
  • // 检查file是否存在 
  • if (isset($_FILES['file1'])) 
  • // 要放在网站目录中的完整路径,包含文件名 
  • $uploadfile = $uploaddir . $_FILES['file1']['name']; 
  • // 将服务器存放的路径,移动到真实文件名 
  • move_uploaded_file($_FILES['file1']['tmp_name'], $uploadfile); 
  • ?> 
  • …… 
  • <form method="post" enctype="multipart/form-data" name="form1"> 
  • <input type="file" name="file1" /><br /> 
  • <input type="submit" value="上传文件" /> 
  • <input type="hidden" name="MAX_FILE_SIZE" value="1024" /> 
  • form> 
  • 这个例子没有检验文件后缀,可以上传任意文件,很明显的上传漏洞


    本文出自:亿恩科技【www.enkj.com】
    -->

    服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      0
     
     
     
     

    0371-60135900
    7*24小时客服服务热线