paper.gifioProgrammo N°6, Luglio/Agosto 1997 ©Copyright DIEMME Editori

fire.gif

cgi.png
PROGRAMMAZIONE CGI
Inizia con questo numero una breve serie di articoli dedicati alla programmazione per Internet
Il tutto nasce all'inizio degli anni '90 grazie ad un gruppo di ingegneri e fisici del CERN di Ginevra, che anziché progettare bombe atomiche o all'antimateria (e meno male!), crearono le fondamenta per il primo sistema informativo planetario (...universale per chi non crede ai marziani). Alla sua base stanno un protocollo di comunicazione come l'HTTP, un linguaggio semplice ed efficace come l'HTML, di cui ioProgrammo sta proponendo un corso dettagliato, e la CGI.
linea.gif
COS'E' LA CGI
La CGI (Common Gateway Interface) è un'interfaccia che definisce il modo in cui un server di informazioni (server web) e alcuni programmi (programmi gateway) comunicano. Lo scambio di informazioni avviene mediante variabili d'ambiente speciali, argomenti della riga di comando o, nel caso più frequente, mediante i parametri di un modulo da compilare (i form html, per intenderci).
linea.gif
I METODI CGI
Lo scambio di informazioni tra client, programma cgi e server, avviene secondo la seguente sequenza fondamentale: Per quanto riguarda invece il programma cgi, questo può ricevere i dati da elaborare in uno dei tre modi seguenti: linea.gif
IL SERVER
Come fa il server a sapere che i dati inviati dal browser dovranno essere processati da un programma cgi? Bisogna agire nei file di configurazione del server. Se usiamo il server Apache nel file access.conf ci sarà una direttiva simile a questa
<Directory /usr/local/etc/httpd/cgi-bin>
mentre nel file srm.conf ci sarà qualcosa come:
ScriptAlias /cgi-bin /usr/local/etc/httpd/cgi-bin
Tali direttive definiscono le directory in cui sono contenuti i programmi gateway. Per cui, supponendo di lavorare a livello locale (client e server sullo stesso pc), il modulo che inizia con <FORM METHOD="POST" ACTION="http://localhost/cgi-bin/prova.cgi"> invierà i dati al programma prova.cgi nella directory /cgi-bin del server.
linea.gif
I PROGRAMMI GATEWAY
Per scrivere programmi compatibili con le specifiche cgi si può usare qualsiasi linguaggio di programmazione, dal C al Visual Basic. Noi useremo il Perl, sia per mantenere una promessa fatta e sia perchè questo linguaggio sembra nato proprio per scrivere script di gateway. Teoricamente non vi sono limiti all'uso di questi programmi. In generale vengono usati per consentire: linea.gif
SICUREZZA
Finché si lavora a livello locale la sicurezza del nostro server è in effetti un problema relativo. Nel momento in cui però si inizia a programmare in un ambiente multiutente, lo sviluppo di programmi cgi e la configurazione del server web debbono rispettare alcune norme di sicurezza per la salvaguardia dell'integrità del sistema e dei dati in esso contenuti. Scrivere un programma di gateway e renderlo eseguibile in una macchina collegata ad Internet equivale a permettere l'esecuzione di quel programma al mondo intero. Esiste quindi la possibilità, nemmeno tanto remota, che un client attacchi il server proprio attraverso il cgi. Ci sono alcune semplici regole da seguire per programmare in modo sicuro. Innanzi tutto il server httpd non deve mai essere eseguito con i diritti del SuperUser (root). Inoltre sarebbe molto utile che tutti i dati e i programmi cgi degli utenti fossero gestiti in una partizione diversa dalla principale in modo da "montare" un nuovo file system dedicato proprio a tale scopo. Poi bisogna fare attenzione all'uso di chiamate di sistema nei programmi cgi, magari quando si costruiscono comandi con le funzioni system(), exec() e popen() usando i dati provenienti dal client. Infine è necessaria un'attenta configurazione del server prestando particolare attenzione alle direttive di Server-Side-Includes.
linea.gif
PER INIZIARE
Non esiste niente di meglio e più economico che una macchina Linux per programmare Internet a livello nativo. Nel CD di ioProgrammo di Maggio c'è tutto il necessario. Una fantastica distribuzione di Linux, come la RedHat 4.1, e tutto il software per installare un server web completo. Nei nostri esempi si lavorerà sempre in locale, per cui tutte le chiamate al server avranno questa forma generale:
http://localhost/cgi-bin/scriptcgi
linea.gif
TESTIAMO L'AMBIENTE CGI
Questo semplice script Perl lista sulla pagina del browser tutte le variabili d'ambiente supportate dallo standard CGI.

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<HTML><HEAD>\n";
print "<TITLE>Ambiente CGI</TITLE>\n";
print "</HEAD>\n";
print "<BODY bgcolor=#ffffff>\n";
print "<H1>Ambiente CGI</H1>\n";
foreach $env_var (keys %ENV) {
   print "<B>$env_var</B> = $ENV{$env_var}<BR>\n";
}
print "</BODY></HTML>\n";

Salviamo questo cgi nella directory /cgi-bin del server con il nome test.cgi e lo richiamiamo da netscape con http://localhost/cgi-bin/test.cgi. Il risultato in figura 1.
linea.gif
SU INTERNET
Per sapere tutto su HTTP e CGI
http://www.w3.org
http://hoohoo.ncsa.uiuc.edu/cgi/

Per scaricare e configurare l'ultima versione del server web Apache
http://www.apache.org

fire.gif

Data creazione HTML: Febbraio 1998
Autore: Francesco Munaretto
E-mail: NoSpam@thank.you
exclaim.gif