
类型:CMS系统
简介:一款开源的内容管理系统(CMS),用于构建和管理网站。
WordPress的wp-content/uploads目录用于保存图片、文档和其他媒体文件。该目录通常需要允许Web服务器写入,但普通媒体文件不需要执行PHP代码。
如果插件漏洞或账号泄露导致恶意PHP文件被上传,服务器允许直接执行该文件时,攻击者可能进一步读取配置、修改网站或写入其他后门。因此,禁止上传目录执行脚本是WordPress服务器加固的重要措施。
一、修改前做好准备
开始配置前,应完成以下操作:
- 备份网站文件和数据库
- 保存当前Web服务器配置
- 确认网站使用Nginx还是Apache
- 检查上传目录中是否存在正常PHP程序
- 准备主机面板或SSH恢复入口
少数插件可能会在上传目录保存动态脚本。启用限制前,应先检查并确认这些文件是否必要。
二、Nginx禁止上传目录执行PHP
在当前网站的Nginx配置中,将以下规则放在通用PHP处理规则之前:
location ~* ^/wp-content/uploads/.*\.(?:php[0-9]?|phtml|phar)$ {
deny all;
}
保存后执行配置检查:
nginx -t
确认没有错误,再重新加载Nginx:
systemctl reload nginx
如果使用宝塔等服务器面板,可以进入对应网站的Nginx配置页面添加规则。不要在配置检测失败时强制重新加载服务。
三、Apache禁止上传目录执行PHP
如果Apache允许上传目录读取.htaccess,可以在wp-content/uploads/.htaccess中添加:
<FilesMatch "\.(php[0-9]?|phtml|phar)$">
Require all denied
</FilesMatch>
使用旧版Apache环境时,访问控制语法可能不同。更稳妥的方法是在虚拟主机配置中设置目录规则,并由服务器管理员重新加载Apache。
如果.htaccess规则没有生效,应检查:
- Apache是否允许当前目录使用访问控制规则
- 网站是否实际运行在Nginx环境
- 前方是否还有CDN或反向代理缓存
- PHP处理规则是否绕过了目录限制
四、限制WordPress允许上传的文件类型
WordPress默认已经限制普通用户可上传的文件类型。网站还可以通过代码进一步收紧范围。
下面的示例只保留常见图片和文档格式:
add_filter('upload_mimes', function ($mime_types) {
$allowed_types = [
'jpg|jpeg|jpe' => 'image/jpeg',
'png' => 'image/png',
'gif' => 'image/gif',
'webp' => 'image/webp',
'avif' => 'image/avif',
'pdf' => 'application/pdf',
];
return array_intersect_key($mime_types, $allowed_types);
});
代码可添加到自定义功能插件或MU插件中。不要直接修改WordPress核心文件,也不建议长期写入可能被主题更新覆盖的functions.php。
如果网站需要上传音频、视频、表格或压缩包,应根据实际业务增加对应类型。SVG能够包含脚本和外部资源,未配置净化处理时不应直接开放上传。
五、检查目录权限
常见权限建议为:
- 目录:
755 - 文件:
644 wp-config.php:根据服务器环境进一步收紧
不要为了处理上传失败而直接将目录设置为777。权限过宽会让同一服务器中的其他进程更容易修改网站文件。
具体权限还取决于PHP运行用户、Web服务器用户和主机隔离方式。修改前应确认文件所有者设置正确。
六、测试拦截是否生效
可以在测试环境中创建一个不包含敏感代码的测试文件,例如:
<?php echo 'blocked'; ?>
将文件命名为blocked-test.php并放入上传目录,然后通过浏览器访问对应地址。
正确配置后,服务器应返回403 Forbidden、404 Not Found或直接拒绝执行,不应显示blocked。
测试完成后立即删除该文件,并继续检查:
- 正常图片能否上传和显示
- WordPress能否生成缩略图
- PDF等允许类型是否正常下载
- CDN是否缓存了错误响应
- 多站点上传目录是否同样受到保护
七、发现上传目录已有PHP文件怎么办
不要直接批量删除。先备份并记录文件路径、修改时间和所有者,然后检查文件内容及来源。
如果确认存在恶意文件,应进一步完成:
- 检查管理员和编辑账号
- 更新存在漏洞的插件与主题
- 修改WordPress和主机密码
- 更换数据库及API凭据
- 检查计划任务和数据库内容
- 校验WordPress核心及插件文件
- 从可信备份恢复受影响内容
禁止PHP执行只能阻止一部分攻击路径,不能代替漏洞修复和账号安全管理。
常见问题
1、禁止PHP执行会影响图片上传吗?
正常情况下不会。图片上传和缩略图生成由WordPress及服务器图像组件处理,不需要从上传目录执行PHP文件。
2、为什么添加.htaccess后没有生效?
常见原因是网站使用Nginx、Apache未允许目录规则,或者服务器配置覆盖了.htaccess。应确认实际Web服务器类型。

