perlwin32faq6 - Info serveur web |
perlwin32faq6 - Info serveur web
Configuration et dépannage de Perl pour Win32 et d'un serveur web
La plupart des serveurs Windows qui utilisent le standard CGI ou ISAPI exécuteront les scripts ActivePerl. Les serveurs suivants sont connus comme fonctionnant avec ActivePerl (protocoles connus entre crochets) :
http://www.apache.org mod_perl home page: http://perl.apache.org
http://www.microsoft.com/iis/
http://www.iplanet.com/
[Pour une liste de serveurs web, voir : http://www.netcraft.com/survey/servers.html -NdT]
Si vous voulez stocker tous vos scripts CGI dans un seul répertoire, ajouter la ligne suivante au fichier srm.conf (vous pouvez prendre le répertoire de votre choix, mais vérifiez qu'il existe) :
ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache/cgi-bin/"
Après ce changement, arrêter et redémarrer le service Apache.
Apache fournit une émulation de la syntaxe UNIX shebang (#!/chemin/du/perl), donc l'étape suivante est facile. Vous pouvez mettre vos scripts Perl dans votre répertoire cgi-bin, tant qu'ils commencent par le chemin de l'interpréteur. Par exemple :
#!C:\PERL\5.00464\bin\MSWin32-x86\perl.exe
use CGI qw(:standard) ; print header(); print "Hello, world";
Si vous voulez activer les scripts CGI en fonction de l'extension, comme .pl, vous devez rajouter la ligne suivant au fichier srm.conf :
AddHandler cgi-script .pl
Par défaut, les scripts CGI ne sont pas autorisés dans la racine du web, mais le sont dans les autres répertoires documents . Les répertoires documents sont créés avec la commande Alias dans srm.conf :
Alias /ResourceKit/ "E:/utilsamp/"
Vous pouvez alors inclure des fichiers qui finissent en .pl dans un répertoire document. Vous aurez encore besoin d'inclure la ligne #! avec le chemin complet à l'interpréteur perl.exe, comme expliquer plus haut.
Si vous voulez autoriser les scripts CGI dans la racine du web, ajouter l'option ExecCGI aux directives d'Options entre les entrées <Directory> et </Directory> du fichier access.conf de la racine du web (cela se trouve après le commentaire :
# This should be changed to whatever you set DocumentRoot to.
Après changement, les directives d'Options devraient ressembler à :
Options Indexes FollowSymLinks ExecCGI
Par défaut, l'installation de ActivePerl associe les extensions .plx à Perl pour ISAPI. Vous pouvez modifier l'extension utilisée pendant l'installation. Parce que l'installation ne fait cela que si IIS est déjà installé, vous devez installer IIS d'abord, puis ActivePerl. Si vous avez besoin de reconfigurer ces points, ou si vous devez les initialiser à la main, les instructions de cette section vous seront utiles.
Microsoft Internet Information Server (IIS) est livré avec Windows NT Server. Peer Web Services (PWS) est livré avec Windows NT Workstation. La configuration est pratiquement la même. D'abord, vous devriez consulter le Chapitre 8, Publication d'Informations et d'Applications, dans la documentation IIS.
Lisez aussi l'article de la base de connaissance Microsoft couvrant le sujet, ``Configurer et Tester un Script PERL [sic] avec IIS,'' disponible sur http://www.microsoft.com/kb/articles/q150/6/29.htm .
Vous devez suivre ces étapes pour faire fonctionner les scripts Perl pour Win32 sous IIS :
Vous devez redémarrer le service web après les changements dans le registre ou l'installation de Perl.
Parce que IIS tourne comme un service (voir Qu'est-ce qu'un service Windows NT ?), vous devez prendre des précautions pour être sûr que les fichiers et les variables d'environnement lui soient accessibles.
Microsoft IIS 4.0 est livré avec Windows NT Server 5.0, et PWS 4.0 avec Windows NT Workstation 5.0. Et IIS et PWS sont disponibles dans l'Option Pack de Microsoft Windows NT 4.0. Vous pouvez trouver un lien pour l'Option Pack à http://www.microsoft.com/iis/
Pour configurer IIS ou PWS 4.0 pour utiliser les scripts Perl :
%s %s
. Quand un script est
exécuter, le premier %s
sera remplacé par le chemin
complet du script, et le second %s
sera remplacé par les
paramètres du script.
Pour exécuter Perl pour ISAPI, tapez le chemin complet de
PerlIS.DLL. %s %s
n'est pas utile pour les DLL ISAPI.
Dans le champ Extension, tapez .pl ou .plx (ou n'importe quelle
extension que vous voulez utiliser).
L'association d'application est maintenant finie. Cliquez le bouton OK
et cliquez OK pour fermer toutes les feuilles de
dialogue/propriétés restantes.
Fermez le Gestionnaire de Service Internet de IIS 4.0.
Parce que IIS tourne comme un service (voir Qu'est-ce qu'un service Windows NT ?), vous devez prendre des précautions pour être sûr que les fichiers et les variables d'environnement lui soient accessibles.
Pour configurer ActivePerl avec FastTrack Server, suivez les étapes suivantes :
Si vous souhaitez accéder aux scripts Perl CGI dans d'autres répertoires, vous devez associer une extension, comme .pl, avec le type MIME shellcgi. Avant de suivre les étapes suivantes, vous devez ajouter au moins un répertoire Shell CGI - cela autorisera shellcgi sur votre serveur (vous pouvez effacer ce répertoire, et shellcgi restera validé). Suivez les étapes suivantes pour associer .pl avec le type MIME shellcgi.
Si vous avez des problèmes à utiliser les scripts Perl sur votre serveur Netscape, vérifiez les points suivants :
Un avantage du serveur FastTrack est que les logs d'Erreurs donnent des détails sur les raisons pour lesquelles votre script CGI ne fonctionne pas, c'est donc un bon endroit où chercher en cas de problèmes de configuration.
Parce que les serveurs iPlanet tournent comme des services (voir Qu'est-ce qu'un service Windows NT ?), vous devez prendre des précautions pour être sûr que les fichiers et les variables d'environnement leur soient accessibles.
Certains ont signalé des problèmes avec les données POSTées par des programmes Perl avec les serveurs iPlanet. Comme iPlanet utilise apparemment les associations pour exécuter les scripts, et que les données POSTées sont envoyées au programme par STDIN, cela peut être relatif au problème de redirection.
Microsoft Personal Web Server pour Windows 95 est une version dégradée de Microsoft Internet Information Server. Bien que non documenté, il apparaît que la méthode utilisée pour le support de Perl pour Win32 avec IIS marche aussi avec Personal Web Server. Voir Comment configurer IIS 3.0 ou moins pour supporter ActivePerl ?
Si votre serveur web n'est pas listé, consulter la documentation du serveur sur la manière de configurer l'interpréteur CGI. En général le processus est le suivant :
Parce que la plupart des serveurs tournent comme un service (voir Qu'est-ce qu'un service Windows NT ?), vous devez prendre des précautions pour être sûr que les fichiers et les variables d'environnement leur soient accessibles.
Habituellement, cela signifie deux choses : soit votre système est mal configuré, soit votre script ne produit pas des sorties correctes pour un script CGI.
Avant de faire quoi que ce soit, consulter cette liste :
PATH
pour trouver
perl.exe, vérifier que vous avez mis perl.exe dans votre
PATH
système, pas uniquement dans votre variable
utilisateur. Ceci est valable uniquement pour Windows NT.
Si votre serveur requiert que les répertoires soient
marqués comme exécutables, vérifier que le
répertoire contenant le script soit défini comme tel.
Puisque le serveur web peut-être configuré pour tourner
comme un utilisateur local, vérifier que cet utilisateur a
accès au fichier du script, au binaire Perl et aux librairies.
Beaucoup de serveurs web tournent sous le compte «Local System», qui a
généralement les permissions suffisantes.
Si Perl.exe ou Perl pour ISAPI ne fonctionnent pas comme attendu,
consulter les logs d'événements pour des indices.
Testez les informations ci-dessus avec un script dont vous êtes sûr qu'il produit la bonne sortie pour le protocole CGI (les scripts de cette FAQ sont un bon choix de départ). Essayez avec votre script une fois que vous êtes sûr que le script test fonctionne.
Si vous êtes sûr que le serveur exécute le script, mais qu'il ne génère que des messages d'erreur dans votre navigateur, il existe des outils pouvant vous aider. CGI::Carp est utilisé pour envoyer des informations de débuggage au navigateur ou sur un fichier log. Même si votre script a une erreur de compilation, il peut habituellement intercepter et signaler l'erreur. Pour utiliser CGI::Carp, incluez les lignes suivantes dans votre programme :
# Ce qui est dans le bloque BEGIN sera exécuté très tôt # avant que le reste du script soit interprété. # BEGIN {
# Use the CGI::Carp module and import the carpout() function. # use CGI::Carp qw(carpout);
# Send warnings and die messages to the browser. # carpout(STDOUT); }
Si votre script contient une erreur, vous devriez voir quelque chose comme ça dans votre navigateur :
[Wed Jun 3 09:32:28 1998] C:\inetpub\scripts\test.pl: Error message! at C:\inetpub\scripts\test.pl line 38.
Quelques fois, il peut être utile de vous mettre à la place de quelqu'un d'autre. Le paquetage libwww-perl (LWP) est disponible sur CPAN, mais vous pouvez l'installer en utilisant le Gestionnaire de Paquetage Perl (PPM). LWP sera peut-être inclus dans les prochaines versions de ActivePerl. [Le paquetage libwww-perl est inclus dans ActivePerl depuis la version 5.6.1 -NdT]
LWP inclus le puissant script lwp-request, qui vous laisse voir les
choses du point de vue du navigateur. Invoquez lwp-request avec le
nom d'une URL pour voir le contenu de la réponse, comme dans
lwp-request http://localhost
. Pour inspecter les
en-têtes des réponses HTTP, appeler lwp-request avec
l'option -de
:
C:\>lwp-request -de http://localhost Date: Wed, 03 Jun 1998 13:37:31 GMT Accept-Ranges: bytes Server: Microsoft-IIS/4.0 Content-Length: 4325 Content-Location: http://localhost/Default.htm Content-Type: text/html ETag: "0c1e58b063bd1:1237" Last-Modified: Thu, 09 Apr 1998 12:09:28 GMT Client-Date: Wed, 03 Jun 1998 13:37:31 GMT Client-Peer: 127.0.0.1:0
Cet outil peut-être très utile pour voir ce que votre script fait. Quel que soit le résultat, ne désespérez pas. Il est possible, vraiment, de faire fonctionner un script Perl sur votre serveur web. Promis.
Premièrement, l'avertissement : NE FAITES PAS ÇA. MÊME SI VOUS NE SAVEZ PAS POURQUOI, NE LE FAITES PAS.
Maintenant l'explication : l'idée est de mettre perl.exe dans votre répertoire CGI (configurer sur votre serveur), et d'utiliser la syntaxe d'URL suivante :
http://soon.to.be.a.victim.net/cgi-bin/perl.exe?myscript.pl
pour exécuter myscript.pl. Cela vous permet de ne pas avoir à vous soucier de configurer votre serveur pour associer les fichiers d'extension .pl avec un interpréteur comme perl.exe.
En fait, dans certains anciens serveurs web Win32 (les serveurs iPlanet 1.x en particulier), il était impossible d'associer un script avec un interpréteur. Cette méthode était recommandée par certains vendeurs comme une approche viable pour exécuter des scripts Perl avec le serveur web.
N'importe qui avec un esprit vicieux et un peu de connaissance Perl peut
voir qu'avec cette configuration, les pirates peuvent commencer
à faire toutes sortes de choses désagréables au
serveur. Tout ce qu'ils ont à faire est d'envoyer des URLs
manuellement, avec l'option -e
sur la ligne de commande pour
perl.exe, pour faire des choses comme effacer tous les fichiers d'un
disque :
http://aaaugh.that.hurts.net/cgi-bin/perl.exe?-e?'del%20c:\*.*%20/S%20/Q'
Bien sûr, un vrai criminel informatique ne fera jamais quelque chose d'aussi évident, et à la place utilisera cette possibilité comme base pour causer des dégâts irréparables à votre organisation.
L'URL suivante couvre le sujet plus en détail :
http://www.cert.org/advisories/CA-1996-11.html
Tom Christiansen a également écrit un bon article à ce sujet :
http://www.perl.com/perl/news/latro-announce.html
Notez qu'une des solutions suggérées pour résoudre ce problème et d'inclure votre Perl script dans un fichier batch en utilisant pl2bat, ou votre code personnalisé. CE N'EST PAS BON NON PLUS. La plupart des serveurs qui n'autorisent pas les associations de fichiers sont aussi susceptible d'avoir un bug qui permet à un utilisateur de passer n'importe quelle commande DOS après un fichier batch.
Cette FAQ a été à l'origine assemblée et maintenue par Evangelo Prodromou. Elle a été révisée et mise à jour par Brian Jepson de O'Reilly and Associates, et David Grove et David Dmytryshyn d'ActiveState.
Cette FAQ est dans le domaine public. Si vous l'utilisez, cependant, vérifiez, s'il vous plaît, que vous donniez le crédit aux auteurs originaux.
Cette traduction française correspond à la version anglaise distribuée avec perl 5.8.0. Pour en savoir plus concernant ces traductions, consultez http://www.enstimac.fr/Perl/ .
Fabien Martinet <ho.fmartinet@cma-cgm.com>
Jean-Louis Morel <jl_morel@bribes.org> (mise à jour perl 5.8.0)
perlwin32faq6 - Info serveur web |