文件上传漏洞原理,CMS站点防护方法

很多站长在访问某些链接时会遇到 404 页面,但你可能不知道,404 页面本身也可能成为文件上传漏洞的入口。
文件上传漏洞是指攻击者利用网站上传功能,把恶意脚本传到服务器并执行,从而控制站点。
CMS 站点因为功能开放、目录结构固定,一旦上传点过滤不严,很容易被利用。
下面从原理到防护,一步步讲清楚怎么排查和加固。

先理解漏洞是怎么发生的

文件上传功能本意是让用户传图片、文档,但服务端如果没有严格校验文件类型和内容,攻击者就能上传 .php.jsp 等可执行文件。
常见触发点包括:头像上传、附件上传、编辑器上传,以及某些 CMS 自带的 404 页面自定义功能。

关键判断:只要上传后的文件能被 Web 服务器当作脚本执行,就存在漏洞。

以 PHP 站点为例,如果上传目录允许执行 PHP,攻击者上传 shell.php 后访问对应 URL,就能执行任意命令。
部分 CMS 会把 404 页面做成可上传模板或图片,若路径可控且未限制扩展名,同样会被利用。

加固前先确认这几件事

动手改配置前,先备份网站文件和数据库,并确认你拥有服务器 SSH 或宝塔面板权限。

  • 确认 Web 服务器类型:Nginx、Apache 还是 IIS。
  • 找到 CMS 的上传目录,常见路径如 /uploads//data/attachment//public/uploads/
  • 确认 PHP 运行用户,一般是 wwwnginx
  • 记录当前 Nginx 或 Apache 配置文件位置,例如 /etc/nginx/conf.d/ 或宝塔面板的“网站-设置-配置文件”。

服务器层防护:让上传目录无法执行脚本

这是最有效的一步。
以 Nginx 为例,在站点配置文件的 server {} 块中加入以下内容,禁止上传目录执行 PHP:

location ~* ^/(uploads|data/attachment|public/uploads)/.*\.(php|php5|phtml|jsp|asp|aspx)$ {
    deny all;
}

如果使用宝塔面板,操作路径是:网站 → 设置 → 配置文件,把上面代码粘贴到 server {} 内,保存后重载 Nginx。

Apache 站点可以在上传目录放一个 .htaccess 文件,内容如下:


    Require all denied

验证方式:上传一个测试用的 .php 文件到上传目录,然后浏览器访问该文件,如果返回 403 或 404,说明配置生效。

CMS 后台与代码层配合

服务器配置是兜底,CMS 自身也要收紧上传规则。

  • 进入 CMS 后台,找到上传设置,限制允许的扩展名为 jpg,jpeg,png,gif,pdf,docx 等必要类型,不要勾选 php、html、js
  • 如果 CMS 支持,开启图片二次渲染或文件内容检测,避免伪造图片头部的恶意脚本。
  • 检查 404 页面设置,如果允许自定义模板或上传文件,关闭上传功能或限制为仅图片。
  • 修改上传目录权限,Linux 下建议设为 755,文件属主为 Web 运行用户,避免其他用户写入。
chmod -R 755 /www/wwwroot/你的站点/uploads
chown -R www:www /www/wwwroot/你的站点/uploads

容易踩坑的地方

只改 CMS 不配服务器,攻击者可能绕过 CMS 直接访问上传目录;
只配服务器不改 CMS,正常上传功能可能受影响。

  • 不要只靠前端 JavaScript 校验,攻击者可以抓包绕过。
  • 不要使用黑名单只禁 phpphtmlphp5PHP 大小写变体都可能绕过。
  • 上传目录不要给执行权限,也不要放在网站根目录下可被直接解析的位置。
  • 定期更新 CMS 和插件,很多漏洞来自旧版本组件。

怎么确认防护已经生效

完成配置后,按下面顺序检查:

  1. 访问一个正常图片,确认能打开。
  2. 尝试上传 .php 文件,应被 CMS 拒绝或上传后无法访问。
  3. 直接访问上传目录下的 .php 文件,应返回 403 或 404。
  4. 查看 Nginx 错误日志,确认没有异常执行记录。

如果以上都通过,文件上传漏洞的风险会明显降低。安全加固不是一次性的,建议每季度复查一次上传目录和 CMS 版本。

常见疑问

问:404 页面和文件上传漏洞有什么关系?
答:部分 CMS 允许自定义 404 页面并上传模板文件,如果该功能未限制文件类型,攻击者可能上传脚本并通过 404 路由访问执行。

问:已经按教程配置了,还需要装安全插件吗?
答:可以装,但插件不能替代服务器配置。建议以服务器层禁止执行为主,插件作为辅助检测。

问:虚拟主机没有 Nginx 配置权限怎么办?
答:联系主机商确认是否支持 .htaccess,或请对方协助在上传目录禁用脚本执行。

问:上传目录权限设成 755 还是 644?
答:目录用 755,文件用 644,确保 Web 用户能读但不可执行脚本。

如果你正在处理 404 文件上传漏洞和 CMS 站点防护,建议先按本文步骤完整执行,再根据自己的环境微调;
遇到异常时优先回看避坑部分。

分享到:
上一篇
PHP禁用危险函数,提升CMS站点安全性
下一篇
SQL注入漏洞自查,CMS网站防注入配置
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意