Answers:
php 5.3已插入以获得更好的邮件跟踪,但是我不确定是否发生了这种情况。(编辑:是的,现在已内置php 5.3-php.ini具有配置变量mail.log,它将记录来自php代码的邮件使用。)
我们通过使sendmail成为包装Shell脚本解决了该问题。
在php.ini中设置一个新的邮件程序。例如:
sendmail_path = /usr/local/bin/sendmail-php -t -i
sendmail-php脚本仅使用记录器获取信息,然后调用系统的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 $*
这将记录到syslog.conf文件中将mail.info设置为的内容。
另一个建议是安装suhosin php扩展名,以加强PHP中的漏洞,除非您正在运行Debian或Ubuntu,而这已是默认设置。
解决方案实际上需要几个步骤。上面的labradort的解决方案实际上不起作用,因为记录器脚本是bash脚本,而不是php,并且bash脚本无法访问php的变量,因此日志空白。基本上,您要记录的任何内容都需要在发送电子邮件之前保存到php中的环境变量中,以便记录器可以访问数据。由于您试图检测其他用户的脚本(不一定是您自己的脚本),因此无法控制php代码,因此您需要使用PHP的auto_prepend_file功能来确保所有执行的php在执行所有其他操作之前都运行您的初始化代码。我通过php.ini预先添加了以下代码,以确保在记录器中拥有所需的数据:
<?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/
可能只是在源文件中搜索“ mail(”子字符串?