0

我不确定这是否与 PHP 代码/Joomla 插件/组件或服务器问题有关,因此请在 serverfault 上发布我的问题。

我有一个运行 CentOS 版本 6.4 (Final) 和 CPanel 11.38.1 (build 15) 和 [Apache/2.2.24 (Unix) PHP/5.2.17] 的专用服务器,最近我们遇到了暴力攻击,导致系统挂起诸如“挂起:服务器上的 chkservd”之类的消息。在设置 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-Error:应用程序实例化错误”而崩溃,有时会因错误而崩溃:

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

这是由于当 Joomla 尝试从数据库加载参数并且失败时数据库问题。

我已经在安装了 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 站点。

此外,我们使用在线站点扫描仪扫描了该站点,并使用防病毒工具进行了普通文件搜索以进行机器人注入,但没有得到肯定的结果。

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

4

1 回答 1

1

最后我发现是什么导致了这些零错误。

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

为了清楚起见,这些错误与服务器崩溃/挂起完全无关,也不负责。我通过创建新数据库并恢复备份文件来修复崩溃,因此旧数据库已损坏。

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

编辑:

经过进一步调查,我意识到这error_log(0)不是我添加的,当我安装插件时它已经存在了!插件/组件是Joooid ,它是 Joomla ( http://www.joooid.com )的 Android 客户端。代码位于 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();

}
...

即使是现在它也有最新版本。我将向他们发送此问题的链接,以便通知他们。

于 2013-07-25T22:05:41.393 回答