国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
3.3KB

  1. <?php
  2. /**
  3. * 文件上传安全校验方法
  4. *
  5. * @version $Id: uploadsafe.inc.php 1 15:59 2020年8月19日Z tianya $
  6. * @package DedeCMS.Libraries
  7. * @copyright Copyright (c) 2007 - 2020, DesDev, Inc.
  8. * @license http://help.dedecms.com/usersguide/license.html
  9. * @link http://www.dedecms.com
  10. */
  11. if(!defined('DEDEINC')) exit('Request Error!');
  12. if(isset($_FILES['GLOBALS'])) exit('Request not allow!');
  13. //为了防止用户通过注入的可能性改动了数据库
  14. //这里强制限定的某些文件类型禁止上传
  15. $cfg_not_allowall = "php|pl|cgi|asp|aspx|jsp|php3|shtm|shtml";
  16. $keyarr = array('name', 'type', 'tmp_name', 'size');
  17. if ($GLOBALS['cfg_html_editor']=='ckeditor' && isset($_FILES['upload']) ||
  18. $GLOBALS['cfg_html_editor']=='ckeditor4' && isset($_FILES['upload'])
  19. )
  20. {
  21. $_FILES['imgfile'] = $_FILES['upload'];
  22. $CKUpload = TRUE;
  23. unset($_FILES['upload']);
  24. }
  25. foreach($_FILES as $_key=>$_value)
  26. {
  27. foreach($keyarr as $k)
  28. {
  29. if(!isset($_FILES[$_key][$k]))
  30. {
  31. exit('Request Error!');
  32. }
  33. }
  34. if( preg_match('#^(cfg_|GLOBALS)#', $_key) )
  35. {
  36. exit('Request var not allow for uploadsafe!');
  37. }
  38. $$_key = $_FILES[$_key]['tmp_name'];
  39. ${$_key.'_name'} = $_FILES[$_key]['name'];
  40. ${$_key.'_type'} = $_FILES[$_key]['type'] = preg_replace('#[^0-9a-z\./]#i', '', $_FILES[$_key]['type']);
  41. ${$_key.'_size'} = $_FILES[$_key]['size'] = preg_replace('#[^0-9]#','',$_FILES[$_key]['size']);
  42. if (is_array(${$_key.'_name'})) {
  43. if (count(${$_key.'_name'}) > 0) {
  44. foreach (${$_key.'_name'} as $key => $value) {
  45. if (!empty($value) && (preg_match("#\.(".$cfg_not_allowall.")$#i", $value) || !preg_match("#\.#", $value))) {
  46. if(!defined('DEDEADMIN'))
  47. {
  48. exit('Not Admin Upload filetype not allow !');
  49. }
  50. }
  51. }
  52. }
  53. } else {
  54. if(!empty(${$_key.'_name'}) && (preg_match("#\.(".$cfg_not_allowall.")$#i",${$_key.'_name'}) || !preg_match("#\.#", ${$_key.'_name'})) )
  55. {
  56. if(!defined('DEDEADMIN'))
  57. {
  58. exit('Not Admin Upload filetype not allow !');
  59. }
  60. }
  61. }
  62. if(empty(${$_key.'_size'}))
  63. {
  64. ${$_key.'_size'} = @filesize($$_key);
  65. }
  66. $imtypes = array
  67. (
  68. "image/pjpeg", "image/jpeg", "image/gif", "image/png",
  69. "image/xpng", "image/wbmp", "image/bmp"
  70. );
  71. if (is_array(${$_key.'_type'})) {
  72. if (count(${$_key.'_type'}) > 0) {
  73. foreach (${$_key.'_type'} as $key => $value) {
  74. if(in_array(strtolower(trim($value)), $imtypes))
  75. {
  76. $image_dd = @getimagesize($$_key);
  77. if (!is_array($image_dd))
  78. {
  79. exit('Upload filetype not allow !');
  80. }
  81. }
  82. }
  83. }
  84. } else {
  85. if(in_array(strtolower(trim(${$_key.'_type'})), $imtypes))
  86. {
  87. $image_dd = @getimagesize($$_key);
  88. if (!is_array($image_dd))
  89. {
  90. exit('Upload filetype not allow !');
  91. }
  92. }
  93. }
  94. }
  95. ?>