| <?xml version="1.0" encoding="UTF-8" ?> | |
| <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd"> | |
| <?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?> | |
| <!-- English Revision: 1935409 --> | |
| <!-- French translation : Lucien GENTIS --> | |
| <!-- Reviewed by : Vincent Deffontaines --> | |
| <!-- | |
| Licensed to the Apache Software Foundation (ASF) under one or more | |
| contributor license agreements. See the NOTICE file distributed with | |
| this work for additional information regarding copyright ownership. | |
| The ASF licenses this file to You under the Apache License, Version 2.0 | |
| (the "License"); you may not use this file except in compliance with | |
| the License. You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| --> | |
| <manualpage metafile="env.xml.meta"> | |
| <title>Apache httpd et les variables d'environnement</title> | |
| <summary> | |
| <p>Deux types de variables d'environnement affectent le serveur | |
| HTTP Apache.</p> | |
| <p>Le premier type correspond aux variables d'environnement | |
| contrôlées par le système d'exploitation sous-jacent et définies | |
| avant le démarrage du serveur. Leurs valeurs peuvent être utilisées | |
| directement dans les fichiers de configuration, et peuvent | |
| éventuellement être transmises aux scripts CGI et SSI à l'aide de la | |
| directive PassEnv.</p> | |
| <p>Le second type correspond aux variables nommées appelées aussi | |
| <em>variables d'environnement</em> dans lesquelles le serveur HTTP | |
| Apache stocke des informations via un mécanisme spécial. Ces | |
| informations peuvent servir à contrôler diverses opérations comme | |
| l'enregistrement des traces ou le contrôle d'accès. On utilise aussi ces | |
| variables dans le mécanisme de communication avec les programmes externes | |
| comme les scripts CGI. Ce document présente différentes méthodes pour | |
| manipuler et utiliser ces variables.</p> | |
| <p>Bien que ces variables soient référencées comme <em>variables | |
| d'environnement</em>, il ne faut pas les confondre avec les variables | |
| d'environnement contrôlées par le système d'exploitation sous-jacent. | |
| En fait, ces variables sont stockées et manipulées dans une structure | |
| interne à Apache httpd. Elles ne deviennent de véritables variables | |
| d'environnement du système d'exploitation que lorsqu'elles sont mises à la | |
| disposition de scripts CGI et de scripts inclus côté serveur (SSI). Si vous | |
| souhaitez manipuler l'environnement du système d'exploitation sous lequel | |
| le serveur s'exécute, vous devez utiliser les mécanismes standards de | |
| manipulation de l'environnement fournis par l'interpréteur de commandes | |
| (shell) de votre système d'exploitation.</p> | |
| </summary> | |
| <section id="setting"> | |
| <title>Définition des variables d'environnement</title> | |
| <related> | |
| <modulelist> | |
| <module>mod_cache</module> | |
| <module>mod_env</module> | |
| <module>mod_rewrite</module> | |
| <module>mod_setenvif</module> | |
| <module>mod_unique_id</module> | |
| </modulelist> | |
| <directivelist> | |
| <directive module="mod_setenvif">BrowserMatch</directive> | |
| <directive module="mod_setenvif">BrowserMatchNoCase</directive> | |
| <directive module="mod_env">PassEnv</directive> | |
| <directive module="mod_rewrite">RewriteRule</directive> | |
| <directive module="mod_env">SetEnv</directive> | |
| <directive module="mod_setenvif">SetEnvIf</directive> | |
| <directive module="mod_setenvif">SetEnvIfNoCase</directive> | |
| <directive module="mod_env">UnsetEnv</directive> | |
| </directivelist> | |
| </related> | |
| <section id="basic-manipulation"> | |
| <title>Manipulations de base de l'environnement</title> | |
| <p>La méthode la plus élémentaire pour définir une variable | |
| d'environnement au niveau d'Apache httpd consiste à utiliser la directive | |
| inconditionnelle <directive module="mod_env" | |
| >SetEnv</directive>. Les variables peuvent aussi être transmises depuis | |
| l'environnement du shell à partir duquel le serveur a été démarré en | |
| utilisant la directive | |
| <directive module="mod_env">PassEnv</directive>.</p> | |
| </section> | |
| <section id="conditional"> | |
| <title>Définitions conditionnelles en fonction des requêtes</title> | |
| <p>Pour plus de souplesse, les directives fournies par le module | |
| <module>mod_setenvif</module> permettent de définir les | |
| variables d'environnement en tenant compte des caractéristiques | |
| de chaque requête. Par exemple, une | |
| variable pourrait n'être définie que lorsqu'un navigateur spécifique | |
| (User-Agent) a généré la requête, ou seulement quand un en-tête | |
| Referer particulier est présent. La directive | |
| <directive module="mod_rewrite">RewriteRule</directive> du module | |
| <module>mod_rewrite</module> qui utilise l'option | |
| <code>[E=...]</code> pour définir | |
| les variables d'environnement apporte encore plus de souplesse.</p> | |
| </section> | |
| <section id="unique-identifiers"> | |
| <title>Identifiants uniques</title> | |
| <p>Finalement, le module <module>mod_unique_id</module> définit la variable | |
| d'environnement <code>UNIQUE_ID</code> pour chaque requête à une valeur | |
| qui est garantie unique parmi « toutes » les requêtes | |
| sous des conditions très spécifiques.</p> | |
| </section> | |
| <section id="standard-cgi"> | |
| <title>Variables CGI standards</title> | |
| <p>En plus de l'ensemble des variables d'environnement internes à la | |
| configuration d'Apache httpd et de celles transmises depuis le shell, | |
| les scripts CGI et les pages SSI | |
| se voient affectés un ensemble de variables | |
| d'environnement contenant des méta-informations à propos de la requête | |
| comme préconisé dans la spécification | |
| sur les CGIs (<rfc>3875</rfc>).</p> | |
| </section> | |
| <section id="caveats"> | |
| <title>Quelques mises en garde</title> | |
| <ul> | |
| <li>Les directives de manipulation de l'environnement ne permettent | |
| pas de supplanter ou modifier les variables CGI standards.</li> | |
| <li>Lorsqu'on utilise <program>suexec</program> pour exécuter des | |
| scripts CGI, l'environnement est nettoyé et réduit à un ensemble de | |
| variables <em>sûres</em> avant l'exécution du script. La liste des | |
| variables <em>sûres</em> est définie à la compilation dans | |
| <code>suexec.c</code>.</li> | |
| <li>Pour des raisons de portabilité, les noms des variables | |
| d'environnement ne peuvent contenir que des lettres, des chiffres et | |
| le caractère « souligné ». En outre, le premier caractère ne doit pas | |
| être un chiffre. Les caractères qui ne satisfont pas à ces conditions | |
| seront remplacés par un caractère « souligné » quand ils seront | |
| transmis aux scripts CGI et aux pages SSI.</li> | |
| <li>Les contenus d'en-têtes HTTP transmis aux scripts de type | |
| CGI ou autre à l'aide de variables d'environnement constituent un | |
| cas particulier (voir plus loin). Leur nom est converti en | |
| majuscules et seuls les tirets sont remplacés par des | |
| caractères '_' (« souligné ») ; si le format du nom de l'en-tête | |
| n'est pas valide, celui-ci est ignoré. Voir <a | |
| href="#fixheader">plus loin</a> pour une solution de | |
| contournement du problème.</li> | |
| <li>La directive <directive | |
| module="mod_env">SetEnv</directive> s'exécute assez tard au | |
| cours du traitement de la requête, ce qui signifie que des | |
| directives telles que <directive | |
| module="mod_setenvif">SetEnvIf</directive> et <directive | |
| module="mod_rewrite">RewriteCond</directive> ne verront pas | |
| les variables qu'elle aura définies.</li> | |
| <li>Lorsque le serveur cherche un chemin via une <glossary | |
| ref="subrequest">sous-requête</glossary> interne (par exemple la | |
| recherche d'un <directive | |
| module="mod_dir">DirectoryIndex</directive>), ou lorsqu'il génère un | |
| listing du contenu d'un répertoire à l'aide du module | |
| <module>mod_autoindex</module>, la sous-requête n'hérite pas des | |
| variables d'environnement spécifiques à la requête. En outre, à cause | |
| des phases de l'API auxquelles <module>mod_setenvif</module> prend | |
| part, les directives <directive | |
| module="mod_setenvif">SetEnvIf</directive> ne sont pas évaluées | |
| séparément dans la sous-requête.</li> | |
| </ul> | |
| </section> | |
| </section> | |
| <section id="using"> | |
| <title>Utilisation des variables d'environnement</title> | |
| <related> | |
| <modulelist> | |
| <module>mod_authz_host</module> | |
| <module>mod_cgi</module> | |
| <module>mod_ext_filter</module> | |
| <module>mod_headers</module> | |
| <module>mod_include</module> | |
| <module>mod_log_config</module> | |
| <module>mod_rewrite</module> | |
| </modulelist> | |
| <directivelist> | |
| <directive module="mod_authz_core">Require</directive> | |
| <directive module="mod_log_config">CustomLog</directive> | |
| <directive module="mod_access_compat">Allow</directive> | |
| <directive module="mod_access_compat">Deny</directive> | |
| <directive module="mod_ext_filter">ExtFilterDefine</directive> | |
| <directive module="mod_headers">Header</directive> | |
| <directive module="mod_log_config">LogFormat</directive> | |
| <directive module="mod_rewrite">RewriteCond</directive> | |
| <directive module="mod_rewrite">RewriteRule</directive> | |
| </directivelist> | |
| </related> | |
| <note> | |
| <title>Alternative moderne : les expressions</title> | |
| <p>De nombreux exemples d’utilisation qui nécessitaient auparavant de | |
| définir et tester des variables d’environnement — par exemple les en-têtes | |
| conditionnels, le contrôle d’accès et la journalisation — peuvent | |
| maintenant être traités de manière plus directe en utilisant les | |
| expressions <directive module="core" type="section">If</directive> avec la | |
| fonction <code>reqenv</code>. Voir <a href="expr.html">Les expressions | |
| dans le serveur HTTP Apache</a> pour la syntaxe des expressions et la | |
| liste complète des <a href="expr.html#vars">variables</a> disponibles.</p> | |
| </note> | |
| <section id="cgi-scripts"> | |
| <title>Scripts CGI</title> | |
| <p>La communication d'informations aux scripts CGI constitue une des | |
| principales utilisations des variables d'environnement. Comme indiqué | |
| plus haut, l'environnement transmis aux scripts CGI comprend des | |
| méta-informations standards à propos de la requête, en plus des | |
| variables définies dans la configuration d'Apache httpd. Pour plus de | |
| détails, se référer au | |
| <a href="howto/cgi.html">tutoriel CGI</a>.</p> | |
| </section> | |
| <section id="ssi-pages"> | |
| <title>Pages SSI</title> | |
| <p>Les documents inclus côté serveur (SSI) traités par le filtre | |
| <code>INCLUDES</code> du module <module>mod_include</module>, | |
| peuvent afficher les | |
| variables d'environnement à l'aide de l'élément <code>echo</code>, | |
| et peuvent utiliser des variables d'environnement dans les éléments | |
| de contrôle de flux pour rendre certaines parties d'une page | |
| conditionnelles en fonction des caractéristiques de la requête. | |
| Apache httpd fournit aussi les variables d'environnement CGI standards | |
| aux pages SSI | |
| comme indiqué plus haut. Pour plus de détails, se référer au | |
| <a href="howto/ssi.html">tutoriel SSI</a>.</p> | |
| </section> | |
| <section id="access-control"> | |
| <title>Contrôle d'accès</title> | |
| <p>L'accès au serveur peut être contrôlé en fonction de | |
| variables d'environnement à l'aide des directives | |
| <code>Require env</code> et <code>Require not env</code>. | |
| En association avec la directive | |
| <directive module="mod_setenvif">SetEnvIf</directive>, cela confère une | |
| grande souplesse au contrôle d'accès au serveur en fonction des | |
| caractéristiques du client. Par exemple, vous pouvez utiliser ces | |
| directives pour interdire l'accès depuis un navigateur particulier | |
| (User-Agent). | |
| Pour des conditions plus complexes, <a href="expr.html"><code>Require | |
| expr</code></a> fournit une alternative qui permet d’évaluer des | |
| variables d’environnement en utilisant la fonction <code>reqenv</code> | |
| en combinaison avec d’autres propriétés de requête. | |
| </p> | |
| </section> | |
| <section id="logging"> | |
| <title>Enregistrement conditionnel des traces</title> | |
| <p>Les variables d'environnement peuvent être enregistrées dans le | |
| fichier de log des accès à l'aide de l'option <code>%e</code> de la | |
| directive <directive module="mod_log_config">LogFormat</directive>. | |
| En outre, la décision de tracer ou non les requêtes peut être prise | |
| en fonction de l'état de variables d'environnement en utilisant la | |
| forme conditionnelle de la directive | |
| <directive module="mod_log_config">CustomLog</directive>. En | |
| association avec la directive <directive module="mod_setenvif" | |
| >SetEnvIf</directive>, cela confère une grande souplesse au contrôle | |
| du traçage des requêtes. Par exemple, vous pouvez choisir de ne pas | |
| tracer les requêtes pour des noms de fichiers se terminant par | |
| <code>gif</code>, ou encore de ne tracer que les requêtes des clients | |
| n'appartenant pas à votre sous-réseau.</p> | |
| </section> | |
| <section id="response-headers"> | |
| <title>En-têtes de réponse conditionnels</title> | |
| <p>La directive <directive module="mod_headers">Header</directive> | |
| peut se baser sur la présence ou l'absence d'une variable | |
| d'environnement pour décider si un certain en-tête HTTP sera placé | |
| dans la réponse au client. Cela permet, par exemple, de n'envoyer un | |
| certain en-tête de réponse que si un en-tête correspondant est présent | |
| dans la requête du client.</p> | |
| </section> | |
| <section id="external-filter"> | |
| <title>Activation de filtres externes</title> | |
| <p>Les filtres externes configurés par le module | |
| <module>mod_ext_filter</module> à l'aide de la directive <directive | |
| module="mod_ext_filter">ExtFilterDefine</directive> peuvent être | |
| activés de manière conditionnelle en fonction d'une variable | |
| d'environnement à l'aide des options | |
| <code>disableenv=</code> et <code>enableenv=</code>.</p> | |
| </section> | |
| <section id="url-rewriting"> | |
| <title>Réécriture d'URL</title> | |
| <p>La forme <code>%{ENV:<em>variable</em>}</code> de | |
| <em>TestString</em> dans la | |
| directive <directive module="mod_rewrite">RewriteCond</directive> | |
| permet au moteur de réécriture du module | |
| <module>mod_rewrite</module> de prendre des | |
| décisions conditionnées par des variables d'environnement. | |
| Notez que les variables accessibles dans | |
| <module>mod_rewrite</module> sans le préfixe | |
| <code>ENV:</code> ne sont pas de véritables variables | |
| d'environnement. Ce sont plutôt des variables spécifiques à | |
| <module>mod_rewrite</module> | |
| qui ne sont pas accessibles pour les autres modules.</p> | |
| </section> | |
| </section> | |
| <section id="cgi"> | |
| <title>Variables d'environnement de CGI</title> | |
| <p>La spécification sur les CGIs (<rfc section="4.1">3875</rfc>) définit un | |
| certain nombre de méta-variables dont beaucoup sont affectées de leur valeur | |
| à partir des en-têtes HTTP. Apache httpd les met à disposition en tant que | |
| variables d’environnement pour les scripts CGI et d’autres mécanismes de | |
| traitement des requêtes. Elles ont été plus largement adoptées et | |
| constituent une méthode standard pour transmettre des informations entre le | |
| navigateur et le serveur, et entre les processus au sein du serveur. Nous en | |
| décrivons quelques unes ici. Pour une liste complète des variables de | |
| requête disponibles dans les <a href="expr.html">expressions</a> (parmi | |
| lesquelles <code>REQUEST_URI</code>, <code>REMOTE_ADDR</code>, | |
| <code>SERVER_NAME</code> et de nombreuses autres), voir le document de | |
| référence <a href="expr.html#vars">variables dans les expressions</a>.</p> | |
| <p>Consultez la spécification CGI pour plus de détails à propos des | |
| métavariables CGI standard.</p> | |
| <section id="query-string"> | |
| <title>QUERY_STRING</title> | |
| <p>La variable <code>QUERY_STRING</code> est définie avec tout ce | |
| qui apparaît après un point d'interrogation à la fin de l'URL d'une | |
| requête. Elle permet de transmettre des informations au serveur et peut | |
| être divisée en paires clé/valeur. L'encodage de la chaîne doit être de | |
| type URL.</p> | |
| <example> | |
| https://example.com/path/resource.php?key1=value1&key2=another%20value | |
| </example> | |
| <p>Dans cet exemple, la variable <code>QUERY_STRING</code> est définie | |
| avec tout ce qui suit le point d'interrogation, et l'application | |
| réceptrice (une application CGI ou un script PHP, par exemple) est | |
| chargée d'en extraire les paires clé/valeur.</p> | |
| </section> | |
| <section id="path-info"> | |
| <title>PATH_INFO</title> | |
| <p>La variable <glossary ref="pathinfo">PATH_INFO</glossary> est définie avec toute valeur qui | |
| apparaît après une ressource correspondante à la fin de l'URL, | |
| <code>QUERY_STRING</code> non comprise. Tout paraît plus clair avec un | |
| exemple :</p> | |
| <example> | |
| https://example.com/resource.php/additional/data?key1=value1 | |
| </example> | |
| <p>Dans cet exemple, <code>PATH_INFO</code> est définie avec la chaîne | |
| <code>/additional/data</code> et <code>QUERY_STRING</code> avec la | |
| chaîne <code>key1=value1</code>.</p> | |
| </section> | |
| </section> | |
| <section id="special"> | |
| <title>Variables d'environnement à usage spécial</title> | |
| <p>Des problèmes d'interopérabilité ont conduit à l'introduction de | |
| mécanismes permettant de modifier le comportement d'Apache httpd lorsqu'il | |
| dialogue avec certains clients. Afin de rendre ces mécanismes aussi | |
| souples que possible, ils sont invoqués en définissant des variables | |
| d'environnement, en général à l'aide de la directive | |
| <directive module="mod_setenvif">BrowserMatch</directive>, bien que les | |
| directives <directive module="mod_env">SetEnv</directive> et | |
| <directive module="mod_env">PassEnv</directive> puissent aussi être | |
| utilisées, par exemple.</p> | |
| <section id="downgrade"> | |
| <title>downgrade-1.0</title> | |
| <p>Cela force le traitement d'une requête comme une requête HTTP/1.0 | |
| même si elle a été rédigée dans un langage plus récent.</p> | |
| </section> | |
| <section id="force-gzip"> | |
| <title>force-gzip</title> | |
| <p>Si le filtre <code>DEFLATE</code> est activé, cette variable | |
| d'environnement ignorera les réglages accept-encoding de votre | |
| navigateur et enverra une sortie compressée inconditionnellement.</p> | |
| </section> | |
| <section id="force-no-vary"> | |
| <title>force-no-vary</title> | |
| <p>Cette variable entraîne la suppression de tout champ | |
| <code>Vary</code> des en-têtes de la réponse avant que cette dernière | |
| soit renvoyée au client. Certains clients n'interprètent pas ce champ | |
| correctement, et la définition de cette variable permet de contourner | |
| ce problème, mais implique aussi la définition de | |
| <strong>force-response-1.0</strong>.</p> | |
| </section> | |
| <section id="force-response"> | |
| <title>force-response-1.0</title> | |
| <p>Cette variable force une réponse en langage HTTP/1.0 aux clients | |
| qui envoient des requêtes dans le même langage. Elle fut implémentée à | |
| l'origine suite à des problèmes avec les mandataires d'AOL. Certains | |
| clients en langage HTTP/1.0 ne réagissent pas correctement face à une | |
| réponse en langage HTTP/1.1, et cette variable peut être utilisée pour | |
| assurer l'interopérabilité avec eux.</p> | |
| </section> | |
| <section id="gzip-only-text-html"> | |
| <title>gzip-only-text/html</title> | |
| <p>Positionnée à « 1 », cette variable désactive le filtre en sortie | |
| <code>DEFLATE</code> fourni par le module <module>mod_deflate</module> pour les | |
| types de contenu autres que <code>text/html</code>. Si vous préférez | |
| utiliser des fichiers compressés statiquement, | |
| <module>mod_negotiation</module> évalue aussi la variable (non | |
| seulement pour gzip, mais aussi pour tous les encodages autres que | |
| « identity »).</p> | |
| </section> | |
| <section id="no-gzip"><title>no-gzip</title> | |
| <p>Quand cette variable est définie, le filtre <code>DEFLATE</code> du | |
| module <module>mod_deflate</module> est désactivé, et | |
| <module>mod_negotiation</module> refusera de délivrer des ressources | |
| encodées.</p> | |
| </section> | |
| <section id="no-cache"><title>no-cache</title> | |
| <p><em>Disponible dans les versions 2.2.12 et ultérieures d'Apache httpd</em></p> | |
| <p>Lorsque cette variable est définie, | |
| <module>mod_cache</module> ne sauvegardera pas de réponse | |
| susceptible d'être mise en cache. Cette variable d'environnement | |
| n'a aucune incidence sur le fait qu'une réponse déjà enregistrée | |
| dans le cache soit utilisée ou non pour la requête courante.</p> | |
| </section> | |
| <section id="nokeepalive"> | |
| <title>nokeepalive</title> | |
| <p>Quand cette variable est définie, la directive | |
| <directive module="core">KeepAlive</directive> est désactivée.</p> | |
| </section> | |
| <section id="prefer-language"><title>prefer-language</title> | |
| <p>Cette variable modifie le comportement du module | |
| <module>mod_negotiation</module>. Si elle contient un symbole de | |
| langage (tel que <code>en</code>, <code>ja</code> | |
| ou <code>x-klingon</code>), <module>mod_negotiation</module> essaie de | |
| délivrer une variante dans ce langage. S'il n'existe pas de telle | |
| variante, le processus normal de | |
| <a href="content-negotiation.html">négociation</a> s'applique.</p> | |
| </section> | |
| <section id="redirect-carefully"> | |
| <title>redirect-carefully</title> | |
| <p>Cette variable force le serveur à être plus prudent lors de l'envoi | |
| d'une redirection au client. Elle est en général utilisée quand un | |
| client présente un problème connu avec les redirections. Elle fut | |
| implémentée à l'origine suite a un problème rencontré avec le logiciel | |
| WebFolders de Microsoft qui ne gère pas correctement les redirections | |
| vers des ressources de type répertoire via des méthodes DAV.</p> | |
| </section> | |
| <section id="suppress-error-charset"> | |
| <title>suppress-error-charset</title> | |
| <p>Quand Apache httpd génère une redirection en réponse à une requête client, | |
| la réponse inclut un texte destiné à être affiché au cas où le client ne | |
| suivrait pas, ou ne pourrait pas suivre automatiquement la redirection. | |
| Habituellement, Apache httpd marque ce texte en accord avec le jeu de caractères | |
| qu'il utilise, à savoir ISO-8859-1.</p> | |
| <p> Cependant, si la redirection fait référence à une page qui utilise un | |
| jeu de caractères différent, certaines versions de navigateurs obsolètes | |
| essaieront d'utiliser le jeu de caractères du texte de la redirection | |
| plutôt que celui de la page réelle. | |
| Cela peut entraîner, par exemple, un rendu incorrect du Grec.</p> | |
| <p>Si cette variable d'environnement est définie, Apache httpd omettra le jeu de | |
| caractères pour le texte de la redirection, et les navigateurs obsolètes | |
| précités utiliseront correctement celui de la page de destination.</p> | |
| <note type="warning"> | |
| <title>Note concernant la sécurité</title> | |
| <p>L'envoi de pages d'erreur sans spécifier un jeu de caractères peut | |
| conduire à des attaques de type « cross-site-scripting" pour les | |
| navigateurs qui ne respectent pas la spécification HTTP/1.1 (MSIE) et | |
| tentent de déduire le jeu de caractères à partir du contenu. De tels | |
| navigateurs peuvent être facilement trompés et utiliser le jeu de | |
| caractères UTF-7 ; les contenus des données en entrée de type UTF-7 | |
| (comme les URI de requête) ne seront alors plus protégés par les | |
| mécanismes d'échappement usuels conçus pour prévenir les attaques | |
| de type « cross-site-scripting".</p> | |
| </note> | |
| </section> | |
| <section id="proxy"><title>force-proxy-request-1.0, proxy-nokeepalive, proxy-sendchunked, | |
| proxy-sendcl, proxy-chain-auth, proxy-interim-response, proxy-initial-not-pooled</title> | |
| <p>Ces directives modifient le comportement protocolaire du module | |
| <module>mod_proxy</module>. Voir la documentation sur | |
| <module>mod_proxy</module> et <module>mod_proxy_http</module> pour plus de détails.</p> | |
| </section> | |
| <section id="cgilike"><title>ap_trust_cgilike_cl</title> | |
| <p><em>Disponible à partir de la version 2.4.59 du serveur HTTP Apache</em></p> | |
| <p>Cette variable permet à un script qui s'exécute dans un module de type CGI | |
| de fournir son propre en-tête de réponse HTTP Content-Length. Elle ne doit | |
| être définie que dans les sections de configuration qui contiennent des | |
| scripts de confiance.</p> | |
| </section> | |
| </section> | |
| <section id="redirect-vars"><title>Variables REDIRECT_</title> | |
| <p>Lorsqu'une redirection interne se produit — provoquée par une directive | |
| <directive module="core">ErrorDocument</directive>, par | |
| <module>mod_rewrite</module>, par une directive <directive | |
| module="mod_dir">FallbackResource</directive> ou par tout autre mécanisme de | |
| redirection interne — les variables d'environnement de la requête originelle | |
| sont transmises à la cible de la redirection avec le préfixe | |
| <code>REDIRECT_</code>.</p> | |
| <p>Deux variables supplémentaires sont toujours définies :</p> | |
| <dl> | |
| <dt><code>REDIRECT_URL</code></dt> | |
| <dd>Le chemin URL de la requête originelle avant la redirection interne. | |
| Cette variable n'est pas définie par un quelconque module spécifique, mais | |
| par le cœur du serveur.</dd> | |
| <dt><code>REDIRECT_STATUS</code></dt> | |
| <dd>Le code d'état HTTP qui a déclenché la redirection. Pour les | |
| documents d'erreur, il s'agit du code d'état d'erreur (par exemple 404). | |
| Pour les redirections internes de <module>mod_rewrite</module> ou de la | |
| directive <directive module="mod_dir">FallbackResource</directive>, il | |
| s'agit en général du code d'état 200.</dd> | |
| </dl> | |
| <p>Par exemple, si la valeur de <code>REQUEST_URI</code> était | |
| <code>/original/chemin</code> et qu'une redirection interne envoyait la | |
| requête à <code>/handler.php</code>, la cible de la redirection verrait | |
| <code>REDIRECT_URL=/original/path</code> et | |
| <code>REQUEST_URI=/handler.php</code>.</p> | |
| <p>Ces variables sont disponibles pour les scripts CGI, les pages SSI et | |
| dans les <a href="expr.html">expressions</a>. Pour plus d'informations à | |
| propos des variables REDIRECT_ dans le contexte des documents d'erreur, voir | |
| <a href="custom-error.html">Réponses aux erreurs personnalisées</a>.</p> | |
| <p>Ce renommage est particulièrement pertinent lorsqu’on utilise le drapeau | |
| <a href="rewrite/flags.html#flag_e">[E] flag</a> de | |
| <module>mod_rewrite</module> pour définir des variables, car les réécritures | |
| dans un contexte de répertoire déclenchent toujours une redirection interne. | |
| Voir cette section pour des exemples et des solutions de contournement.</p> | |
| </section> | |
| <section id="examples"> | |
| <title>Exemples</title> | |
| <section id="fixheader"> | |
| <title>Transmission du contenu d'en-têtes non valides aux scripts | |
| CGI</title> | |
| <p>Avec la version 2.4, Apache httpd est plus strict avec la conversion | |
| des en-têtes HTTP en variables d'environnement dans | |
| <module>mod_cgi</module> et d'autres modules : dans les versions | |
| précédentes, tout caractère non valable dans les noms d'en-têtes | |
| était tout simplement remplacé par un caractère '_', ce qui | |
| pouvait exposer à des attaques de type cross-site-scripting via | |
| injection d'en-têtes.</p> | |
| <p>Si vous devez prendre en charge un client qui envoie des en-têtes non | |
| conformes et si ceux-ci ne peuvent pas être corrigés, il existe | |
| une solution de contournement simple mettant en jeu les modules | |
| <module>mod_setenvif</module> et <module>mod_headers</module>, | |
| et permettant de prendre en compte ces en-têtes :</p> | |
| <highlight language="config"> | |
| # L'exemple suivant montre comment prendre en compte un en-tête<br /> | |
| # Accept_Encoding non conforme envoyé par un client. | |
| # | |
| SetEnvIfNoCase ^Accept.Encoding$ ^(.*)$ fix_accept_encoding=$1 | |
| RequestHeader set Accept-Encoding %{fix_accept_encoding}e env=fix_accept_encoding | |
| </highlight> | |
| </section> | |
| <section id="misbehaving"> | |
| <title>Modification du comportement protocolaire face à des clients | |
| réagissant de manière non conforme</title> | |
| <p>Les versions antérieures recommandaient l'ajout de ces lignes dans | |
| httpd.conf pour tenir compte de problèmes connus avec certains clients. | |
| Comme les clients concernés sont maintenant très peu utilisés, cet | |
| ajout n'est pratiquement plus nécessaire.</p> | |
| <highlight language="config"> | |
| # | |
| # The following directives modify normal HTTP response behavior. | |
| # The first directive disables keepalive for Netscape 2.x and browsers that | |
| # spoof it. There are known problems with these browser implementations. | |
| # The second directive is for Microsoft Internet Explorer 4.0b2 | |
| # which has a broken HTTP/1.1 implementation and does not properly | |
| # support keepalive when it is used on 301 or 302 (redirect) responses. | |
| # | |
| BrowserMatch "Mozilla/2" nokeepalive | |
| BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 | |
| # | |
| # The following directive disables HTTP/1.1 responses to browsers which | |
| # are in violation of the HTTP/1.0 spec by not being able to grok a | |
| # basic 1.1 response. | |
| # | |
| BrowserMatch "RealPlayer 4\.0" force-response-1.0 | |
| BrowserMatch "Java/1\.0" force-response-1.0 | |
| BrowserMatch "JDK/1\.0" force-response-1.0 | |
| </highlight> | |
| </section> | |
| <section id="no-img-log"> | |
| <title>Ne pas tracer les requêtes pour des images dans le fichier de | |
| trace des accès</title> | |
| <p>Dans cet exemple, les requêtes pour des images n'apparaissent pas | |
| dans le fichier de trace des accès. Il peut être facilement adapté pour | |
| empêcher le traçage de répertoires particuliers, ou de requêtes | |
| en provenance de certains hôtes.</p> | |
| <highlight language="config"> | |
| SetEnvIf Request_URI \.gif image-request | |
| SetEnvIf Request_URI \.jpg image-request | |
| SetEnvIf Request_URI \.png image-request | |
| CustomLog "logs/access_log" common env=!image-request | |
| </highlight> | |
| </section> | |
| <section id="image-theft"> | |
| <title>Prévention du « Vol d'image »</title> | |
| <p>Cet exemple montre comment empêcher les utilisateurs ne faisant pas | |
| partie de votre serveur d'utiliser des images de votre serveur comme | |
| images en ligne dans leurs pages. Cette configuration n'est pas | |
| recommandée, mais elle peut fonctionner dans des circonstances bien | |
| définies. Nous supposons que toutes vos images sont enregistrées dans | |
| un répertoire nommé <code>/web/images</code>.</p> | |
| <highlight language="config"> | |
| SetEnvIf Referer "^http://www\.example\.com/" local_referal | |
| # Autorise les navigateurs qui n'envoient aucune information de Referer | |
| SetEnvIf Referer "^$" local_referal | |
| <Directory "/web/images"> | |
| Require env local_referal | |
| </Directory> | |
| </highlight> | |
| <p>Pour plus d'informations sur cette technique, voir le tutoriel sur | |
| ServerWatch | |
| "<a href="https://www.serverwatch.com/guides/keeping-your-images-from-adorning-other-sites/" | |
| >Keeping Your Images from Adorning Other Sites</a>".</p> | |
| </section> | |
| </section> | |
| </manualpage> |