From: Daniel Gruno .html
et .cgi
:
- HostnameLookups off
- <Files ~ "\.(html|cgi)$">
-
- HostnameLookups on
-
- </Files>
-
+HostnameLookups off +<Files ~ "\.(html|cgi)$"> + HostnameLookups on +</Files> ++
Mais même dans ce cas, si vous n'avez besoin de noms DNS que dans
certains CGIs, vous pouvez effectuer l'appel à gethostbyname
@@ -179,14 +178,13 @@
symboliques. Un appel supplémentaire par élément du chemin du fichier.
Par exemple, si vous avez :
- DocumentRoot /www/htdocs
- <Directory />
-
- Options SymLinksIfOwnerMatch
-
- </Directory>
-
+DocumentRoot /www/htdocs +<Directory /> + Options SymLinksIfOwnerMatch +</Directory> ++
et si une requête demande l'URI /index.html
, Apache
effectuera un appel à lstat(2)
pour
@@ -197,20 +195,17 @@
vérifier la sécurité des liens symboliques, vous pouvez utiliser une
configuration du style :
- DocumentRoot /www/htdocs
- <Directory />
-
- Options FollowSymLinks
-
- </Directory>
-
- <Directory /www/htdocs>
-
- Options -FollowSymLinks +SymLinksIfOwnerMatch
-
- </Directory>
-
+DocumentRoot /www/htdocs +<Directory /> + Options FollowSymLinks +</Directory> + +<Directory /www/htdocs> + Options -FollowSymLinks +SymLinksIfOwnerMatch +</Directory> ++
Ceci évite au moins les vérifications supplémentaires pour le chemin
défini par DocumentRoot
. Notez que
@@ -235,14 +230,13 @@
pour chaque élément du chemin du fichier demandé. Par exemple, si vous
avez :
- DocumentRoot /www/htdocs
- <Directory />
-
- AllowOverride all
-
- </Directory>
-
+DocumentRoot /www/htdocs +<Directory /> + AllowOverride all +</Directory> ++
et qu'une requête demande l'URI /index.html
, Apache
tentera d'ouvrir /.htaccess
, /www/.htaccess
,
@@ -264,15 +258,17 @@
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 :
+
DirectoryIndex index
-
utilisez une liste explicite d'options :
-
+
DirectoryIndex index.cgi index.pl index.shtml index.html
-
où vous placez le choix courant en première position.
@@ -617,39 +613,30 @@ (ces exemples ne sont pas extraits du code d'Apache, ils ne sont proposés qu'à des fins pédagogiques) : -
- for (;;) {
-
- for (;;) {
-
- fd_set accept_fds;
-
- FD_ZERO (&accept_fds);
- for (i = first_socket; i <= last_socket; ++i) {
-
- FD_SET (i, &accept_fds);
-
- }
- rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);
- if (rc < 1) continue;
- new_connection = -1;
- for (i = first_socket; i <= last_socket; ++i) {
-
- if (FD_ISSET (i, &accept_fds)) {
-
- new_connection = accept (i, NULL, NULL);
- if (new_connection != -1) break;
-
- }
-
- }
- if (new_connection != -1) break;
-
- }
- process the new_connection;
-
- }
-
+for (;;) { + for (;;) { + fd_set accept_fds; + + FD_ZERO (&accept_fds); + for (i = first_socket; i <= last_socket; ++i) { + FD_SET (i, &accept_fds); + } + rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL); + if (rc < 1) continue; + new_connection = -1; + for (i = first_socket; i <= last_socket; ++i) { + if (FD_ISSET (i, &accept_fds)) { + new_connection = accept (i, NULL, NULL); + if (new_connection != -1) break; + } + } + if (new_connection != -1) break; + } + process the new_connection; +} ++
Mais cette implémentation rudimentaire présente une sérieuse lacune. Rappelez-vous que les processus enfants exécutent cette boucle au même @@ -688,41 +675,32 @@ entrées dans la boucle interne. La boucle ressemble à ceci (les différences sont mises en surbrillance) :
-
- for (;;) {
-
- accept_mutex_on ();
- for (;;) {
-
- fd_set accept_fds;
-
- FD_ZERO (&accept_fds);
- for (i = first_socket; i <= last_socket; ++i) {
-
- FD_SET (i, &accept_fds);
-
- }
- rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);
- if (rc < 1) continue;
- new_connection = -1;
- for (i = first_socket; i <= last_socket; ++i) {
-
- if (FD_ISSET (i, &accept_fds)) {
-
- new_connection = accept (i, NULL, NULL);
- if (new_connection != -1) break;
-
- }
-
- }
- if (new_connection != -1) break;
-
- }
- accept_mutex_off ();
- process the new_connection;
-
- }
-
+for (;;) { + accept_mutex_on (); + for (;;) { + fd_set accept_fds; + + FD_ZERO (&accept_fds); + for (i = first_socket; i <= last_socket; ++i) { + FD_SET (i, &accept_fds); + } + rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL); + if (rc < 1) continue; + new_connection = -1; + for (i = first_socket; i <= last_socket; ++i) { + if (FD_ISSET (i, &accept_fds)) { + new_connection = accept (i, NULL, NULL); + if (new_connection != -1) break; + } + } + if (new_connection != -1) break; + } + accept_mutex_off (); + process the new_connection; +} ++
Les fonctions
accept_mutex_on
et accept_mutex_off
@@ -834,39 +812,32 @@
http_main.c
). La fonction ressemble approximativement à
ceci :
- void lingering_close (int s)
- {
-
- char junk_buffer[2048];
-
- /* shutdown the sending side */
- shutdown (s, 1);
-
- signal (SIGALRM, lingering_death);
- alarm (30);
-
- for (;;) {
-
- select (s for reading, 2 second timeout);
- if (error) break;
- if (s is ready for reading) {
-
- if (read (s, junk_buffer, sizeof (junk_buffer)) <= 0) {
-
- break;
-
- }
- /* just toss away whatever is here */
-
- }
-
- }
-
- close (s);
-
- }
-
+void lingering_close (int s) +{ + char junk_buffer[2048]; + + /* shutdown the sending side */ + shutdown (s, 1); + + signal (SIGALRM, lingering_death); + alarm (30); + + for (;;) { + select (s for reading, 2 second timeout); + if (error) break; + if (s is ready for reading) { + if (read (s, junk_buffer, sizeof (junk_buffer)) <= 0) { + break; + } + /* just toss away whatever is here */ + } + } + + close (s); +} ++
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.html.fr b/docs/manual/misc/security_tips.html.fr index eb563503cb7..e4ee43bea04 100644 --- a/docs/manual/misc/security_tips.html.fr +++ b/docs/manual/misc/security_tips.html.fr @@ -345,11 +345,12 @@
Ajoutez dans le fichier de configuration du serveur
-
- <Directory />
- AllowOverride None
- </Directory>
-
+<Directory /> + AllowOverride None +</Directory> ++
Ceci interdit l'utilisation des fichiers .htaccess
dans
tous les répertoires, sauf ceux pour lesquels c'est explicitement
@@ -378,28 +379,30 @@
fichiers. Pour l'éviter, ajoutez le bloc suivant à la configuration
de votre serveur :
- <Directory />
- Order Deny,Allow
- Deny from all
- </Directory>
-
+<Directory /> +Order Deny,Allow +Deny from all +</Directory> ++
ceci va interdire l'accès par défaut à tous les fichiers du système de
fichiers. Vous devrez ensuite ajouter les blocs
Directory
appropriés correspondant
aux répertoires auxquels vous voulez autorisez l'accès. Par exemple,
- <Directory /usr/users/*/public_html>
- Order Deny,Allow
- Allow from all
- </Directory>
- <Directory /usr/local/httpd>
- Order Deny,Allow
- Allow from all
- </Directory>
-
+<Directory /usr/users/*/public_html> + Order Deny,Allow + Allow from all +</Directory> +<Directory /usr/local/httpd> + Order Deny,Allow + Allow from all +</Directory> ++
Portez une attention particulière aux interactions entre les directives
Location
et
@@ -414,9 +417,10 @@
fortement d'inclure la ligne suivante dans le fichier de configuration de
votre serveur :
+
UserDir disabled root
-
- <Files ".ht*">
- Order allow,deny
- Deny from all
- </Files>
-
+<Files ".ht*"> + Order allow,deny + Deny from all +</Files> ++
Description: | Remplace l'adresse IP et le nom d'hôte apparents du client
pour la requête par l'adresse IP présentée par un mandataire ou un
répartiteur de charge via les en-têtes de la requête.
diff --git a/docs/manual/mod/mod_remoteip.xml.meta b/docs/manual/mod/mod_remoteip.xml.meta
index 771852e80cd..1a7c78a9f14 100644
--- a/docs/manual/mod/mod_remoteip.xml.meta
+++ b/docs/manual/mod/mod_remoteip.xml.meta
@@ -8,6 +8,6 @@
![]() ![]() Voir aussi
Introduction@@ -97,9 +97,10 @@ ces derni 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 @@ -192,10 +193,11 @@ fonctionnalit Voici un exemple : -
Dans l'exemple ci-dessus, la règle ne réécrit pas la requête. La cible de réécriture "-" @@ -282,10 +284,11 @@ avec une valeur de '1' si l'URI de la requ image. Cette variable d'environnement est ensuite utilisée pour exclure une telle requête du journal des accès. -
Notez que le même effet peut être obtenu à l'aide de la directive
La règle suivante va interdire la téléchargement de fichiers
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 @@ -334,9 +338,10 @@ 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. @@ -349,9 +354,10 @@ sp l'interprétation de tous les fichiers sans extension par le gestionnaire php : -
L'expression rationnelle ci-dessus -
L'expression rationnelle ci-dessus -
@@ -419,11 +426,12 @@ de requ
directive
N|next@@ -440,9 +448,10 @@ suivant, chaque occurence de A sera remplac ceci jusqu'il n'y ait plus de A à remplacer. -
Vous pouvez vous représenter ce traitement comme une boucle
NE|noescape@@ -474,9 +484,10 @@ RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com$1 [P,NC] hexadécimal. Le drapeau [NE] permet d'éviter cette conversion. -
Dans l'exemple ci-dessus,
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
@@ -572,10 +584,11 @@ Si par exemple, vous avez un
Dans l'exemple précédent, en l'absence du drapeau [PT], l'Alias aurait @@ -605,9 +618,10 @@ Avec le drapeau [QSA], les cha Considérons la règle suivante : -
Avec le drapeau [QSA], une requête pour
Cette technique trouve son utilité dans le fait qu'une directive
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 |
---|