帝国CMS上传附件时如何严格限制只允许Word文档

落强酱_8028

落强酱_8028

2026-09-19

909人浏览

原创

必须服务端双重校验扩展名与mime类型,并叠加web服务器隔离和php执行禁用,缺一不可。仅依赖后台文件类型设置或前端校验极易被绕过,无法真正限制只允许.doc/.docx上传。

帝国cms上传附件时如何严格限制只允许word文档

帝国CMS后台上传限制只允许.doc/.docx文件

默认情况下,帝国CMS的附件上传不限制具体扩展名,仅靠前端JS校验或后端简单后缀判断极易绕过。要真正实现“只允许Word文档”,必须在服务端做双重校验:既检查文件扩展名,也验证实际MIME类型和二进制特征。

修改/e/class/functions.php中的文件上传校验逻辑

帝国CMS的通用上传入口是DoUpload函数,位于/e/class/functions.php。不能只改前台JS或表单accept属性——这些全可被浏览器跳过。需直接干预该函数的校验分支:

  • 找到if($filetype=='')之后、if($filesize==0)之前的校验段
  • 插入以下强制MIME+扩展名校验逻辑(注意替换原有宽松判断):
    if (!in_array(strtolower($filetype), ['.doc', '.docx'])) {
        printerror('FileExtNotAllow', '', 1);
    }
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mime = finfo_file($finfo, $filepath);
    finfo_close($finfo);
    if (!in_array($mime, [
        'application/msword',
        'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
    ])) {
        printerror('FileMimeNotAllow', '', 1);
    }
  • printerror调用需确保语言包中已定义FileExtNotAllowFileMimeNotAllow错误提示

同步调整PHP和Web服务器层的兜底限制

仅改CMS代码不够。攻击者可能通过直接POST绕过DoUpload,或利用Nginx/Apache配置缺陷上传恶意文件。必须叠加基础设施层防护:

Feihong Word Docx
Feihong Word Docx

创建、检查和编辑 Microsoft Word 文档和 DOCX 文件,支持样式、编号、修订追踪、表格、分节及兼容性检查

下载
  • 在PHP配置中禁用危险执行扩展:disable_functions = exec,passthru,shell_exec,system
  • Nginx配置中添加location ~* \.(doc|docx)$块,禁止该路径下执行PHP:deny all;
  • Apache需在.htaccess或vhost中设置:<filesmatch>SetHandler default-handler</filesmatch>
  • 确认upload_max_filesizepost_max_sizephp.ini中合理(如20M),避免超大Word文档拖垮服务

为什么不能只依赖帝国CMS后台的“允许上传文件类型”设置

系统后台「系统参数设置→文件设置」里的允许上传的文件类型字段,本质只是对$filetype变量做in_array()匹配,且未校验MIME、未打开finfo扩展、未检查ZIP结构。实测发现:

  • 攻击者上传伪装成test.docx的PHP木马,只要文件头不是PK(ZIP签名),finfo会返回text/plain,但CMS仍会放行
  • 某些Office漏洞可构造特殊.docx触发远程代码执行,仅靠扩展名白名单毫无意义
  • 后台设置不生效于API接口、附件批量导入、编辑器粘贴上传等非标准路径

真正的防线必须落在finfo校验+Web服务器隔离+PHP执行禁用这三层,缺一不可。任何一层松动,都可能让shell.docx变成shell.php

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

word cms 帝国cms word文档

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

8864

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

5401

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

1995

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

3348

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4014

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3151

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

4457

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

3462

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

11542

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程