Banner Shishii
Pagina aggiornata il:  13/01/2005 06:33

Pagina Stampabile     Pagina Stampabile

Istallare FormMail 1.92


Sommario

Uno dei primi script che si vuole istallare sul proprio server per dare interattività al proprio sito è quello destinato a gestire l'invio al WebMaster di mail tramite compilazione di form.

In questo campo lo script perl più diffuso ed usato è il celeberrimo FormMail 1.92 di Matthew M. Wright. In effetti la sua fama è veramente ben meritata. A mio parere si tratta di un buon script.

Le sue caratteristiche più importanti sono:

Forse uno dei pochi difetti è che la versione principale gira solo con server LINUX e non con server WindowsNT. Esiste però una versione specifica per quest'ultimo. L' incompatibilità non è dovuta allo script PERL in se stesso, ma al problema del programma di posta necessario per inviare l'email. Infatti per LINUX si usa sendmail, per WindowsNT il protocollo SMTP. Per cui prima cercherò di spiegare la procedura di istallazione in ambiente LINUX e poi vedremo le differenze con quella in ambiente WinNT.

FormMail in server Linux

Per prima cosa bisogna scaricare la versione giusta di FormMail 1.92, cliccando questo link si sarà inviati ad un form in cui bisognerà solo riempire i campi in cui si deve indicare il nome e l'email, mentre gli altri saranno già quelli esatti.

Aprendo una parentesi non necessaria, vorrei dire che siccome Matt ci regala parte del suo eccellente lavoro il minimo che si può fare è inserire dati veritieri e rispettare i termini della licenza. Gli unici vincoli sono di lasciare intatte le intestazioni e i links, di chiedergli il permesso per redistribuirlo e di pagarlo se lo si vuole vendere. Mi sembra veramente il minimo !!!

Comunque, anche allo scopo di sostenere la massima diffusione di questo bello script ho preparato una versione di FormMail 1.92 nella quale le pagine generate dallo script e le email inviate sono in Italiano. Ovviamente ho avvisato Matt e ho lasciato intatti header e links al suo sito.

Leggere i files

Scaricato il file zip si procederà a decomprimerlo. La prima cosa da fare sarà poi aprire il file Readme, e qui cominciano i guai. Infatti benchè sia un file di testo (tanto che lo si può rinominare Readme.txt) è praticamente illegibile, se aperto con un editor semplice come "blocco note di windows".

Ciò è dovuto al fatto che FormMail.pl e il Readme sono stati scritti su un computer con S.O. Linux e alla differenza che c'è tra i sistemi UNIX + derivati e Windows nel trattare la fine riga di un testo. I primi usano il "linefeed" i secondi il "linefeed + carriage return". Per cui al S.O. Windows (quello del vostro PC) che legge manca il carriage return e vi fa vedere un testo zeppo di rettangolini neri tra le parole.

Ci sono molti sistemi per superare questo ostacolo, quelli che ho sperimentato io in ordine decrescente di semplicità ed efficacia sono i seguenti:

Reso leggibile e letto tutto possiamo cominciare il lavoro di configurazione.

Configurare lo script FormMail.pl

La prima cosa da fare è prestare attenzione alla prima riga dello script, dove troverete l'indirizzo sul server dell'interprete di PERL:

#!/usr/bin/perl 

In genere è quello giusto, ma se non lo sapete con certezza e non sapete come fare a saperlo guardate alla pagina Path... di questo sito.

Il successivo settaggio da fare è l'indirizzo del programma "sendmail" di spedizione posta del server, nello script è settato a:

$mailprog = '/usr/lib/sendmail -t -i'; 

ma '/usr/lib/sendmail' in genere va bene per i vecchi server, sui nuovi in genere è '/usr/sbin/sendmail', comunque anche qui se non lo sapete con certezza e non sapete come fare a saperlo guardate alla pagina Path... di questo sito. I due flag "-t -i" sono delle opzioni passate al programma tramite standard input (STDIN), operazione abbastanza comune sui sistemi unix. Se lo script dovesse funzionare, cioè non segnalasse errori, ma le mail non arrivano, la prima cosa da provare è togliere questi flag, ottenendo

$mailprog = '/usr/sbin/sendmail'; 

Il successivo settaggio da fare nello script è quello relativo all'elenco dei siti autorizzati ad usare lo script. Infatti come detto sopra FormMail 1.92 può supportare più siti (si dice migliaia), basti dire che è lo script fornito da Tiscalinet agli sventurati che hanno la malsana idea di farsi il sito sui loro server. Gli indirizzi devono essere inseriti in un array che si presenta così:

