Newsgroup: it.comp.os.linux.sys
Titolo: Sapere che pagina php genera una mail

Il solito server con ennemila domini in hosting..
Capita spesso chequalche pisquano carichi una form-mail fatto con il 
culo che dopo 10 minuti viene abusata dallo spammer di turno.
A quel punto il supporto del datacenter sperimenta sul mio ano nuove e 
curiose forme di tortura e io devo mettere sotto sopra il server per 
capira dove sta la form incriminata.
Premesso che tutte le mail passano per l'MTA locale che pu� connettersi 
SOLO con il mail relay del datacenter.
Premesso che tutte le email, essendo generate da Apache, hanno come 
mittente "nobody".
Esiste un modo per aggiungere un header alle mail in uscita con la 
pagina php che ha generato l'invio?
Idee e alternative sono ben accette.
P.S. Dare fuoco al server e/o agli utenti non � un'alternativa.

 pagina php che ha generato l'invio?
Ho cercato anche io una cosa del genere ma non ho trovato niente.
C'e' una feature request aperta dal 2003... :(
http://bugs.php.net/bug.php?id=23082&edit=1
Credo che l'unica cosa sia far girare ogni sito con un utente diverso 
tramite apache-ipk (ed e` il motivo principale per cui ho iniziato a 
guardarmelo)
Se trovi qualcosa postalo qui che sono molto interessato, grazie.
Bye.

 
La mia soluzione temporanea è molto rudimentale:
mv /usr/sbin/sendmail /usr/sbin/sendmail.orig
e sendmail diventa un wrapper che stampa su un file di log:
pwd
env
Almeno capisco da che directory è partita la mail.

 P.S. Dare fuoco al server e/o agli utenti non è un'alternativa.
1) FastCGI + Suexec per far girare ogni sito col suo utente che è cosa buona 
e giusta
2) per ogni sito, configuri il parametro di PHP inerente il wrapper di invio 
(default `sendmail -t`) con un parametro che forza l'envelope sender.
3) bloccando il relay sulla porta 25 da tutte le connessioni localhost, a 
meno che non siano autenticate.
Max

 guardarmelo)
ITK
Max

 Bye.
http://choon.net/php-mail-header.php


wrote:

Il seguente script lo ho trovato girando su internet , e lo ho
riadattato secondo le mie esigenze .
1) installiamo ,se necesatio php-cli
2) crea il file sendmail.php ( il lo metterei un /usr/bin/ )
------------------ sendmail.php ------------------
#!/usr/bin/php
<?php
/* genera msg ID */
$messageid = $_ENV["HOSTNAME"]."_".date('Ymd').date('His').uniqid
(".");
/* Sezione logfiles */
$logfile = "/var/log/phpmail/".$messageid; // creerà un file per
email , con nome il message ID
$rootlogfile = "/var/log/phpmail/mail"; // creerà un singolo file dove
buttare conseguentemente i dati delle emails generate
/* il comando sendmail da eseguire */
$sendmail = "/usr/sbin/sendmail -t -i";
/* questo per capire quale dominio ha inviato la mail , io uso mettere
i domini in /home/ , nella directory con il nome a dominio : /home/
dominio.com
 */
if (preg_match("|/home/([a-zA-Z0-9\._-]*)(/.*)?|", $_ENV["PWD"],
$matches)) {
        $match_domain = $matches[1];
        $add_headers["X-Generating-Domain"] = $match_domain;
        // lascio un file di log anche nella home dell'utonto , non si
sa mai che sia interessato alle sue castronerie
        $logfile = "/home/".$match_domain."/logs/phpmail";
    }
/* Aggiungo degli headers simpatici , così il destinatario che abbia
voglia di leggeerli sa a chi rivolgersi per il cazziatone :) */
 $add_headers["X-MsgID-sender"] = $messageid;
 $add_headers["X-Generating-Path"] = $_ENV["PWD"];
 $add_headers["X-Abuse"] = "If this email is abuse, forward it as
attachmento to 
sup...@sitonerd.com
"; // ci butto un po di spam :P
/* qui inizio a gestire lo stream della mail */
while (!feof(STDIN)) {
        $data .= fread(STDIN, 1024);
    }
/* leggo gli headers semplicmente splittando */
list ($headers, $message) = explode("\n\n", $data, 2);
/* qui aggiungo allo stream , gli headers impostati prima */
if ($add_headers) {
        foreach ($add_headers as $field=>$contents) {
            $headers .= "\n".$field.": ".$contents;
        }
    }
/* si riassembla il messaggio */
$data = $headers."\n\n".$message;
/* qui si crea il futuro contenuto del file di log */
$log_msg = null;
$log_msg .= date("r");
$log_msg         .= " PWD: ".$_ENV['PWD'];
$log_msg         .= " ID: ".$messageid;
$log_msg        .=" HEAD: ".$$headers."\n";
/* qui si scrive nel file di log */
file_put_contents($logfile, $log_msg, FILE_APPEND | LOCK_EX);
file_put_contents($rootlogfile, $log_msg, FILE_APPEND | LOCK_EX);
/* ed alla fine si passa lo strema elaborato a sendmail */
$h = popen($sendmail, "w");
fwrite($h, $data);
pclose($h);
?>
3) si cambia il php.ini il percorso di sendmail :
sendmail_path = "/usr/bin/sendmail.php"
That's all .

 ITK
Hai ragione, scusate. :)
Mi sono sconfuso coi pacchetti per openembedded/angstrom :/
Bye.

 
si ma cosï¿œ allora anche la soluzione del mv e del wrapper va bene, ma 
una cosa ï¿œ una soluzione "accroccata" dal sistemista, un'altra ï¿œ se 
c'era un metodo fatto apposta.

 c'era un metodo fatto apposta.
In caso fosse sfuggito riposto:
http://choon.net/php-mail-header.php
Aggiunge un header alla mail (X-php-script mi pare) con il path e il 
file php che ha generato la mail.
Meglio di cosï¿œ :)