MacCMS 安全加固
把 MacCMS 放到公网上,就等于把一个老框架的站点暴露给全世界。MacCMS V10 基于 ThinkPHP5,而 ThinkPHP5 历史上出过影响很大的漏洞,默认配置又比较宽松。自建站必须加固,否则很容易被扫描器挂马、植入广告、甚至拿到服务器权限。下面几件事装完就该做。
防住 ThinkPHP5 远程命令执行(RCE)
风险:ThinkPHP5 曾被爆出远程命令执行漏洞,攻击者构造一条特殊的 URL,就能让服务器执行任意命令。典型的攻击 payload 形如:
?s=/index/\think\app/invokefunction&function=call_user_func_array...这类请求如果打中没打补丁的站点,后果非常严重(相当于把服务器交出去)。
本仓库已自带补丁
我们对本仓库源码做过只读安全审计:当前框架是 ThinkPHP 5.0.24,think\App::module() 已用正则白名单拦截 \think\app 这类命名空间注入,经典 RCE payload 会直接命中 404。也就是说框架层已打上补丁,下面的加固更多是纵深防御,不是补丁本身缺失。
防护:
- 升级到打了补丁的版本:关注 magicblack/maccms10(备用 maccmsapp/maccms10)的发布,第一时间更新。这是最根本的办法。
- 加 WAF / 拦截规则:在 Nginx 或云防火墙里拦掉带
invokefunction、call_user_func_array、\think\这类特征的请求,拦掉 ThinkPHP5 其它历史 CVE(如 SQL 注入系列)的变体。 - 别在生产开调试:调试模式会把报错细节暴露给攻击者,等于帮他们探路(见下文)。
后台入口改名
风险:默认后台是 admin.php,谁都知道,等于把家门口挂了块牌子。
防护:进网站根目录,把 admin.php 改成别人猜不到的名字,比如 admin7854.php,之后用新地址进后台。改完记得同步改伪静态规则里 admin.php 那一行,否则后台会 404。
关闭调试模式
风险:开着调试(app_debug / app_trace)时,一旦报错就把文件路径、SQL、框架版本等细节直接显示出来,这些都是攻击者想要的信息。
防护:生产环境把调试和 Trace 关掉。配置在 application/config.php:
return [
'app_debug' => false,
'app_trace' => false,
// ...
];收紧目录与文件权限
风险:权限给太宽(比如全目录 777),一旦有文件被上传或篡改,影响范围会扩大。
防护:按最小权限来——
- 只有需要写入的目录可写:
runtime(缓存)、upload(附件)。 - 其余目录和文件给只读 / 最小权限,别一股脑 777。
- 安装完成后,锁住或删掉安装相关目录,避免被人触发重装(配合删
install.lock)。
及时升级打补丁
安全不是一次性的事。框架和 CMS 都会陆续修漏洞,装完就不管,迟早被老漏洞打中。
- 关注 magicblack/maccms10 的更新与安全公告。
- 升级前先备份数据库和配置文件。
- 升级后回归测试一遍前台、后台、采集和 API 接口。
想知道源码里有没有后门?
我们对本仓库源码做过一次只读的后门排查:按危险函数(eval / assert / system / base64_decode 等)和 webshell 特征全仓扫描,逐条看上下文判定。范围内未发现后门或 webshell——命中的点都是框架 / 业务的正常用法(比如模板引擎、后台取 CPU 占用、采集参数解码)。完整的扫描范围、命中点和判定理由见源码安全审计报告。
结论对应特定版本
本次审计于 2026-10-12 完成,对应源码版本号 2026.1000.4056(application/extra/version.php),上游仓库 github.com/magicblack/maccms10。审计结论只对该版本成立——官方发布节奏较快,你手上的源码若版本号不同,请以审计报告里的方法自行重新复核,别直接套用「无后门」结论。