WordPress文件上传防护,禁止上传php脚本到上传目录

WordPress 的上传目录(wp-content/uploads)如果允许执行 PHP 脚本,一旦攻击者把伪装成图片的 webshell 传上去,就能通过浏览器直接运行恶意代码,网站可能被完全控制。
禁止这个目录执行 PHP 是 WordPress 文件上传防护里最基础也最有效的一步。
本文用 Nginx 和 Apache 两种常见环境演示具体配置方法,按步骤操作后即可用测试文件验证是否生效。

配置前需要准备什么

在动手之前,请确认以下几点:

  • 你能访问网站根目录和配置文件。宝塔面板用户直接在「网站 → 设置 → 配置文件」里操作;命令行用户需要 SSH 权限。
  • 你的服务器 Web 环境是 Nginx 还是 Apache,两者配置方式不同。
  • 建议先备份将要修改的配置文件,例如把 nginx.conf 复制一份为 .bak,避免改错后无法恢复。

本方法不会影响 WordPress 正常功能,因为 WordPress 核心并不会从 uploads 目录执行任何 PHP 文件。

Nginx 环境:在站点配置里封禁 PHP

Nginx 没有 .htaccess 机制,需要修改站点配置文件。
以宝塔面板为例:

  1. 打开「网站 → 设置 → 配置文件」,找到 server { ... } 代码块。
  2. location 相关配置之前,添加下面这段规则:
location ~ ^/wp-content/uploads/.*\.(php|php5|php7|phar)$ {
    deny all;
}

这段配置的含义:当访问 wp-content/uploads/ 下以 .php.php5.php7.phar 结尾的文件时,直接返回 403,禁止访问。

  1. 保存配置后,先执行配置测试命令确认没有语法错误:
nginx -t
  1. 测试通过后重载 Nginx:
nginx -s reload

如果你的站点使用了 CDN 或对象存储,还需要在源站配置中同样加上这条规则,否则攻击者可能直接绕过源站。

Apache 环境:用 .htaccess 拒绝执行 PHP

Apache 环境最简单的方式是在上传目录下放置一个 .htaccess 文件。
如果你之前没启用伪静态,依然可以用这种方法。

进入 wp-content/uploads 目录,新建或编辑 .htaccess,写入以下内容:


    Require all denied

如果服务器是 Apache 2.2 及以下旧版本,
需要把 Require all denied 换成 Order allow,denyDeny from all
建议优先升级到新版本。

修改后重启 Apache 服务,或等待配置自动生效。
注意 .htaccess 方式要求 Apache 开启了 AllowOverride,如果配置不生效,可以去虚拟主机配置里改用 块:


    
        Require all denied
    

验证防护是否真的生效

配置完成不是终点,一定要实测验证。

  1. wp-content/uploads 目录下新建一个测试文件 test.php,里面写入:
  1. 通过浏览器访问 https://你的域名/wp-content/uploads/test.php

预期结果有两种:

  • 返回 403 Forbidden,说明 PHP 已被禁止执行,防护正常。
  • 页面显示 BLOCKED,说明配置没生效,需要检查配置文件位置或重载服务。
  1. 验证完成后,立即删除 test.php,避免留下测试残留。

常见问题与避坑说明

为什么一定要禁止上传目录执行 PHP?
因为 uploads 是允许访客或后台间接写入文件的地方,攻击者把恶意脚本伪装成图片上传后,如果服务器把 .php 当作普通文件执行,整站就失守了。

配置过程中有几点经常踩坑:

  • 规则冲突:如果 Nginx 有其他 location 规则作用于 uploads,可能会覆盖你的 deny all。把新规则放在精确匹配或优先级更高的位置可以避免。
  • 宝塔防篡改插件:开启防篡改后,直接写入 .htaccess 可能失败,需要临时关闭插件或把该路径加入白名单。
  • 别误伤图片处理插件:有些图片压缩插件会生成临时 PHP 文件,如果它们确实需要执行,请评估后单独放行,而不是全部禁止。
  • 备份意识:修改配置前备份,改完必须重载服务,这两步不能省。

如果你的网站还在用旧版 PHP 或老主题,建议排查一下是否还有其他可写的目录(比如 wp-content/cache)也放行了 PHP,按照同样思路一并处理,安全性会更高。

完成以上配置后,你已经在 WordPress 文件上传防护上堵住了一个关键漏洞。
如果你用的环境比较特殊,比如 Windows 服务器或 Docker 容器,配置路径会略有不同,但核心思路不变:上传目录只放行静态资源,任何 PHP 请求都直接拒绝
遇到异常时,优先检查配置位置是否正确、服务是否重新加载,以及有没有被其他规则覆盖。

分享到:
上一篇
WooCommerce订单数据库分表,订单量大单表膨胀方案
下一篇
WooCommerce虚拟产品纠纷处理
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意