La CGI (Common Gateway Interface, interfaccia gateway comune) di Apache consente di creare contenuti dinamici con programmi o script indicati in genere come script CGI. Gli script CGI possono essere scritti utilizzando qualsiasi linguaggio di programmazione. In genere vengono utilizzati linguaggi di script quali Perl o PHP.
Per consentire ad Apache di fornire contenuti creati utilizzando script CGI, č necessario attivare mod_cgi e mod_alias. Entrambi i moduli sono abilitati per impostazione predefinita. Per ulteriori dettagli sull'attivazione dei moduli, consultare la Sezione 26.4.2, "Attivazione e disattivazione".
![]() | Sicurezza CGI |
|---|---|
Consentire al server di eseguire script CGI, rappresenta un potenziale rischio per la sicurezza. Per informazioni, consultare la Sezione 26.7, "Come evitare problemi di sicurezza". | |
In SUSE Linux, l'esecuzione di script CGI č consentita solo nella directory /srv/www/cgi-bin/. Questa posizione č giā configurata per l'esecuzione di script CGI. Se č stata creata una configurazione di host virtuale (vedere la Sezione 26.2.1.2, "Configurazione dell'host virtuale") e si desidera inserire lo script in una directory specifica per l'host, sarā necessario sbloccare e configurare questa directory.
Esempio 26.5. Configurazione CGI VirtualHost
ScriptAlias /cgi-bin/ "/srv/www/example.com_cgi-bin/"<Directory "/srv/www/example.com_cgi-bin/"> Options +ExecCGI
AddHandler cgi-script .cgi .pl
Order allow,deny
Allow from all </Directory>
Nella programmazione CGI, a differenza di quella "normale", i programmi e gli script CGI devono essere preceduti da un'intestazione di tipo MIME, ad esempio Content-type: text/html. Questa intestazione viene inviata al client, in modo che comprenda il tipo di contenuto che riceve. In secondo luogo, l'output dello script deve essere comprensibile al client, in genere un browser Web: nella maggior parte dei casi HTML o, ad esempio, testo normale o immagini.
Un semplice script di prova in /usr/share/doc/packages/apache2/test-cgi č parte del pacchetto Apache. Fornisce il contenuto di alcune variabili d'ambiente come testo normale. Copiare questo script in /srv/www/cgi-bin/ o nella directory script dell'host virtuale (/srv/www/example.com_cgi-bin/) e assegnare il nome test.cgi.
I file accessibili dal server Web devono appartenere all'utente root (per ulteriori informazioni, vedere la Sezione 26.7, "Come evitare problemi di sicurezza"). Dato che il server Web viene eseguito con un utente differente, gli script CGI devono eseguibili e leggibili ovunque. Passare alla directory CGI e utilizzare il comando chmod 755 test.cgi per applicare le autorizzazioni corrette.
Richiamare ora http://localhost/cgi-bin/test.cgi o http://example.com/cgi-bin/test.cgi. Verrā visualizzato "CGI/1.0 test script report".
Se non viene visualizzato l'output del programma di prova, ma viene visualizzato un messaggio d'errore, verificare quanto segue:
Risoluzione dei problemi CGI
Si č ricaricato il server dopo aver modificato la configurazione? Verificare con rcapache2 probe.
Se č stata configurata la directory CGI personalizzata, č stata configurata correttamente? Nel dubbio, provare lo script contenuto nella directory CGI predefinita /srv/www/cgi-bin/ e richiamarlo con http://localhost/cgi-bin/test.cgi.
Le autorizzazioni sono corrette? Passare alla directory CGI ed eseguire ls -l test.cgi. L'output dovrebbe iniziare con
-rwxr-xr-x 1 root root
Verificare che lo script non contenga errori di programmazione. Se non si č modificato test.cgi, questo non dovrebbe avvenire, tranne se si utilizzano i propri programmi, accertarsi sempre che non contenga errori di programmazione.