답변:
PHP 5.3은 더 나은 메일 추적을 위해 슬롯되었지만, 그 일이 발생했는지 확실하지 않습니다. (편집 : 예 php 5.3에는 로깅 기능이 내장되어 있습니다-php.ini에는 php 코드의 메일 사용을 기록하는 구성 변수 mail.log가 있습니다.)
sendmail을 래퍼 쉘 스크립트로 만들어 문제를 해결했습니다.
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 $*
이것은 mail.info가 syslog.conf 파일에 설정된 모든 것에 기록합니다.
또 다른 제안은 이미 기본 설정 인 데비안 또는 우분투를 실행하지 않는 한 suhosin php extension을 설치하여 PHP의 허점을 강화하는 것입니다.
이에 대한 해결책은 실제로 몇 단계가 필요합니다. 로거 스크립트는 PHP가 아닌 bash 스크립트이고 bash 스크립트는 PHP 변수에 액세스 할 수 없으므로 로그가 공백으로 표시되므로 위의 labradort 솔루션은 실제로 작동하지 않습니다. 기본적으로 로거가 데이터에 액세스 할 수 있도록 이메일을 보내기 전에 로그하려는 모든 것을 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/
전송되는 이메일에 헤더를 추가하여 이메일을 생성하는 스크립트를 보여주는 PHP 용 패치 가 있습니다 . 핵심 PHP 패치에 관심이 없기 때문에 테스트하지는 않았지만 좋은 소식을 들었습니다.
메시지가 스풀에 추가 된 시간에 맞는 액세스 로그를 가져와야합니다.
"mail ("하위 문자열에 대한 소스 파일을 검색 할 수 있습니까?