find发送邮件的PHP脚本

有没有办法find发送电子邮件PHP脚本。

我有一个“标准”安装apache + php(没有mod_suphp既没有suexec),我想找出女巫PHP脚本发送电子邮件,当我检查日志,我只是看到用户的UID发送电子邮件(在我的情况下apache),但我想找出发起电子邮件的脚本。

是否有可能或者我必须安装suexec或mod_suphp来保持trac的?

请帮忙。

PHP 5.3被开槽,以获得更好的邮件追踪,但我不知道是否发生。 (编辑:是的PHP 5.3现在有内置的日志logging – php.ini有configurationvariablesmail.log将logging使用从PHP代码的邮件)。

我们通过使sendmail成为一个包装shell脚本来解决这个问题。

在php.ini中设置一个新的邮件。 例如:

sendmail_path = /usr/local/bin/sendmail-php -t -i 

sendmail-php脚本简单地使用logging器获取信息,然后调用系统的sendmail:

 #!/bin/bash logger -p mail.info -t sendmail-php "site=${HTTP_HOST}, client=${REMOTE_ADDR}, script=${SCRIPT_NAME}, filename=${SCRIPT_FILENAME}, docroot=${DOCUMENT_ROOT}, pwd=${PWD}, uid=${UID}, user=$(whoami)" /usr/sbin/sendmail -t -i $* 

这将logging到您的mail.info设置在syslog.conf文件中。

另一个build议是安装suhosin php扩展来收紧PHP中的漏洞,除非你正在运行Debian或Ubuntu,这已经是默认了。

对此的解决scheme实际上需要几个步骤。 上面的labradort的解决scheme实际上并没有工作,因为logging脚本是一个bash脚本,而不是php,而bash脚本没有访问php的variables,所以日志空白。 基本上你想logging的东西需要在发送邮件之前保存到php的环境variables中,这样logging器才能访问数据。 由于您正在尝试检测其他用户的脚本(不一定是您自己的脚本),因此您无法控制php代码,因此您需要使用PHP的auto_prepend_filefunction来确保所有已执行的php在其他所有代码之前运行您的初始化代码。 我通过php.ini预先确定了以下代码,以确保我在logging器中具有所需的数据:

 <?php /** * This passes all SERVER variables to environment variables, * so they can be used by called bash scripts later */ foreach ( $_SERVER as $k=>$v ) putenv("$k=$v"); ?> 

我整理了一个关于如何在这里工作的完整教程: http : //mcquarrie.com.au/wordpress/2012/10/tracking-down-malicious-php-spam-scripts/

有一个 PHP 的补丁 ,将显示哪个脚本正在生成的电子邮件通过添加一个标头的电子邮件发送。 我没有testing过,因为我不喜欢修补核心PHP,但是我听到了很好的东西。

你将不得不grep的访问日志,以适应消息被添加到假脱机的时间框架。

可能只是通过源文件search“邮件(”子string?

只需在您的php.ini中启用这些

 mail.add_x_header = On mail.log = /var/log/phpmail.log 

然后创build该文件并给予写入权限。 那之后请注意。