Encontre o script php que está enviando e-mails

9

Existe alguma maneira de eu encontrar o script php que está enviando e-mails.

Eu tenho apache + php (não mod_suphp nem suexec) em uma instalação "padrão", e eu quero descobrir que script php de bruxa está enviando e-mails, quando eu verifico os logs eu só vejo o uid do usuário que está enviando o e-mails (no meu caso, apache), mas eu quero descobrir o script que originou o e-mail.

É possível ou devo instalar o suexec ou o mod_suphp para manter o trac disso?

Thks pela ajuda.

    
por adam 07.04.2010 / 13:52

6 respostas

9

php 5.3 foi encaixado para obter um melhor rastreamento de e-mail, mas não tenho certeza se isso aconteceu. (editar: sim, o php 5.3 possui logging embutido agora - o php.ini tem a variável de configuração mail.log, que registra o uso do correio a partir do código php.)

Nós resolvemos o problema fazendo do sendmail um script de shell wrapper.

No php.ini, configure um novo mailer. Por exemplo:

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

O script sendmail-php simplesmente usa o registrador para obter informações e, em seguida, chama o sendmail do sistema:

#!/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 $*

Isto irá logar em qualquer que seja o seu mail.info está definido no arquivo syslog.conf.

Outra sugestão é instalar a extensão suhosin php para apertar as brechas no PHP, a menos que você esteja rodando Debian ou Ubuntu onde este já é o padrão.

    
por 07.04.2010 / 15:27
4

A solução para isso realmente requer alguns passos. A solução de labradort acima não funciona realmente, já que o script logger é um script bash, não php, e o script bash não tem acesso às variáveis do php, então os logs ficam em branco. Basicamente o que você deseja registrar precisa ser salvo em variáveis de ambiente no php antes de enviar o e-mail para que o logger tenha acesso aos dados. Como você está tentando detectar scripts de outros usuários, não necessariamente seus, você não tem controle sobre o código php, então você precisa usar o recurso auto_prepend_file do PHP para garantir que todo php executado execute seu código de inicialização antes de todo o resto. Eu preenchei o seguinte código via php.ini para garantir que eu tenho os dados que eu preciso no logger:

<?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");
?>

Eu montei um tutorial completo sobre como fazer isso funcionar aqui: link

    
por 26.07.2013 / 01:53
2

Existe um patch para PHP que mostrará qual script está gerando os e-mails adicionando um cabeçalho ao e-mail enviado. Eu não testei desde que eu não estou interessado em remendar o PHP principal, mas eu ouvi coisas boas.

    
por 07.04.2010 / 14:00
0

Você precisará ter o grep nos logs de acesso para algo que se ajusta ao prazo de quando as mensagens foram adicionadas ao spool.

    
por 07.04.2010 / 13:58
0

Pode ser apenas pesquisar nos arquivos de origem por "mail (" substring?

    
por 07.04.2010 / 14:45
0

Basta ativá-los no seu php.ini

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

crie o arquivo e dê a permissão de gravação. Fique de olho depois disso.

    
por 30.08.2017 / 22:45