26.5. Come fare funzionare gli script CGI

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".

[Warning]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".

26.5.1. Configurazione Apache

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/"1

<Directory "/srv/www/example.com_cgi-bin/">
 Options +ExecCGI2
 AddHandler cgi-script .cgi .pl3
 Order allow,deny4
 Allow from all
</Directory>
    
1

Indica ad Apache di gestire tutti i file all'interno di questa directory come script CGI.

2

Abilita l'esecuzione dello script CGI.

3

Indica al server di trattare i file con estensione .pl e .cgi come script CGI. Adattare in base alle proprie esigenze.

4

Le direttive Order e Allow controllano lo stato di accesso predefinito e l'ordine nel quale le direttive Allow e Deny vengono valutate. In questo caso le dichiarazioni "deny" sono valutate prima delle dichiarazioni "allow" e viene abilitato l'accesso ovunque sia abilitato.

26.5.2. Esecuzione di uno script di esempio

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".

26.5.3. Risoluzione dei problemi

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.