织梦CMS如何禁止上传PHP文件?

99ANYc3cd6
预计阅读时长 11 分钟
位置: 首页 织梦建站 正文

修改织梦后台的文件上传类型(最直接的方法)

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

织梦cms如何阻止上传php代码
(图片来源网络,侵删)
  1. 登录织梦CMS后台
  2. 进入 【系统】 -> 【系统基本参数】
  3. 在左侧菜单中找到 【媒体上传】 选项。
  4. 找到 上传文件类型 这个设置项。
  5. 删除 php,并确保它不在列表中,默认情况下,织梦可能不包含 php,但为了安全,最好检查一下。
  6. 同样,检查 不允许上传的文件类型,确保 phpphp3php4php5phtml 等都被包含在内。
  7. 点击 【确定保存】

优点

  • 操作简单,通过后台界面即可完成。
  • 可以阻止通过织梦后台媒体管理器、图集上传等常规上传途径上传PHP文件。

缺点

  • 仅限后台:这个限制只对织梦后台的上传组件有效,如果攻击者通过其他方式(如第三方上传组件、Webshell脚本、服务器漏洞)上传文件,此方法可能无效。
  • 可以被绕过:如果攻击者获得了网站目录的写入权限,他们可以直接使用FTP或服务器命令上传文件,完全绕过这个检查。

修改PHP配置文件 php.ini(服务器级限制)

这是更底层、更有效的方法,它直接限制了PHP引擎在哪些目录下执行PHP代码。

  1. 找到并编辑 php.ini 文件

    织梦cms如何阻止上传php代码
    (图片来源网络,侵删)
    • 这个文件通常位于服务器的根目录(如 /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 的路径。
  2. 修改 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 目录。
  3. 修改 cgi.fix_pathinfo 配置(针对Nginx+PHP环境)。 在Nginx+PHP-FPM环境中,一个常见的漏洞是利用 cgi.fix_pathinfo 的值为1(开启状态)来伪造文件类型,从而执行任意PHP代码。强烈建议将其设置为0

    织梦cms如何阻止上传php代码
    (图片来源网络,侵删)

    找到 cgi.fix_pathinfo 这一行,确保其值为0:

    cgi.fix_pathinfo=0

    设置为0后,PHP-FPM只会精确匹配文件名,不会去尝试不存在的文件,从而大大降低了安全风险。

  4. 重启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也无法执行,从根本上杜绝了Webshell的运行。

缺点

  • 需要服务器管理权限。
  • 配置不当可能会导致网站程序报错(如果程序需要访问其他目录)。

修改服务器目录权限(最有效的方法)

这是最根本、最安全的防御策略,核心思想是:让Web服务器(如Apache或Nginx)的用户对网站目录只有“读”和“写”的权限,但没有“执行”权限。

Web服务器的运行用户通常是 www-data (Debian/Ubuntu) 或 apache (CentOS/RedHat)。

  1. 设置网站根目录为755

    • 7 (所有者): 读、写、执行
    • 5 (所属组): 读、执行
    • 5 (其他人): 读、执行
      # /path/to/your/website 是你的网站根目录
      chmod 755 /path/to/your/website
  2. 设置上传目录为755(重要!)

    • 这是很多人容易犯错的地方,很多人以为上传目录应该是 777(所有权限),这是非常危险的!
    • 755 的权限意味着Web服务器用户可以写入文件,但不能进入该目录执行任何脚本,这是安全的。
      # /path/to/your/website/uploads 是你的上传目录
      chmod 755 /path/to/your/website/uploads
  3. 设置上传目录内的文件为644

    • 6 (所有者): 读、写
    • 4 (所属组): 读
    • 4 (其他人): 读
    • 这样,即使一个PHP文件被成功上传,它也只有读写权限,没有执行权限,Web服务器无法执行它。
      # -R 表示递归修改
      find /path/to/your/website/uploads -type f -exec chmod 644 {} \;

优点

  • 极致安全:即使PHP文件被上传,也无法被服务器执行,这是最底层的防御。
  • 防止权限滥用,避免因 777 等危险权限导致的安全问题。

缺点

  • 需要熟悉Linux命令行操作。
  • 某些老旧的CMS或插件可能因为权限问题无法正常写入文件,需要具体分析。

总结与最佳实践

为了织梦CMS的安全,建议你将以上方法组合使用,构建一个纵深防御体系:

  1. 基础防护(必做)

    • 方法一:在织梦后台 【系统基本参数】 -> 【媒体上传】 中,确保 php 等危险文件类型被禁止。
  2. 核心防护(强烈推荐)

    • 方法三:严格设置网站目录和上传目录的权限。这是最重要的一步,确保上传目录是 755,其内文件是 644
  3. 服务器级防护(进阶)

    • 方法二:如果拥有服务器权限,修改 php.ini 中的 open_basedircgi.fix_pathinfo,从PHP引擎层面限制代码的执行范围和方式。

通过以上组合,即使攻击者通过某种方式绕过了织梦前端的文件类型检查,上传了PHP文件,由于目录权限的限制,这个文件也无法被Web服务器执行,从而确保了你的网站安全。

-- 展开阅读全文 --
头像
C语言中default的关键作用是什么?
« 上一篇 2025-12-12
c语言入门经典 第5版正版PDF哪里能下载?
下一篇 » 2025-12-12

相关文章

取消
微信二维码
支付宝二维码

目录[+]