L'interface CGI (Common Gateway Interface) d'Apache permet de créer du contenu dynamique avec des programmes ou des scripts que l'on appelle généralement des scripts CGI. Les scripts CGI peuvent être écrits dans n'importe quel langage de programmation. Généralement, on utilise des langages de script tels que Perl ou PHP.
Pour permettre à Apache de fournir du contenu créé par des scripts CGI, mod_cgi doit être activé. mod_alias est également nécessaire. Par défaut, ces deux modules sont activés. Reportez-vous à la Section 26.4.2, « Activation et désactivation » pour des informations détaillées sur l'activation des modules.
![]() | sécurité CGI |
|---|---|
Le fait d'autoriser le serveur à exécuter des scripts CGI constitue une faille de sécurité potentielle. Pour plus d'informations, reportez-vous à la Section 26.7, « Comment éviter les problèmes de sécurité ». | |
Dans SUSE Linux, l'exécution de scripts CGI n'est autorisée que dans le répertoire /srv/www/cgi-bin/. Cet emplacement est déjà configuré pour exécuter les scripts CGI. Si vous avez créé une configuration d'hôte virtuel (reportez-vous à Section 26.2.1.2, « Configuration de l'hôte virtuel ») et si vous souhaitez placer vos scripts dans un répertoire spécifique de l'hôte, vous devez déverrouiller et configurer ce répertoire.
Exemple 26.5. VirtualHost Configuration CGI
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>
La programmation CGI est différente de la programmation "classique". En effet, les programmes et les scripts CGI doivent être précédés d'un en-tête de type MIME tel que Content-type: text/html. Cet en-tête est envoyé au client, afin qu'il comprenne le type de contenu qu'il reçoit. Ensuite, la sortie du script doit être quelque chose que le client, généralement un navigateur Web, comprend : du HTML dans la plupart des cas ou du texte brut ou des images, par exemple.
Un simple script de test disponible sous /usr/share/doc/packages/apache2/test-cgi fait partie du paquetage d'Apache. Il sort le contenu de certaines variables d'environnement en texte brut. Copiez ce script dans /srv/www/cgi-bin/ ou dans le répertoire de script de votre hôte virtuel (/srv/www/example.com_cgi-bin/) et nommez-le test.cgi.
Les fichiers accessibles par le serveur Web doivent être détenus par l'utilisateur root (reportez-vous à la Section 26.7, « Comment éviter les problèmes de sécurité » pour obtenir des informations supplémentaires). Du fait que le serveur Web s'exécute avec un utilisateur différent, les scripts CGI doivent être exécutables et lisibles par n'importe quel utilisateur. Accédez au répertoire CGI et utilisez la commande chmod 755 test.cgi pour appliquer les autorisations requises.
Appelez maintenant http://localhost/cgi-bin/test.cgi ou http://example.com/cgi-bin/test.cgi. Le « rapport de script de test CGI/1.0 » doit s'afficher.
Si vous ne voyez pas la sortie du programme de test mais un message d'erreur à la place, vérifiez ce qui suit :
Dépannage de CGI
Avez-vous rechargé le serveur après avoir modifié la configuration ? Vérifiez avec rcapache2 probe.
Si vous avez configuré votre répertoire CGI personnalisé, est-il correctement configuré ? En cas de doute, essayez le script du répertoire CGI par défaut /srv/www/cgi-bin/ et appelez-le avec http://localhost/cgi-bin/test.cgi.
Les droits d'accès aux fichiers sont-ils corrects ? Accédez au répertoire CGI et exécutez la commande ls -l test.cgi. Sa sortie doit commencer par
-rwxr-xr-x 1 root root
Assurez-vous que le script ne contient pas d'erreurs de programmation. Si vous n'avez pas changé test.cgi, cela ne doit pas être le cas. Toutefois, si vous utilisez vos propres programmes, vérifiez toujours qu'ils ne contiennent pas d'erreurs de programmation.