From: Lucien Gentis .html
et .cgi
:
Mais même dans ce cas, si vous n'avez besoin de noms DNS que dans
certains CGIs, vous pouvez effectuer l'appel à gethostbyname
@@ -190,14 +188,12 @@
symboliques. Un appel supplémentaire par élément du chemin du fichier.
Par exemple, si vous avez :
et si une requête demande l'URI /index.html
, Apache
effectuera un appel à lstat(2)
pour
@@ -208,20 +204,16 @@
vérifier la sécurité des liens symboliques, vous pouvez utiliser une
configuration du style :
Ceci évite au moins les vérifications supplémentaires pour le chemin
défini par
et qu'une requête demande l'URI /index.html
, Apache
tentera d'ouvrir /.htaccess
, /www/.htaccess
,
@@ -275,15 +265,11 @@
Il y a cependant un cas dans lequel vous pouvez accélérer le serveur.
Au lieu d'utiliser une directive générique comme :
utilisez une liste explicite d'options :
-où vous placez le choix courant en première position.
@@ -477,6 +463,12 @@ serveurs présentant un traffic important car il possède une empreinte mémoire plus petite que le MPM prefork. +Mais cette implémentation rudimentaire présente une sérieuse lacune. Rappelez-vous que les processus enfants exécutent cette boucle au même @@ -699,41 +681,31 @@ entrées dans la boucle interne. La boucle ressemble à ceci (les différences sont mises en surbrillance) :
-Les fonctions
accept_mutex_on
et accept_mutex_off
@@ -846,39 +818,31 @@
http_main.c
). La fonction ressemble approximativement à
ceci :
Ceci ajoute naturellement un peu de charge à la fin d'une connexion, mais s'avère nécessaire pour une implémentation fiable. Comme HTTP/1.1 diff --git a/docs/manual/misc/security_tips.xml.fr b/docs/manual/misc/security_tips.xml.fr index d47c9d4a4b..16ec6a58f4 100644 --- a/docs/manual/misc/security_tips.xml.fr +++ b/docs/manual/misc/security_tips.xml.fr @@ -1,7 +1,7 @@ - + @@ -336,11 +336,11 @@
Ajoutez dans le fichier de configuration du serveur
-Ceci interdit l'utilisation des fichiers .htaccess
dans
tous les répertoires, sauf ceux pour lesquels c'est explicitement
@@ -369,28 +369,28 @@
fichiers. Pour l'éviter, ajoutez le bloc suivant à la configuration
de votre serveur :
ceci va interdire l'accès par défaut à tous les fichiers du système de
fichiers. Vous devrez ensuite ajouter les blocs
Portez une attention particulière aux interactions entre les directives
Dans le second exemple, plutôt que de rejeter la requête, nous affichons une autre image à la place.
-Dans le troisième exemple, nous redirigeons la requête vers une image appartenant à un autre site.
+De tous ces exemples, les deux derniers semblent les plus efficaces pour faire en sorte que les gens arrêtent de référencer vos images à chaud, car il ne verront pas les images @@ -125,14 +126,12 @@ RewriteRule \.(gif|jpg|png)$ http://other.example.com/image.gif simplement interdire l'accès à la ressource, vous pouvez y parvenir sans utiliser mod_rewrite :
-Notez qu'il existe des méthodes d'exclusion qui n'utilisent
pas mod_rewrite. Notez aussi que toute technique qui repose sur
le contenu de la chaîne client USER_AGENT
peut être
- contournée très facilement car cette chaîne de caractères peut
- être modifiée.
On utilise un jeu de règles qui spécifie le répertoire à
protéger, ainsi que la chaîne client USER_AGENT
qui
- identifie le robot indésirable ou envahissant.
Dans cet exemple, nous bloquons un robot nommé
Vilain_Robot
pour le répertoire
@@ -178,11 +176,11 @@ RewriteRule \.(gif|jpg|png)$ http://other.example.com/image.gif
seulement depuis une source particulière, vous pouvez aussi
spécifier un intervalle d'adresses IP.
Comme indiqué plus haut, il est aisé de contourner cette technique, simplement en modifiant le contenu de l'en-tête @@ -230,13 +229,13 @@ RewriteRule ^/secret/fichiers/ - [F]
Le jeu de règles suivant utilise un fichier de correspondances pour associer chaque Referer à une cible de redirection.
-Le fichier de correspondances contient les cibles de redirection associées à chaque Referer, ou, si nous voulons simplement rediriger les requêtes vers leur Referer, un "-" est inscrit dans le fichier de correspondances :
-L'opérateur -U
permet de déterminer si la chaîne
de test (dans ce cas REQUEST_URI
) est une URL valide.
@@ -185,12 +182,11 @@ RewriteRule ^(.+)\.html$ /regenerate_page.cgi [PT,L]
module="mod_rewrite">RewriteMap et une liste de
serveurs.
liste-serveurs.txt
contiendra la liste des serveurs :
Nous appelons maintenant cette URL
@@ -268,7 +264,7 @@ RewriteRule ^(/[uge]/[^/]+/?.*):refresh /interne/cgi/apache/nph-refresh?f=$ écrive habituellement dans ces cas "laissé à la charge du lecteur à titre d'exercice", ;-) je vous l'offre, aussi. -+#!/sw/bin/perl ## ## nph-refresh -- script NPH/CGI pour l'actualisation automatique de @@ -278,61 +274,61 @@ RewriteRule ^(/[uge]/[^/]+/?.*):refresh /interne/cgi/apache/nph-refresh?f=$ $| = 1; # éclate la variable QUERY_STRING -@pairs = split(/&/, $ENV{'QUERY_STRING'}); +@pairs = split( /&/, $ENV{'QUERY_STRING'} ); foreach $pair (@pairs) { -($name, $value) = split(/=/, $pair); -$name =~ tr/A-Z/a-z/; -$name = 'QS_' . $name; -$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; -eval "\$$name = \"$value\""; + ( $name, $value ) = split( /=/, $pair ); + $name =~ tr/A-Z/a-z/; + $name = 'QS_' . $name; + $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; + eval "\$$name = \"$value\""; } -$QS_s = 1 if ($QS_s eq ''); -$QS_n = 3600 if ($QS_n eq ''); -if ($QS_f eq '') { -print "HTTP/1.0 200 OK\n"; -print "Content-type: text/html\n\n"; -print "<b>ERREUR</b>: Aucun fichier fourni\n"; -exit(0); +$QS_s = 1 if ( $QS_s eq '' ); +$QS_n = 3600 if ( $QS_n eq '' ); +if ( $QS_f eq '' ) { + print "HTTP/1.0 200 OK\n"; + print "Content-type: text/html\n\n"; + print "<b>ERROR</b>: No file given\n"; + exit(0); } -if (! -f $QS_f) { -print "HTTP/1.0 200 OK\n"; -print "Content-type: text/html\n\n"; -print "<b>ERREUR</b>: Fichier $QS_f non trouvé\n"; -exit(0); +if ( !-f $QS_f ) { + print "HTTP/1.0 200 OK\n"; + print "Content-type: text/html\n\n"; + print "<b>ERROR</b>: File $QS_f not found\n"; + exit(0); } sub print_http_headers_multipart_begin { -print "HTTP/1.0 200 OK\n"; -$bound = "ThisRandomString12345"; -print "Content-type: multipart/x-mixed-replace;boundary=$bound\n"; -&print_http_headers_multipart_next; + print "HTTP/1.0 200 OK\n"; + $bound = "ThisRandomString12345"; + print "Content-type: multipart/x-mixed-replace;boundary=$bound\n"; + &print_http_headers_multipart_next; } sub print_http_headers_multipart_next { -print "\n--$bound\n"; + print "\n--$bound\n"; } sub print_http_headers_multipart_end { -print "\n--$bound--\n"; + print "\n--$bound--\n"; } sub displayhtml { -local($buffer) = @_; -$len = length($buffer); -print "Content-type: text/html\n"; -print "Content-length: $len\n\n"; -print $buffer; + local ($buffer) = @_; + $len = length($buffer); + print "Content-type: text/html\n"; + print "Content-length: $len\n\n"; + print $buffer; } sub readfile { -local($file) = @_; -local(*FP, $size, $buffer, $bytes); -($x, $x, $x, $x, $x, $x, $x, $size) = stat($file); -$size = sprintf("%d", $size); -open(FP, "<$file"); -$bytes = sysread(FP, $buffer, $size); -close(FP); -return $buffer; + local ($file) = @_; + local ( *FP, $size, $buffer, $bytes ); + ( $x, $x, $x, $x, $x, $x, $x, $size ) = stat($file); + $size = sprintf( "%d", $size ); + open( FP, "<$file" ); + $bytes = sysread( FP, $buffer, $size ); + close(FP); + return $buffer; } $buffer = &readfile($QS_f); @@ -340,30 +336,30 @@ $buffer = &readfile($QS_f); &displayhtml($buffer); sub mystat { -local($file) = $_[0]; -local($time); + local ($file) = $_[0]; + local ($time); -($x, $x, $x, $x, $x, $x, $x, $x, $x, $mtime) = stat($file); -return $mtime; + ( $x, $x, $x, $x, $x, $x, $x, $x, $x, $mtime ) = stat($file); + return $mtime; } $mtimeL = &mystat($QS_f); -$mtime = $mtime; -for ($n = 0; $n < $QS_n; $n++) { -while (1) { - $mtime = &mystat($QS_f); - if ($mtime ne $mtimeL) { - $mtimeL = $mtime; - sleep(2); - $buffer = &readfile($QS_f); - &print_http_headers_multipart_next; - &displayhtml($buffer); - sleep(5); - $mtimeL = &mystat($QS_f); - last; +$mtime = $mtime; +for ( $n = 0 ; $n & lt ; $QS_n ; $n++ ) { + while (1) { + $mtime = &mystat($QS_f); + if ( $mtime ne $mtimeL ) { + $mtimeL = $mtime; + sleep(2); + $buffer = &readfile($QS_f); + &print_http_headers_multipart_next; + &displayhtml($buffer); + sleep(5); + $mtimeL = &mystat($QS_f); + last; + } + sleep($QS_s); } - sleep($QS_s); -} } &print_http_headers_multipart_end; @@ -371,7 +367,7 @@ while (1) { exit(0); ##EOF## -
On utilise le jeu de règles suivant pour développer les URLs avec tilde selon l'organisation structurée précédente.
-Avec cet exemple, l'URL foo.html
renvoie
le contenu de foo.jour.html
durant le
@@ -483,7 +478,8 @@ RewriteRule ^foo\.html$ foo.nuit.html
la fenêtre de temps configurée. On peut utiliser
Utiliser le drapeau [E] pour définir une variable d'environnement.
-Plus loin dans votre jeu de règles, vous pouvez vérifier le contenu de cette variable d'environnement via une directive RewriteCond :
-Pour rediriger les URLs sous /un
vers
http://un.example.com/
, utilisez cette définition :
Pour rediriger les URLs http
vers https
,
utilisez cette définition :
L'utilisation de la directive RewriteRule
pour accomplir
cette tâche peut se justifier s'il existe d'autres directives
@@ -144,7 +141,8 @@ possible d'effectuer cette mise en correspondance avec
Alias
pour des raisons de simplicité et de performances.
@@ -176,7 +174,7 @@ créer un grand nombre de serveurs virtuels dynamiquement.
L'utilisation de .htaccess
.
Voir le document création de serveurs virtuels @@ -191,9 +189,9 @@ cela semble être tout de même la meilleure approche.
href="flags.html#flag_p">[P] qui permet de faire passer les URIs réécrits parCependant, dans les nombreux cas où aucune correspondance au modèle
n'est vraiment nécessaire, comme dans l'exemple ci-dessus, il est
@@ -201,9 +199,9 @@ préférable d'utiliser la directive
Que vous utilisiez
Vous devrez cependant tout de même utiliser RewriteRule
lorsque d'autres RewriteRule
s se trouvent dans la même portée,
@@ -238,14 +236,14 @@ d'hôte canonique, tel que www.example.com
au lieu de
directive
On peut utiliser cette technique dans de nombreux scénarios courants
-en remplacement de
On peut utiliser cette technique dans de nombreux scénarios courant
+pour remplacer
Les drapeaux ont tous une forme courte, comme CO
, ainsi
qu'une forme longue, comme cookie
. Certains drapeaux
@@ -86,9 +84,7 @@ ces dernières sont appliquées. Avec le drapeau B, les caract&egrav
non-alphanumériques des références arrières seront échappés. Considérons
par exemple cette règle :
Soit le terme de recherche 'x & y/z' ; un navigateur va le coder en 'x%20%26%20y%2Fz', transformant la requête en @@ -182,10 +178,10 @@ fonctionnalité.
Voici un exemple :
-Dans l'exemple ci-dessus, la règle ne réécrit pas la requête. La cible de réécriture "-" @@ -302,9 +298,7 @@ Forbidden.
La règle suivante va interdire la téléchargement de fichiers
.exe
depuis votre serveur.
Cet exemple utilise la syntaxe "-" pour la cible de réécriture, ce qui signifie que l'URI de la requête n'est pas modifié. Il n'y a aucune @@ -324,9 +318,7 @@ disponible auparavant ne l'est plus actuellement.
Comme dans le cas du drapeau [F], on utilise en général la syntaxe "-" pour la cible de réécriture lorsqu'on utilise le drapeau [G] :
-Lorsqu'on utilise [G], [L] est implicite - c'est à dire que la réponse est renvoyée immédiatement, et aucune autre règle n'est évaluée.
@@ -339,9 +331,8 @@ spécifié. Par exemple, on peut utiliser ce drapeau pour forcer l'interprétation de tous les fichiers sans extension par le gestionnaire php : -
L'expression rationnelle ci-dessus - !\.
- correspond à
@@ -354,9 +345,9 @@ faire en sorte que les fichiers .php
soient
affichés par mod_php
dans le cas où ils font
l'objet d'une requête avec l'extension .phps
:
L'expression rationnelle ci-dessus -
@@ -415,11 +406,11 @@ module="mod_rewrite">RewriteCond permet de s'assurer que si
la requête concerne déjà index.php
, la directive
Vous pouvez vous représenter ce traitement comme une boucle
while
: tant que le modèle de la règle correspond (c'est à
@@ -460,9 +449,7 @@ transmise par Apache à votre serveur d'images dédié. La cor
insensible à la casse, si bien que par exemple, .jpg
aussi
bien que .JPG
seront acceptés.
Dans l'exemple ci-dessus, /anchor/xyz
est réécrit en
@@ -518,9 +503,7 @@ mandataire. Par exemple, si vous voulez que toutes les requêtes d'images
soient traitées par un serveur d'images annexe, vous pouvez utiliser
une règle de ce style :
L'utilisation du drapeau [P] provoque aussi l'effet du drapeau [L] -
autrement dit, la requête est immédiatement envoyée au mandataire, et
@@ -576,10 +559,10 @@ vous devez utiliser le drapeau [PT] pour être sûr que l'
Dans l'exemple précédent, en l'absence du drapeau [PT], l'Alias aurait @@ -611,9 +594,8 @@ Avec le drapeau [QSA], les chaînes de requête peuvent être com
Considérons la règle suivante :
-Avec le drapeau [QSA], une requête pour
/pages/123?one=two
sera réécrite en
@@ -694,17 +676,18 @@ Ceci peut s'interpréter comme une instruction
l'exemple suivant, nous ne voulons exécuter la règle
Cette technique trouve son utilité dans le fait qu'une directive
RewriteRule
avec le drapeau [Skip]. Cette
d'élaborer des pseudo-constructions if-then-else : la dernière règle du
bloc then contiendra skip=N
, où N est le nombre de règles
contenues dans le bloc else :
Il est probablement plus aisé de définir ce genre de configuration
via les directives
Ou encore, si vous possédez une caméra qui produit des fichiers images jpeg sans extension, vous pouvez forcer le renvoi de ces images avec le type MIME correct en se basant sur le nom du fichier :
-Notez cependant qu'il s'agit d'un exemple trivial, et que le problème
aurait pu être résolu en utilisant à la place la directive
Le Modèle est toujours une expression -rationnelle comparée au chemin de l'URL de la requête entrante (la +
Le Modèle est une expression +rationnelle. Au sein de la première règle de réécriture, ou jusqu'à +ce qu'une substitution survienne, elle est comparée au chemin de +l'URL de la requête entrante (la partie située après le nom d'hôte mais avant tout point d'interrogation qui indique le début d'une chaîne de paramètres de requête) ou, dans un contexte de répertoire, au chemin de la -requête relativement au répertoire pour lequel la règle est définie..
+requête relativement au répertoire pour lequel la +règle est définie. Lorsqu'une substitution a eu lieu, les +règles suivantes effectuent leurs comparaisons par rapport à la valeur +substituée.
Ceci peut faire correspondre une requête à toute localisation voulue de
votre système de fichiers, un peu comme la directive
Si la directive /usr/local/apache2/htdocs
, cette règle va faire
correspondre les requêtes pour http://example.com/foo
au
@@ -246,9 +251,9 @@ chemin /usr/local/apache2/htdocs/bar
.
Ceci informe le client qu'il doit effectuer une nouvelle requête vers l'URL spécifiée.
La chaîne de Substitution peut aussi contenir des références arrières vers des parties du chemin d'URL entrant correspondant au Modèle. Considérons ce qui suit :
-La variable $1
sera remplacée par tout texte
correspondant à l'expression située entre les parenthèses dans le
Modèle. Par exemple, une requête pour
@@ -280,9 +285,9 @@ présence d'un ou plusieurs drapeaux en fin de règle. Par exemple,
conditions de correspondance d'une règle peuvent être rendues
insensibles à la casse par la présence du drapeau [NC]
:
Pour une liste des drapeaux disponibles, leurs significations, et des exemples, voir le document Drapeaux de @@ -312,10 +317,10 @@ correspondance est évaluée.
Par exemple, pour renvoyer toutes les requêtes en provenance d'une certaine tranche d'adresses IP vers un autre serveur, vous pouvez utiliser :
-Si vous spécifiez plus d'une directive
Notez que le point d'exclamation indique une correspondance négative ; ainsi, la règle n'est appliquée que si le cookie ne contient pas "go"
@@ -339,10 +344,10 @@ de la règle%1
, %2
, etc... Par
exemple, ce qui suit va diriger la requête vers un répertoire différent
en fonction du nom d'hôte utilisé pour accéder au site :
-Si la requête concernait http://example.com/foo/bar
,
alors %1
contiendrait example.com
et
$1
contiendrait foo/bar
.
Ce jeu de règles rewrite vous permet d'utiliser des hyperliens de la
forme <a href="document.html_SSL">
pour passer en HTTPS
@@ -269,10 +269,10 @@ fins de test ?
-keyout server.key
Ces fichiers seront utilisés comme suit dans votre
httpd.conf
:
-
- SSLCertificateFile /chemin/vers/server.crt - SSLCertificateKeyFile /chemin/vers/server.key -+
server.key
n'a
pas de mot de passe. Pour ajouter un mot de passe à la clé, vous
@@ -352,10 +352,10 @@ fins de test ?
server.key
et server.crt
. Ils sont précisés dans
votre fichier httpd.conf
comme suit :
- - SSLCertificateFile /chemin/vers/server.crt - SSLCertificateKeyFile /chemin vers/server.key -+
server.csr
n'est plus nécessaire.
il existe d'autres solutions alternatives comme :
@@ -764,11 +764,11 @@ versions de MSIE. Vous pouvez contourner ces problèmes en interdisant ou l'envoi de messages de notification de fermeture de session SSL aux clients MSIE. Pour cela, vous pouvez utiliser la directive suivante dans votre section d'hôte virtuel avec support SSL : -En outre, certaines versions de MSIE ont des problèmes avec des algorithmes de chiffrement particuliers. Hélas, il n'est pas possible d'apporter une solution spécifique à MSIE pour ces diff --git a/docs/manual/ssl/ssl_howto.xml.fr b/docs/manual/ssl/ssl_howto.xml.fr index 80cef908e2..723ca982bf 100644 --- a/docs/manual/ssl/ssl_howto.xml.fr +++ b/docs/manual/ssl/ssl_howto.xml.fr @@ -1,7 +1,7 @@ - + @@ -42,17 +42,15 @@ manière plus approfondie.
Votre configuration SSL doit comporter au moins les directives suivantes :
-Les directives suivantes ne permettent que les chiffrements de plus haut niveau :
-ca.crt
), et d'authentifier les clients à l'aide de ces
certificats.
- +-SSLVerifyClient none <Directory /usr/local/apache2/htdocs/secure/area> - SSLVerifyClient require -SSLVerifyDepth 5 -SSLCACertificateFile conf/ssl.crt/ca.crt -SSLCACertificatePath conf/ssl.crt -SSLOptions +FakeBasicAuth -SSLRequireSSL -AuthName "Snake Oil Authentication" -AuthType Basic -AuthBasicProvider file -AuthUserFile /usr/local/apache2/conf/httpd.passwd -Require valid-user -</Directory>
Le mot de passe utilisé dans cet exemple correspond à la chaîne de caractères "password" chiffrée en DES. Voir la documentation de la @@ -230,10 +228,9 @@ Require valid-user >SSLRequire, comme suit :
-+-SSLVerifyClient none <Directory /usr/local/apache2/htdocs/secure/area> - SSLVerifyClient require SSLVerifyDepth 5 SSLCACertificateFile conf/ssl.crt/ca.crt @@ -242,8 +239,8 @@ SSLVerifyClient none SSLRequireSSL SSLRequire %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \ and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} -</Directory>
+-SSLCACertificateFile conf/ssl.crt/company-ca.crt <Directory /usr/local/apache2/htdocs> -# En dehors de subarea, seul l'accès depuis l'intranet est autorisé -Order deny,allow -Deny from all -Allow from 192.168.1.0/24 +# En dehors de subarea, seul l'accès depuis l'intranet est +# autorisé + Order deny,allow + Deny from all + Allow from 192.168.1.0/24 </Directory> <Directory /usr/local/apache2/htdocs/subarea> # Dans subarea, tout accès depuis l'intranet est autorisé -# mais depuis l'Internet, seul l'accès par HTTPS + chiffrement fort - + Mot de passe +# mais depuis l'Internet, seul l'accès par HTTPS + chiffrement fort + Mot de passe # ou HTTPS + chiffrement fort + certificat client n'est autorisé. # Si HTTPS est utilisé, on s'assure que le niveau de chiffrement est fort. # Autorise en plus les certificats clients comme une alternative à # l'authentification basique. -SSLVerifyClient optional -SSLVerifyDepth 1 -SSLOptions +FakeBasicAuth +StrictRequire -SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128 - -# ON oblige les clients venant d'Internet à utiliser HTTPS -RewriteEngine on -RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$ -RewriteCond %{HTTPS} !=on -RewriteRule . - [F] - -# On permet l'accès soit sur les critères réseaux, soit par authentification Basique -Satisfy any - -# Contrôle d'accès réseau -Order deny,allow -Deny from all -Allow 192.168.1.0/24 - -# Configuration de l'authentification HTTP Basique -AuthType basic -AuthName "Protected Intranet Area" -AuthBasicProvider file -AuthUserFile conf/protected.passwd -Require valid-user -</Directory>