在public_html目录中的Joomla站点上,用零填充的巨大错误日志导致服务器挂起



我不确定这是否与PHP代码/Joomla插件/组件或服务器问题有关,所以去serverfault发布我的问题。

我有一台专用服务器,运行的是带有[Apache/2.2.24(Unix)PHP/5.217]的CentOS 6.4版(Final)和CPanel 11.38.1版(build 15),最近我们遇到了暴力攻击,导致系统挂起,消息为"HANG:cchkservd on server"。在设置DenyHosts并更改ssh默认端口后,服务器稳定了几天,直到它开始突然挂起,日志中没有特定错误,也没有任何电子邮件通知。

该服务器只运行一个网站,但有一些流量(每天约2000名访问者)和一个大型Joomla数据库。该网站自2013年3月以来一直运行良好,直到两周前。

经过调查,我注意到public_html(默认Joomla站点目录)下的error_log大小超过200MB,但没有特定的错误消息,只有日期/时间和零"0"的行!

[24-Jul-2013 12:09:18] 0
[24-Jul-2013 12:09:18] 0
[24-Jul-2013 12:09:18] 0
[24-Jul-2013 12:09:19] 0
[24-Jul-2013 12:09:19] 0
[24-Jul-2013 12:09:19] 0
[24-Jul-2013 12:09:19] 0
[24-Jul-2013 12:09:20] 0
[24-Jul-2013 12:09:26] 0
[24-Jul-2013 12:09:26] 0
[24-Jul-2013 12:09:30] 0

几乎每秒钟都有成千上万条像上面这样的线!有时网站崩溃时会出现"jos错误:应用程序实例化错误",有时还会出现错误:

PHP致命错误:对中的非对象调用成员函数get()。。。

这是由于Joomla试图从数据库加载params时出现数据库问题,但失败了。

我已经在安装了apache和php的本地windows服务器机器上设置了该站点的备份[apache/2.2.19(Win32)php/5.3.6],这些零"0"错误也会在每次站点调用中产生,在\Apache2\logs\error.log中有更多详细信息,如:

[Wed Jul 24 14:42:32 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/
[Wed Jul 24 14:42:32 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/
[Wed Jul 24 14:42:32 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/
[Wed Jul 24 14:42:33 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/
[Wed Jul 24 14:42:33 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/
[Wed Jul 24 14:42:33 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/
[Wed Jul 24 14:42:56 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/mousiki
[Wed Jul 24 14:42:56 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/mousiki
[Wed Jul 24 14:42:56 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/mousiki
[Wed Jul 24 14:42:57 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/mousiki
[Wed Jul 24 14:42:57 2013] [error] [client 192.168.1.66] 0, referer: http://virtdev.ose.domain.com/mousiki

因此,我认为它与服务器无关,而是与Joomla站点相关的插件/组件。

此外,我们已经使用在线网站扫描仪扫描了网站,并使用防病毒工具进行了纯文件搜索,以进行机器人程序注入,但没有积极的结果。

我们如何找到导致这些零错误的原因?

最后我找到了导致这些零错误的原因。

首先,为了定位产生这些错误的原因,我对php函数error_log()的所有站点php文件进行了grep(http://php.net/manual/en/function.error-log.php),它直接写入字符串参数消息,而没有任何其他信息,如文件名、行号等。结果我看到Joomla插件中有一个error_log(0);,它已经启用。打开插件php文件后,我发现这是我为了调试一些东西而添加的,我已经完全忘记了。因此,删除该行后,不再出现零字符错误。我甚至不记得我想通过那个电话实现什么,这根本没有任何意义。也许我想使用error_reporting(0)来禁用所有错误和打字错误。

要明确的是,这些错误与服务器崩溃/挂起无关,也不应对此负责。我通过创建一个新数据库并恢复备份文件修复了崩溃,所以,旧数据库被损坏了。

现在,24小时后,没有崩溃/挂起,一切都恢复了完美。

编辑:

经过进一步的调查,我意识到这个error_log(0)不是我添加的,当我安装插件时它已经在那里了!插件/组件是Joooid,Joomla的Android客户端(http://www.joooid.com)。代码位于joooidcontent.php中的plg_joooidcontent中:

...
/**
 * @since   1.6
 */
public function onContentPrepare($context, &$row, &$params, $page=0)
{
    error_log(0);
    //echo "<pre>"; 
    $row ->text = $this->executeTokens($row->text);
    //print_r($row);
    //die();
}
...

即使是现在,它也有最新版本。我会给他们发一个这个问题的链接,以便通知他们。

最新更新