最近维护一个旧系统,需要更新Joomla! CMS 系统。我遇到了很多的问题,系统安全的、编程语言的等等,记录一下。
PHP安全问题突出,基于PHP的Web系统漏洞多,被攻击入侵的几率高。我要维护更新的这台主机,就发现了被入侵的痕迹,在插件目录、文件上传目录有痕迹。主要手段是脚本伪装成图片。只好费神做了仔细的检查和清理。
针对安全风险,应对措施很多,在PHP配置层面,限制其目录访问范围,不允许访问Web之外的路径。合理设置目录和文件权限。文件上传目录,严格禁止脚本执行,这个可以在Web服务器配置中处理解决。
总之,如果在有其它更理想建站系统的情况下,不建议大家再用PHP。安全隐患很多,特别是老的系统。通过科技新闻报道也能知道,PHP的使用断崖式下跌。如果没有WordPress硬撑着,估计后面都没多少人用了。
尽量使用高版本的PHP,改进还是很多的。 PHP V8性能提升突出,因为有jit支持,这个要自己打开。不过,PHP7和PHP8的兼容性问题很大,大量的脚本根本无法运行。不光如此,PHP 8不同版本的兼容性问题也不少。比如能使用8.2版本的脚本,使用8.4版本运行就有问题。
对于Linux服务器,建议安装fail2ban,不然每天面对的无脑扫描、登录请求太多了,终归是隐患。
我需要更新的这套系统,版本是3,现在最新的版本是6,差了太多。更重要的是,它们对PHP的要求不一样,逐次提升。还有,各种插件、主题,都有兼容性要求。目前使用的主题,只支持PHP7,如果更新到PHP8,直接崩溃,无法使用。
对于这类老系统,只能做好一个计划,先做什么,后更新什么,逐次进行。更重要的是:做好备份。我提前使用git管理了整套文件,用mysqldump做了数据库备份。但凡更新失败,直接一键还原,重新来过。如果有更新成功,则重新备份,防范下一步的失败。用这样步步为营的手段,一直刷新到了最后。
要提前禁止甚至删除掉所有预告有兼容性问题的插件、主题。中间有一个地方,卡了很久。joomla! 的在线更新,需要从官网下载文件,然而因为网络原因,99%的情况下都会以失败告终。我随即选择了先下载安装包,再做文件上传,进行更新。
可是,无论我如何操作,更新都会卡在92.5%这个地方,弹出错误:
ERROR:
AJAX loading Error: error
翻遍互联网,也没找到一击必中,能解决问题的准确答案。直到最后,我才发现问题根源。
Joomla!更新升级系统,不能使用官网原版安装文件,必须使用更新包文件。
When upgrading the Joomla! CMS system, you cannot use the original full installation files from the official website. You must use the update package file.
这才是真正的原因。比如,不能直接上传使用 Joomla_4.4.14-Stable-Full_Package.zip,必须使用 Joomla_4.4.14-Stable-Update_Package.zip 。
这个更新包哪里下载?在线升级页面里面有:
You can also download the update package to your computer and then use the fields below to upload and install it.
使用这个更新升级包,就不会报错了。