说起来我也是踩过坑的过来人,前两年帮一个开机械厂的老板维护企业站,人家图便宜早年用phpcms搭的站,好几年没动过,老板说反正就是个展示站,能打开就行,干嘛瞎折腾,结果呢?半个月后找到我,哭丧着脸说网站百度搜出来全是博彩广告,百度已经标记危险网站了,谈好的几十万订单客户点进来一看直接跑了,你说冤不冤?
说白了,phpcms文件上传漏洞就是你开了个小店,出门不锁门,还把柜台钥匙插在锁孔上,黑客就像扫街的小偷,批量扫全网看到没锁门的就进,不管你店大店小,挂个广告、偷个数据,对人家来说就是顺手的事,你嫌phpcms文件上传漏洞修复麻烦,等到出事了再修,那已经晚了,百度K你一顿,你再恢复排名得好几个月,得不偿失。
我把话放这,不管你对自己技术多自信,改源码之前一定要给整站打包备份,数据库也要导出来存好,这是我踩过无数坑总结出来的血的教训,就像你修门之前先把家里贵重东西收拾好,拆错了还能原样装回去,不备份改崩了,神仙也救不了你。
备份完了咱们找漏洞点,phpcms常见的上传漏洞大多出在两个文件,分别是 /phpcms/modules/member/attachments.php 和 /phpcms/modules/poster/poster.php,这两个就是小偷最爱钻的墙缝,咱们就从这俩地方下手。
核心思路很简单,就是只允许上传常用的图片文件,禁止上传php这类可执行脚本,说白了就是不让小偷把刀带进来,我给你放核心修改代码,直接照着加就行:
``` // 在获取文件后缀的代码后面增加白名单校验,只允许图片上传 $allow_ext = array('jpg','jpeg','png','gif','webp'); if(!in_array(strtolower($ext), $allow_ext)){ exit('错误:不允许上传该类型文件'); } ```
两个漏洞文件都要加上这段校验,改完之后别忘还有一步:给你的上传目录设置不可执行脚本的权限,一般上传目录是/uploadfile/,在服务器后台把这个目录的php执行权限关掉就可以,就算真的有漏网之鱼,上传了脚本也跑不起来,等于把小偷的刀给没收了,干不了坏事。
哦对了,要是你用的是比较老的v9版本,还要检查下编辑器的上传入口,那里也可能有漏洞,一样加白名单校验就行,核心逻辑都是一样的,phpcms文件上传漏洞修复本质就是把不该让传的都拦住,不复杂。
你改完代码,别直接就不管了,自己动手测试一下,找个php文件改个后缀试试能不能上传,能上传就是哪里改错了,重新调,传不上去就是对的,传上去之后你再访问一下这个文件,要是显示403或者错误,那就没问题了,这不就是你修完门自己拉两下门把手试试,锁死了才叫修好了对吧?
我做phpcms相关的维护五六年了,前前后后处理过不下一百个phpcms文件上传漏洞,见过太多中小站长,本来做站就不容易,赚点钱全投进去了,就是嫌phpcms文件上传漏洞修复麻烦,觉得我这么小的站没人看得上,结果出事了直接站没了,真的太可惜了。
现在黑客都是批量扫漏洞,就像小偷扫街,看见没锁的门就进,不管你店里有没有钱,挂个广告就赚,phpcms因为开源,用的人多,漏洞早就被扒得明明白白,你不主动修,就等于等着你被偷。
其实整个phpcms文件上传漏洞修复下来,撑死了也就十分钟,就是改两行代码,设个权限,花不了你多少时间,但是能帮你省后面不知道多少麻烦,土话讲得好:“天天锁好门,半夜不怕鬼敲门”,我帮你踩过坑了,这个方法亲测好用,你照着做就行了,把漏洞堵死,安安心心做你的站,不比啥都强?












易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图