修改织梦后台的文件上传类型(最直接的方法)
这是织梦CMS内置的功能,也是最直接的控制上传文件类型的方法。

- 登录织梦CMS后台。
- 进入 【系统】 -> 【系统基本参数】。
- 在左侧菜单中找到 【媒体上传】 选项。
- 找到
上传文件类型这个设置项。 - 删除
php,并确保它不在列表中,默认情况下,织梦可能不包含php,但为了安全,最好检查一下。 - 同样,检查
不允许上传的文件类型,确保php、php3、php4、php5、phtml等都被包含在内。 - 点击 【确定保存】。
优点:
- 操作简单,通过后台界面即可完成。
- 可以阻止通过织梦后台媒体管理器、图集上传等常规上传途径上传PHP文件。
缺点:
- 仅限后台:这个限制只对织梦后台的上传组件有效,如果攻击者通过其他方式(如第三方上传组件、Webshell脚本、服务器漏洞)上传文件,此方法可能无效。
- 可以被绕过:如果攻击者获得了网站目录的写入权限,他们可以直接使用FTP或服务器命令上传文件,完全绕过这个检查。
修改PHP配置文件 php.ini(服务器级限制)
这是更底层、更有效的方法,它直接限制了PHP引擎在哪些目录下执行PHP代码。
-
找到并编辑
php.ini文件。
(图片来源网络,侵删)- 这个文件通常位于服务器的根目录(如
/etc/php/7.4/apache2/php.ini或/usr/local/php/etc/php.ini),具体路径取决于你的服务器环境(如Apache、Nginx)和PHP版本。 - 你可以通过在网站根目录下创建一个
info.php文件,内容为<?php phpinfo(); ?>,然后在浏览器中访问它,找到Loaded Configuration File这一行,就能看到php.ini的路径。
- 这个文件通常位于服务器的根目录(如
-
修改
open_basedir配置。open_basedir是一个非常关键的安全选项,它用于将PHP脚本只能在指定的目录及其子目录中访问文件,我们可以用它来限制PHP脚本的执行范围。找到
open_basedir这一行,如果没有就自己添加,将其值设置为你网站的目录。示例: 假设你的网站根目录是
/var/www/html,那么你可以这样设置:open_basedir = /var/www/html/:/tmp/
/var/www/html/:表示PHP脚本只能在网站根目录及其子目录(如/uploads/)中操作文件。/tmp/:通常需要加上临时目录,因为很多程序(包括PHP自身)会使用/tmp目录。
-
修改
cgi.fix_pathinfo配置(针对Nginx+PHP环境)。 在Nginx+PHP-FPM环境中,一个常见的漏洞是利用cgi.fix_pathinfo的值为1(开启状态)来伪造文件类型,从而执行任意PHP代码。强烈建议将其设置为0。
(图片来源网络,侵删)找到
cgi.fix_pathinfo这一行,确保其值为0:cgi.fix_pathinfo=0
设置为0后,PHP-FPM只会精确匹配文件名,不会去尝试不存在的文件,从而大大降低了安全风险。
-
重启PHP-FPM/Apache服务。 保存
php.ini文件后,必须重启相应的服务才能使配置生效。- 对于PHP-FPM:
# 对于CentOS/RedHat systemctl restart php-fpm # 对于Debian/Ubuntu systemctl restart php7.4-fpm # 版本号可能不同
- 对于Apache (以mod_php方式运行):
systemctl restart httpd
- 对于PHP-FPM:
优点:
- 服务器级别:对所有在该服务器上运行的网站都有效。
- 非常有效:即使文件被上传到了非网站目录,PHP也无法执行,从根本上杜绝了Webshell的运行。
缺点:
- 需要服务器管理权限。
- 配置不当可能会导致网站程序报错(如果程序需要访问其他目录)。
修改服务器目录权限(最有效的方法)
这是最根本、最安全的防御策略,核心思想是:让Web服务器(如Apache或Nginx)的用户对网站目录只有“读”和“写”的权限,但没有“执行”权限。
Web服务器的运行用户通常是 www-data (Debian/Ubuntu) 或 apache (CentOS/RedHat)。
-
设置网站根目录为755:
7(所有者): 读、写、执行5(所属组): 读、执行5(其他人): 读、执行# /path/to/your/website 是你的网站根目录 chmod 755 /path/to/your/website
-
设置上传目录为755(重要!):
- 这是很多人容易犯错的地方,很多人以为上传目录应该是
777(所有权限),这是非常危险的! 755的权限意味着Web服务器用户可以写入文件,但不能进入该目录执行任何脚本,这是安全的。# /path/to/your/website/uploads 是你的上传目录 chmod 755 /path/to/your/website/uploads
- 这是很多人容易犯错的地方,很多人以为上传目录应该是
-
设置上传目录内的文件为644:
6(所有者): 读、写4(所属组): 读4(其他人): 读- 这样,即使一个PHP文件被成功上传,它也只有读写权限,没有执行权限,Web服务器无法执行它。
# -R 表示递归修改 find /path/to/your/website/uploads -type f -exec chmod 644 {} \;
优点:
- 极致安全:即使PHP文件被上传,也无法被服务器执行,这是最底层的防御。
- 防止权限滥用,避免因
777等危险权限导致的安全问题。
缺点:
- 需要熟悉Linux命令行操作。
- 某些老旧的CMS或插件可能因为权限问题无法正常写入文件,需要具体分析。
总结与最佳实践
为了织梦CMS的安全,建议你将以上方法组合使用,构建一个纵深防御体系:
-
基础防护(必做):
- 方法一:在织梦后台 【系统基本参数】 -> 【媒体上传】 中,确保
php等危险文件类型被禁止。
- 方法一:在织梦后台 【系统基本参数】 -> 【媒体上传】 中,确保
-
核心防护(强烈推荐):
- 方法三:严格设置网站目录和上传目录的权限。这是最重要的一步,确保上传目录是
755,其内文件是644。
- 方法三:严格设置网站目录和上传目录的权限。这是最重要的一步,确保上传目录是
-
服务器级防护(进阶):
- 方法二:如果拥有服务器权限,修改
php.ini中的open_basedir和cgi.fix_pathinfo,从PHP引擎层面限制代码的执行范围和方式。
- 方法二:如果拥有服务器权限,修改
通过以上组合,即使攻击者通过某种方式绕过了织梦前端的文件类型检查,上传了PHP文件,由于目录权限的限制,这个文件也无法被Web服务器执行,从而确保了你的网站安全。
