|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- <?php
- /**
- * 文件上传安全校验方法
- *
- * @version $Id: uploadsafe.inc.php 1 15:59 2020年8月19日Z tianya $
- * @package DedeCMS.Libraries
- * @copyright Copyright (c) 2007 - 2020, DesDev, Inc.
- * @license http://help.dedecms.com/usersguide/license.html
- * @link http://www.dedecms.com
- */
- if(!defined('DEDEINC')) exit('Request Error!');
-
- if(isset($_FILES['GLOBALS'])) exit('Request not allow!');
-
- //为了防止用户通过注入的可能性改动了数据库
- //这里强制限定的某些文件类型禁止上传
- $cfg_not_allowall = "php|pl|cgi|asp|aspx|jsp|php3|shtm|shtml";
- $keyarr = array('name', 'type', 'tmp_name', 'size');
- if ($GLOBALS['cfg_html_editor']=='ckeditor' && isset($_FILES['upload']) ||
- $GLOBALS['cfg_html_editor']=='ckeditor4' && isset($_FILES['upload'])
- )
- {
- $_FILES['imgfile'] = $_FILES['upload'];
- $CKUpload = TRUE;
- unset($_FILES['upload']);
- }
- foreach($_FILES as $_key=>$_value)
- {
- foreach($keyarr as $k)
- {
- if(!isset($_FILES[$_key][$k]))
- {
- exit('Request Error!');
- }
- }
- if( preg_match('#^(cfg_|GLOBALS)#', $_key) )
- {
- exit('Request var not allow for uploadsafe!');
- }
- $$_key = $_FILES[$_key]['tmp_name'];
- ${$_key.'_name'} = $_FILES[$_key]['name'];
- ${$_key.'_type'} = $_FILES[$_key]['type'] = preg_replace('#[^0-9a-z\./]#i', '', $_FILES[$_key]['type']);
- ${$_key.'_size'} = $_FILES[$_key]['size'] = preg_replace('#[^0-9]#','',$_FILES[$_key]['size']);
-
- if (is_array(${$_key.'_name'})) {
- if (count(${$_key.'_name'}) > 0) {
- foreach (${$_key.'_name'} as $key => $value) {
- if (!empty($value) && (preg_match("#\.(".$cfg_not_allowall.")$#i", $value) || !preg_match("#\.#", $value))) {
- if(!defined('DEDEADMIN'))
- {
- exit('Not Admin Upload filetype not allow !');
- }
- }
- }
- }
- } else {
- if(!empty(${$_key.'_name'}) && (preg_match("#\.(".$cfg_not_allowall.")$#i",${$_key.'_name'}) || !preg_match("#\.#", ${$_key.'_name'})) )
- {
- if(!defined('DEDEADMIN'))
- {
- exit('Not Admin Upload filetype not allow !');
- }
- }
- }
-
-
- if(empty(${$_key.'_size'}))
- {
- ${$_key.'_size'} = @filesize($$_key);
- }
-
- $imtypes = array
- (
- "image/pjpeg", "image/jpeg", "image/gif", "image/png",
- "image/xpng", "image/wbmp", "image/bmp"
- );
-
- if (is_array(${$_key.'_type'})) {
- if (count(${$_key.'_type'}) > 0) {
- foreach (${$_key.'_type'} as $key => $value) {
- if(in_array(strtolower(trim($value)), $imtypes))
- {
- $image_dd = @getimagesize($$_key);
- if (!is_array($image_dd))
- {
- exit('Upload filetype not allow !');
- }
- }
- }
- }
- } else {
- if(in_array(strtolower(trim(${$_key.'_type'})), $imtypes))
- {
- $image_dd = @getimagesize($$_key);
- if (!is_array($image_dd))
- {
- exit('Upload filetype not allow !');
- }
- }
- }
-
-
- }
- ?>
|