@referers = ('worldwidemart.com','206.31.72.203'); 

come possiamo vedere l'elenco dei siti autorizzati può essere fatto sia tramite i domini che tramite gli IP. Attenzione però che questo secondo sistema funziona solo se l'IP è "proprietario". Per saperlo basta che apriamo il browser e lo digitiamo nella barra degli ndirizzi e diamo invio, se arriviamo direttamente nella home del sito l'IP è "proprietario", altrimenti vuol dire che è in "comproprietà".

In questa versione è obbligatorio inserire i domini senza www. Bisogna fare molta attenzione a non alterare la struttura sintattica dell'array, ogni elemento va inserito tra apici singoli e separati con una virgola senza altri spazi. Dopo l'ultimo elemento non va messa la virgola. Alla fine della riga deve rimanere il punto e virgola.

I due settaggi successivi sono comparsi dalla versione 1.9 (erano quindi assenti nella versione 1.6 prima distribuita). Sono entrambe dovuti a gravi problemi di sicurezza riscontrati. Il primo serve per impedire un uso abusivo da parte di spammers, il secondo serve ad impedire l'uso dello script per leggere le variabili d'ambiente del server da parte di non autorizzati. La lettura di queste variabili potrebbe essere prodromica ad un attacco cracker.

Procedendo, quindi, bisogna settare il seguente array:

@recipients = &fill_recipients(@referers); 

Come può notare chi ha già istallato la versione 1.9, in questa, 1.92, per settare l'array viene usata una struttura complessa, una subroutine (ovvero una funzione, per chi programma in C o PHP), che serve a depurare eventuali input spuri da alcuni caratteri pericolosi (%, <, >, ecc). Questo array serve a limitare gli indirizzi email a cui possono essere spediti messaggi tramite lo script, infatti non basta, purtroppo, solo il settaggio del tag

<INPUT type="hidden" name="recipient" 
value="nome@tuamail.com">

presente nella pagina html del form (vedi sotto), per impedire l'invio di mail ad altri indirizzi. Infatti si era accertato che degli spammer, usando tecniche relativamente semplici, inviavano mail in giro facendo ricadere la responsabilità sul proprietario del sito che ospitava lo script. Se il settaggio viene lasciato come di default sarà possibile usare come destinatari da inserire nel tag presente nella pagina html del form solo gli indirizzi mail appartenenti ai domini inseriti nell'array @referers, ad esempio: supponiamo di avere settato l'array @referers in questo modo:

@referers = ('ciccio.com','maria.it'); 

se lasciamo:

@recipients = &fill_recipients(@referers); 

avremo come risultato che sarà possibile inviare i messaggi a tutti gli indirizzi email appartenenti ai domini "www.ciccio.com" e "www.maria.it". Per cui nel campo hidden di nome recipient saranno inseribili ad esempio ciccio@ciccio.com, webmaster@ciccio.com, info@maria.it, support@maria.it, eccetera....

Ma come fare se vogliamo limitare l'uso ad una sola casella email, oppure vogliamo usare un provider di posta esterno, tipo "ciccio@tiscalinet.it" ?

E' sufficiente specificare nell'array gli indirizzi precisi che ci servono, ad esempio:

@recipients = (
&fill_recipients(@referers),
'^webmaster@ciccio\.com',
'^ciccio@tiscalinet\.it'
);

ATTENZIONE !!! Bisogna usare la "^", nel posto indicato, se si vuole utilizzare indirizzi precisi, e soprattutto si deve usare la "\" prima del punto. Si tratta di complicazioni rispetto alla semplicità delle precedenti versioni, ma purtroppo all'affinarsi degli attacchi deve corrispondere un affinamento delle difese. In questa maniera nel campo hidden di nome recipient saranno inseribili solamente gli indirizzi 'webmaster@ciccio.com', 'ciccio@tiscalinet.it'. Maggiori informazioni sul settaggio di questo array sono reperibili nella pagina Guida avanzata.

L'ultimo array da configuare è

@valid_ENV
Il suo settaggio è necessario per impedire ad un attacker di leggere il contenuto delle variabili d'ambiente del server, e quindi per preservarlo da un attacco.

@valid_ENV = (
'REMOTE_HOST',
'REMOTE_ADDR','REMOTE_USER',
'HTTP_USER_AGENT'
);

Eccetto che non si sappia cosa siano le variabili d'ambiente e come usarle consiglio di non modificare questo array.

Pagina di prova

Alla fine di tutto ciò abbiamo finito di settare lo script. Prima però di invarlo sul server dobbiamo preparare una pagina di prova, senza tanti fronzoli, con solo gli elementi essenziali:

