Istallare FormMail 1.92
Sommario
- Istallare FormMail in server Linux
- Leggere i files
- Configurazione su Linux
- Pagina di prova
- Istallazione
- Istallare FormMail in server Windows NT
- Settaggio opzioni
- Analisi messaggi d'errore
- Guida avanzata
- SPECIALE !! Costruire il form con Flash by "Lokomotiv"
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:
- Facilità di configurazione.
- Possibilità che un solo script venga usato da più siti.
- Configurazione delle opzioni tramite i tag html della pagina di ogni sito utilizzatore.
- Buona sicurezza d'uso.
- Filtri antispamm.
- Un file di Readme perfetto.
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.
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.
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:
- Utilizzare un editor per linguaggi di programmazione. Questa è la scelta
migliore e più sicura per chi vuole manipolare o addirittura scrivere CGI.
Un editor testuale gratuito ottimo per l'html e sufficiente per gli altri
linguaggi è
Arachnophilia 5.1. Un eccellente editor per il PERL è
DzSoft Perl Editor.
Veramente ottimo perchè consente, previa l'istallazione
dell'interprete di PERL, di provare, entro certi limiti, in locale gli script
senza bisogno di web server. L'unico difetto è che costa 49$, ma a mio
avviso li vale tutti.
In tutti i casi in cui si usi un editor specifico sarà sufficiente aprire il file che risulterà perfettamente leggibile e lavorarlo. Poi a seconda dell'editor che si usa bisognerà trovare la funzione che trasforma il fine riga di UNIX in quello di Windows e salvare con la sua estensione ".pl" o ".cgi". Dopodichè il file sarà perfettamente leggibile anche con Blocco note di Windows.
- Aprire il file con un editor di testo evoluto come ad esempio Word di
Office. Scelta piuttosto semplice ma pericolosa. Infatti il file sarà subito
leggibile, ma bisognerà stare molto attenti al momento del salvataggio.
Ciò perchè se lo si salva in maniera normale verranno introdotti dei caratteri
di formattazione che corromperanno irrimediabilmente il file.
Quindi sarà necessario procedere con
"file" -> "salva con nome" --> selezionare dalla tendina "tipo di file"
--> "Solo testo *.txt". Il file sarà stato salvato come
xxxx.txt e andrà rinominato in xxxx.pl. A questo punto il file sarà
perfettamente leggibile anche se aperto con Blocco Note di Windows con
cui dovrà essere lavorato in seguito per evitare che un salvataggio avventato
con word lo rovini irrimediabilmente.
- Il terzo sistema utilizzabile consiste nell'uplodare in FTP il file in
qualunque cartella del proprio sito. Poi azionare l'opzione "view" presente
in tutti i client FTP. Vedrete che il file sarà perfettamente leggibile e verrà
presentato tramite Blocco Note di Windows. A quel punto basterà salvare
il file temporaneo creato dal client nella vostra cartella preferita dandogli
il suo nome ed estensione.
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_ENVIl 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.
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>
- Nel tag "FORM" dovete modificare la funzione "action" in modo che vi sia indicato l'URL effettivo dello script sul vostro sito.
- 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_ENVIl 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 |
