FleaPHP默认上传类的一个隐患

时间:2010-01-20 08:24:52  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:nbsp; 我下了个国内现在很流行的php框架中一个:FleaPHP 1.0.70 beta.翻了翻他的FLEA/FLEA/Helper/FileUploader.php,这个是此框架默认的文件上传类.它有一个检查上传文件是否合法的函数:       function check($allowExts = null, $maxSize = null)    {    if (!$this->isSuccessed()) { return false; }
  正文:

随着各种开发框架的盛行,程序员也不愿意做那么多重复的事情了,开发,速度最重要.现在开发什么东西都讲究一个效率.
  目前国内似乎还没有多少人对框架的安全性有多少研究.毕竟如果一个底层的编程框架出了问题,很多程序都将受到威胁.
  我下了个国内现在很流行的PHP框架中一个:FleaPHP 1.0.70 beta.翻了翻他的FLEA/FLEA/Helper/FileUploader.php,这个是此框架默认的文件上传类.它有一个检查上传文件是否合法的函数:
  
   function check($allowExts = null, $maxSize = null)
   {
   if (!$this->isSuccessed()) { return false; }
   //允许上传的扩展名
   if ($allowExts) {
   if (strpos($allowExts, ',')) {
   $exts = explode(',', $allowExts);
   } elseif (strpos($allowExts, '/')) {
   $exts = explode('/', $allowExts);
   } elseif (strpos($allowExts, '|')) {
   $exts = explode('|', $allowExts);
   } else {
   $exts = array($allowExts);
   }
  
   $fileExt = strtolower($this->getExt());//获取扩展名
   $passed = false;
   $exts = array_filter(array_map('trim', $exts), 'trim');
   foreach ($exts as $ext) {
   if (substr($ext, 0, 1) == '.') {
   $ext = substr($ext, 1);
   }
   if ($fileExt == strtolower($ext)) {
   $passed = true;
   break;
   }
   }
   if (!$passed) {
   return false;
   }
   }
  
   if ($maxSize && $this->getSize() > $maxSize) {
   return false;
   }
  
   return true;
   }
  再看getExt函数:
  
   function getExt()
   {
   if ($this->isMoved()) {
   return pathinfo($this->getNewPath(), PATHINFO_EXTENSION);
   } else {
   return pathinfo($this->getFilename(), PATHINFO_EXTENSION);
   }
   }
  继续跟踪php的pathinfo函数:
  
  /**//* {{{ proto array pathinfo(string path[, int options])
   Returns information about a certain string */
  PHP_FUNCTION(pathinfo)
  {
   zval *tmp;
   char *path, *ret = NULL;
   int path_len, have_basename;
   size_t ret_len;
   long opt = PHP_PATHINFO_ALL;
  
   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &path, &path_len, &opt) == FAILURE) {
   return;
   }
  
   have_basename = ((opt & PHP_PATHINFO_BASENAME) == PHP_PATHINFO_BASENAME);
  
   MAKE_STD_ZVAL(tmp);
   array_init(tmp);
  
   ......
   ......
  
   if ((opt & PHP_PATHINFO_EXTENSION) == PHP_PATHINFO_EXTENSION) {
   char *p;
   int idx;
  
   if (!have_basename) {
   php_basename(path, path_len, NULL, 0, &ret, &ret_len TSRMLS_CC);
   }
  
   p = zend_memrchr(ret, '.', ret_len);
  
   if (p) {
   idx = p - ret;
   add_assoc_stringl(tmp, "extension", ret + idx + 1, ret_len - idx - 1, 1);
   }
   }
  
   ......
   ......
FleaPHP默认上传类的一个隐患》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/PHP/12080.html


关键字:

关于《FleaPHP默认上传类的一个隐患》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td