<html>
<head>
<title>Prova FormMail</title>
</head>
<body>
<center>
<h1>Prova FormMail</h1>
<p>
<FORM method="POST" 
action="http://www.tuosito.com/cgi-bin/FormMail.pl">
<INPUT type="hidden" name="recipient" 
value="nome@tuamail.com">
<input type="text" name="testo" size="40" maxlength="80">
<input type="submit" value="Invia">
</form>
</body>
<html>
  1. Nel tag "FORM" dovete modificare la funzione "action" in modo che vi sia indicato l'URL effettivo dello script sul vostro sito.
  2. Nel tag "recipient" dovete mettere in "value" il vostro indirizzo email.

Fatto ciò siete pronti per l'istallazione e la prova del vostro script!

Istallare lo script FormMail.pl

Innanzi tutto dobbiamo trasferire i due files sul server. Il primo "prova_form.html" andrà nella directory principale dove c'è anche la index.html. Il secondo "FormMail.pl" andrà all'interno della directory "cgi-bin" o equivalente.

Attenzione!!! Se cambi questa disposizione o la "cgi-bin" si chiama in modo diverso, devi adeguare gli indirizzi che hai inserito nel tag "FORM" della pagina html.

Attenzione!!! Il file FormMail.pl deve essere assolutamente trasferito sul server in ASCII. Se venisse trasferito in binario non funzionerà. Tutti i client FTP prevedono l'opzione per essere sicuri che certi files sia trasferiti in ASCII.

Fatto ciò devi attribuire al file FormMail.pl i permessi, quindi chmod 755. Se non sai cosa sono i chmod e come si settano vai nella pagina principale della sezione; vi troverai dei link a pagine che spiegano tutto.

A questo punto vai con il browser alla pagina "prova_form.html", digita qualche parola e dai invio.

Se tutto è a posto ti comparirà un messaggio di risposta e ringraziamento e ti arriverà la mail che hai inviato.

In questo caso puoi proseguire alla pagina opzioni, in cui spiego tutti i settaggi possibili. Altrimenti ricontrolla tutta la procedura e/o vai alla pagina che analizza alcune risposte di errore.

Se tutto è andato bene puoi anche consultare la pagina per modifiche avanzate, riservata a chi sa mettere le mani nel codice PERL, oppure ha deciso di soffrire!

FormMail in server WindowsNT o 2000

Innanzi tutto se si dispone di un server Windows bisogna utilizzare la versione giusta di FormMail 1.9, poi bisogna accertarsi che il server disponga del software DevMailer, oppure che ne consenta l'istallazione. Se mancano queste condizioni FormMail non funzionerà, per cui cambiate script.

Se invece è istallabile il settaggio è molto semplice. Per prima cosa apriamo e leggiamo il readme e lo script. A differenza della versione per LINUX questa non ci darà problemi di leggibilità. Nota che nella versione per Windows non va inserito l'indirizzo dell'interprete di PERL. Le variabili da settare in questa versione sono le seguenti:

$smtp_server = "mail.tuonome.com"; 

Qui sopra devi indicare il nome del tuo server SMTP. Se non lo conosci chiedilo all'amministratore del tuo server. Comunque se utilizzi come server SMTP quello dove hai il sito l'indirizzo in molti casi si presenta in due forme: mail.nome_che_usi_per_le_mail.com (o .it, o .net, ecc), oppure nome_che_usi_per_le_mail.com (o .it, o .net, ecc).

@referers = ('worldwidemart.com','206.31.72.203'); 

Il successivo settaggio da fare nello script è quello relativo all'elenco dei siti autorizzati ad usare lo script. Infatti come detto sopra FormMail 1.9 può supportare più siti (si dice migliaia), basti dire che è lo script fornito da Tiscalinet agli sventurati che hanno la malsana idea di farsi il sito sui loro server. Gli indirizzi devono essere inseriti in un array che si presenta così: come possiamo vedere l'elenco dei siti autorizzati può essere fatto sia tramite i domini che tramite gli IP. Attenzione però che questo secondo sistema funziona solo se l'IP è "proprietario". Per saperlo basta che apriamo il browser e lo digitiamo nella barra degli indirizzi e diamo invio, se arriviamo direttamente nella home del sito l'IP è "proprietario", altrimenti vuol dire che è in "comproprietà".

In questa versione è obbligatorio inserire i domini senza www. Bisogna fare molta attenzione a non alterare la struttura sintattica dell'array, ogni elemento va inserito tra apici singoli e separati con una virgola senza altri spazi. Dopo l'ultimo elemento non va messa la virgola. Alla fine della riga deve rimanere il punto e virgola.

I due settaggi successivi sono comparsi dalla versione 1.9 (erano quindi assenti nella versione 1.6 prima distribuita). Sono entrambe dovuti a gravi problemi di sicurezza riscontrati. Il primo serve per impedire un uso abusivo da parte di spammers, il secondo serve ad impedire l'uso dello script per leggere le variabili d'ambiente del server da parte di non autorizzati. La lettura di queste variabili potrebbe essere prodromica ad un attacco cracker.

Procedendo, quindi, bisogna settare il seguente array:

@recipients = @referers; 

questo array serve a limitare gli indirizzi email a cui possono essere spediti messaggi tramite lo script, infatti non basta, purtroppo, solo il settaggio del tag:

<INPUT type="hidden" name="recipient" 
value="nome@tuamail.com">

presente nella pagina html del form (vedi sotto), per impedire l'invio di mail ad altri indirizzi. Infatti si era accertato che degli spammer, usando tecniche relativamente semplici, inviavano mail in giro facendo ricadere la responsabilità sul proprietario del sito che ospitava lo script. Se il settaggio viene lasciato come di default sarà possibile usare come destinatari da inserire nel tag presente nella pagina html del form solo gli indirizzi mail appartenenti ai domini inseriti nell'array @referers, ad esempio: supponiamo di avere settato l'array @referers in questo modo:

@referers = ('ciccio.com','maria.it');

se lasciamo:

@recipients = &fill_recipients(@referers);

avremo come risultato che sarà possibile inviare i messaggi a tutti gli indirizzi email appartenenti ai domini "www.ciccio.com" e "www.maria.it". Per cui nel campo hidden di nome recipient saranno inseribili ad esempio ciccio@ciccio.com, webmaster@ciccio.com, info@maria.it, support@maria.it, eccetera....

Ma come fare se vogliamo limitare l'uso ad una sola casella email, oppure vogliamo usare un provider di posta esterno, tipo "ciccio@tiscalinet.it" ?

E' sufficiente specificare nell'array gli indirizzi precisi che ci servono, ad esempio:

@recipients = (
&fill_recipients(@referers),
'^webmaster@ciccio\.com',
'^ciccio@tiscalinet\.it'
);

ATTENZIONE !!! Bisogna usare la "^", nel posto indicato, se si vuole utilizzare indirizzi precisi, e soprattutto si deve usare la "\" prima del punto. Si tratta di complicazioni rispetto alla semplicità delle precedenti versioni, ma purtroppo all'affinarsi degli attacchi deve corrispondere un affinamento delle difese. In questa maniera nel campo hidden di nome recipient saranno inseribili solamente gli indirizzi 'webmaster@ciccio.com', 'ciccio@tiscalinet.it'. Maggiori informazioni sul settaggio di questo array sono reperibili nella pagina Guida avanzata.

L'ultimo array da configuare è

@valid_ENV
Il suo settaggio è necessario per impedire ad un attacker di leggere il contenuto delle variabili d'ambiente del server, e quindi per preservarlo da un attacco.

@valid_ENV = (
'REMOTE_HOST',
'REMOTE_ADDR','REMOTE_USER',
'HTTP_USER_AGENT'
);

Eccetto che non si sappia cosa siano le variabili d'ambiente e come usarle consiglio di non modificare questo array.

Per finire bisogna considerare l'ultima variabile da settare:

$usingOldDM = 0;

bisogna mantenerla a "0" solo se la versione di "DevMailer" che si usa è la 1.5 o superiore, altrimenti bisogna settarla ad "1". Ciò è dovuto al fatto che le versioni inferiori alla 1.5 non supportano gli indirizzi mail multipli.

Crea la pagina di prova come descritto sopra. Ed anche per l'istallazione segui le istruzioni precedenti, con l'avvertenza che sui server Windows non hai i chmod, per cui il settaggio dei permessi di esecuzione dipende dall'impostazione specifica del server.

A questo punto vai con il browser alla pagina "prova_form.html", digita qualche parola e dai invio. Se tutto è a posto ti comparirà un messaggio di risposta e ringraziamento e ti arriverà la mail che hai inviato. In questo caso puoi proseguire alla pagina opzioni, in cui spiego tutti i settaggi possibili. Altrimenti ricontrolla tutta la procedura e/o vai alla pagina che analizza alcune risposte di errore.

Se tutto è andato bene puoi anche consultare la pagina per modifiche avanzate, riservata a chi sa mettere le mani nel codice PERL, oppure ha deciso di soffrire!


Indice del sito