<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/22"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/22/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/22/atom/feed</id>
  <updated>2008-10-06T11:32:48+02:00</updated>
  <entry>
    <title>Protéger ses données sur un serveur Apache</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/22" />
    <id>http://artisan.karma-lab.net/node/22</id>
    <published>2008-05-04T18:55:21+02:00</published>
    <updated>2008-10-06T11:32:48+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Sécurité" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
Protéger ses données exposées sur le WEB n'est pas toujours évident et comporte quelques pièges qui donnent une illusion de sécurité alors qu'il n'en est rien. Ce tutoriel ne va pas, loin de là, couvrir tous les aspects du sujet, mais juste tenter d'apporter quelques bases permettant de se protéger à travers quelques cas pratiques. 
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
Protéger ses données exposées sur le WEB n'est pas toujours évident et comporte quelques pièges qui donnent une illusion de sécurité alors qu'il n'en est rien. Ce tutoriel ne va pas, loin de là, couvrir tous les aspects du sujet, mais juste tenter d'apporter quelques bases permettant de se protéger à travers quelques cas pratiques. 
</p>
<!--break-->


	<a name='chapter_1'></a>
  <h2>.htaccess vs configuration</h2>
	
<p>
Pour tout ce qui suit, ou presque, existe deux méthodes de paramétrages. La plus simple consiste à placer dans le dossier web à protéger un fichier <kbd>.htaccess</kbd> qui contiendra une configuration <u>spécifique à ce dossier</u>. Le contenu d'un tel dossier pourrait être :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  AuthType Basic<br />
AuthName &quot;Accès protégé&quot;<br />
AuthUserFile &quot;/mon_chemin_vers_mots_de_passe/passwd&quot;<br />
require valid-user
  </div>
  <div class='caption'>Exemple de fichier .htaccess</div>
  </div>
</p>
<p>
Cette méthode a le mérite de la simplicité et protège autant le dossier lui-même que les sous-dossiers qu'il contient, sauf si un autre fichier <kbd>.htaccess</kbd> y contrevient.
</p>
<p>
L'autre méthode, sûrement plus pérenne, est de modifier directement un des fichiers de configuration Apache. Ces derniers se trouvent généralement en <kbd>/etc/httpd</kbd> et vous pouvez soit modifier <kbd>/etc/httpd/httpd.conf</kbd>, soit créer votre propre fichier <kbd>.conf</kbd> dans le dossier <kbd>/etc/httpd/conf.d</kbd>. A notez que les localisations peuvent changer d'une distribution à l'autre. Dans tous les cas la syntaxe est à peu près la même que pour un <kbd>.htaccess</kbd>:

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="sc3"><span class="re1">&lt;directory</span> <span class="st0">&quot;/mon/dossier/a/proteger&quot;</span><span class="re2">&gt;</span></span><br />
AuthType Basic<br />
AuthName &quot;Accès protégé&quot;<br />
AuthUserFile &quot;/mon_chemin_vers_mots_de_passe/passwd&quot;<br />
require valid-user<br />
<span class="sc3"><span class="re1">&lt;/directory<span class="re2">&gt;</span></span></span>
  </div>
  <div class='caption'>Exemple de fichier &#039;/etc/httpd/conf.d/ma_protection.conf&#039;</div>
  </div>
</p>
<p>
La seule différence ici est donc la balise <kbd>Directory</kbd> qui encadre le code qui aurait été dans un fichier <kbd>.htaccess</kbd> et qui indique le chemin absolu à protéger, comme la position d'un <kbd>.htacess</kbd> l'aurait fait. Une autre différence cependant tient à la manière dont apache gère les deux types de fichier. En effet, un <kbd>.htaccess</kbd> est affectif tout de suite, dés que le fichier est créé et contient les données. En revanche un fichier de configuration nécessite le redémarrage du serveur Apache par un redémarrage du serveur apache. 
</p>
<p>
Maintenant le choix <kbd>.htaccess</kbd> ou fichier de configuration vous appartient. Tout ce qui suit devrait fonctionner dans les deux cas. 
</p>


	<a name='chapter_2'></a>
  <h2>Fichier de mots de passe</h2>
	
<p>
Si nous voulons qu'Apache protège notre dossier, il nous faut lui fournir une liste d'utilisateurs, voire de groupes d'utilisateurs. C'est ce que fait le code suivant en créant d'abord un répertoire et en changeant ses droits, puis en ajoutant avec la commande Apache <kbd>htpasswd</kbd> le premier utilisateur (le chemin du dossier et le nom du fichier n'ont aucune importance) :


  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/mkdir"><span class="kw2">mkdir</span></a> <span class="sy0">/</span>var<span class="sy0">/</span>secured<span class="sy0">/</span>passwords<br />
<a target="blank" href="http://pwet.fr/man/linux/commandes/chown"><span class="kw2">chown</span></a> apache:apache <span class="sy0">/</span>var<span class="sy0">/</span>secured<span class="sy0">/</span>passwords<br />
htpasswd -c <span class="sy0">/</span>var<span class="sy0">/</span>secured<span class="sy0">/</span>passwords gaston
  </div>
  <div class='caption'>Création du fichier et ajout d&#039;un utilisateur</div>
  </div>
</p>

<p>
Pour l'ajout des utilisateurs suivants, le fichier étant déjà créé, le paramètre <kbd>-c</kbd> n'est plus nécessaire :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  htpasswd &nbsp;<span class="sy0">/</span>var<span class="sy0">/</span>secured<span class="sy0">/</span>passwords &nbsp;martine<br />
htpasswd &nbsp;<span class="sy0">/</span>var<span class="sy0">/</span>secured<span class="sy0">/</span>passwords &nbsp;robert
  </div>
  <div class='caption'>Ajout de l&#039;utilisateur &#039;martine&#039;</div>
  </div>
</p>

<p>
Un utilisateur préalablement créé, pourra être retiré de la manière suivante :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  htpasswd -D <span class="sy0">/</span>var<span class="sy0">/</span>secured<span class="sy0">/</span>passwords &nbsp;martine
  </div>
  
  </div>
</p>

<p>
Maintenant si nous vidons le contenu du fichier <kbd>/var/secured/passwords</kbd>, nous aurons ceci :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  gaston:v/nTde818O.jQ<br />
martine:CsE8VK.qdaFj.<br />
robert:wKahxQnVtqyS6
  </div>
  
  </div>
</p>
<div class='inline-box attention'>
	Si vous n'avez pas accès à votre serveur en ligne de commande, rien ne vous empêche d'utiliser <kbd>htpasswd</kbd> à partir d'une autre machine et de télécharger ensuite le fichier résultant. Il existe aussi pas mal de scripts PHP sur le net permettant de fabriquer sur votre serveur une page de génération de mots de passe (la partie de droite). En revanche les générateurs de mot de passe en ligne sont <strong>simplement à proscrire</strong> pour d'évidentes raisons de sécurité. 
</div>
<p>
Nous avons donc maintenant les utilisateurs, leur mot de passe, il ne nous reste plus qu'à définir des groupes, même si c'est optionnel. Si nous voulons indiquer que l'utilisateur <kbd>gaston</kbd> appartient au groupe <kbd> webmasters </kbd> il suffit de créer un second fichier <kbd>/var/secured/groups</kbd> contenant les données suivantes :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  webmasters: gaston martine<br />
visiteurs : robert<br />
<br />
<br />
<br />
Maintenant que nous avons notre fichier de mots de passe et notre fichier de groupes, il ne nous reste plus qu'à protéger nos dossiers avec.<br />
<br />
<br />
&lt;h3&gt;Protéger un répertoire physique&lt;/h3&gt;<br />
<br />
Pour ce faire, nous allons, dans le dossier à protéger, créer un fichier &lt;kbd&gt;.htaccess&lt;/kbd&gt;. Mais comme nous l'avons vu plus haut, ceci peut aussi se trouver dans la configuration apache, en dure.<br />
&lt;code&gt;<br />
AuthName &quot;Bienvenue sur mon serveur web&quot;<br />
AuthType Basic<br />
AuthUserFile &quot;/var/secured/passwords&quot;<br />
require valid-user
  </div>
  
  </div>
</p>

<p>
La syntaxe est ici simple à comprendre. <kbd>AuthName</kbd> est le message qui sera affiché dans la boite de dialogue de saisie de l'identifiant et du mot de passe. Gardez cela en tête pour ne pas y mettre de chose trop explicites comme "Bienvenue dans le site contenant tous mes numéros de carte bleue" <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>.
</p>

<p>
Le second paramètre, <kbd>AuthType</kbd> indique à Apache d'utiliser le protocole <kbd>Basic</kbd> pour authentifier l'utilisateur. Comme son nom le laisse présager, ce protocole est le plus simple, le plus compatibles avec tous les navigateurs, mais aussi le moins sécurisé comme nous le verrons un peu plus loin. D'autres type d'authentification existent sous Apache par l'intermédiaire de modules spécifiques, comme nous allons le voire aussi plus loin.
</p>
<p>
Ensuite nous avons <kbd>AuthUserFile</kbd> qui indique le chemin vers le fichier que nous avons créé dans le chapitre précédent, et contenant donc nos utilisateurs et leurs mots de passe.
</p>
<p>
Enfin, la règle d'authentification à proprement parler, <kbd>require valid-user</kbd>. Elle indique à Apache que tout utilisateur ayant réussi à rentrer son mot de passe est autorisé à rentrer dans le dossier. Si nous voulions spécifiquement autoriser Robert à rentrer, nous aurions mis <kbd>require user robert</kbd>, et pour Gaston et Martine, cela aurais été <kbd>require user gaston martine</kbd>.
</p>
<p>
Vu que nous avons créé un fichier de groupes d'utilisateur au chapitre précédent, autant en profiter. Et si voulions n'autoriser que le groupe <kbd>webmaster</kbd> à rentrer, nous aurions cette fois un fichier <kbd>.htaccess</kbd> comme ceci :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  AuthName &quot;Bienvenue sur mon serveur web&quot;<br />
AuthType Basic<br />
AuthUserFile &quot;/var/secured/passwords&quot;<br />
AuthGroupFile &quot;/var/secured/groups&quot;<br />
require group webmaster
  </div>
  
  </div>
</p>
<p>
   Plus complet, les deux chemins vers les deux fichiers mots de passe et groupes sont indiqués (apparition du mot clef <kbd>AuthGroupFile</kbd>). 
</p>
<p>
    Enfin il est possible de panacher tout cela avec des choses du genre : <kbd>require user robert, group webmaster</kbd>. Ceci indique à apache que seuls les membres du groupe <kbd>webmaster</kbd> sont autorisés, à l'exception de robert.
</p>


	<a name='chapter_3'></a>
  <h2>Utiliser un serveur LDAP</h2>
	
<p>
    Comme je le disais plus haut, il y a de nombreux modules liés à l'authentification disponibles pour Apache sous la forme de modules. Par exemple si vous vouliez utiliser un protocole <a class='external' target='_blank' href='/%20http%3A/%252Fen.wikipedia.org/wiki/Digest_access_authentication' >Digest</a> au lien du simple <kbd>Basic</kbd>, vous utiliseriez le module <a class='external' target='_blank' href='/%20http%3A/%252Fhttpd.apache.org/docs/2.0/mod/mod_auth_digest.html' >mod_auth_digest</a>. 
</p>
<p>
  De même différent modules permettent de vérifier les utilisateurs, groupes et mots de passe sur une base de donnée plutôt qu'un fichier texte, ou encore un serveur 
  <a target='_blank' href='http://fr.wikipedia.org/wiki/ldap'>
  ldap
  </a> par le biais du module <a class='external' target='_blank' href='http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html' >mod_authnz_ldap</a>. Il dépends du module Apache d'accès  à LDAP, <kbD>mod_ldap</kbd> qu'il faut aussi installer. Ce module permet une authentification <kbd>Basic</kbd> adossée à un base LDAP.  Un bloc de configuration pour un tel système se présente comme cela

  <div class='code-block code-block-fragment'>
  <div class='container'>
  AuthType Basic<br />
AuthName &quot;Bienvenue sur mon serveur web&quot;<br />
AuthBasicProvider ldap<br />
AuthLDAPURL ldap://localhost:389/dc=mon-domaine,dc=com<br />
AuthLDAPGroupAttribute memberUid<br />
AuthLDAPGroupAttributeIsDN off<br />
Require ldap-group cn=webmasters,ou=Group,dc=mon-domaine,dc=com
  </div>
  <div class='caption'>.htaccess via LDAP</div>
  </div>
</p>

<p>
Comme vous le voyez l'esprit est à peu prés le même que précédemment. La ligne <kbd>AuthBasicProvider</kbd> indique à apache de se baser sur un serveur LDAP plutôt qu'un fichier. Les coordonnées du serveur apparaissent avec la ligne <kbd>AuthLDAPURL</kbd> qui indique le nom de la machine, le port en écoute, ainsi que le domaine pris en charge.
</p>

<p>
Les deux attributs suivant permettent au module apache de se repérer dans les enregistrements LDAP et d'y trouver les utilisateurs. Le paramétrage que j'utilise ici se base sur la disposition standard d'une base LDAP sous Unix et est à adapter pour un ActiveDirectory sous Windows, par exemple. 
</p>

<p>
Enfin la dernière ligne indique à apache de n'autoriser à rentrer que le group ldap spécifié (ici webmasters). L'utilisateur de <kbd>ldap-user</kbd> (ex. <kbd>Require  ldap-user Gaston) permettrait de n'autoriser qu'un utilisateur spécifique. Et ici aussi, le panachage est autorisé en séparant les éléments par des virgules. 
</p>
<div class='inline-box attention'>
Utiliser les mêmes mots de passe pour un service web publique et des utilisateurs locaux présente un risque car le protocole <kbD>Basic</kbd> ne permet pas de se protéger d'une attaque en "brut force". C'est-à-dire qu'un vilain peu faire autant de tentatives qu'il le désire sans qu'apache ne l'en empêche et ainsi trouver un mot de passe critique, même s'il met des jours a le faire. Le risque n'est pas énorme mais doit être pris en compte dans la qualité des mots de passe utilisables sur le WEB.
</div>

<p>
A ce stade, nous avons déjà pas mal d'outils pour protéger nos données mais si nous nous arrêtions à cela, cela ne servirait à rien... En effet, ce type de sécurité est aussi valable qu'une porte blindée sur des murs en cartons. Car le gros inconvénient du mode <kbd>basic</kbd> est que les mots de passes circulent <strong>en clair</strong>. Protéger par mot de passe un dossier accessible avec le protocole HTTP est donc très dangereux. Une simple écoute active (mode Promisc) du réseau, si par exemple vous utilisez cela de votre bureau, dévoile aussi sûrement vos secrets que si vous les aviez envoyé à tout le monde par courriel. Pour parfaire notre protection il est donc obligatoire de mettre en œuvre le protocole HTTPS, ce que j'aborderais dans un autre article. 
</p>


	<a name='chapter_4'></a>
  <h2>Empêcher le téléchargement des images à partir d'un autre site</h2>
	
<p>
Un problème classique est de se retrouver avec une bande passante "volée" parce qu'un
Malotru a eu l'indélicatesse de mettre vos images en référence directe sur son site. Ici, pas question de mettre un mot de passe qui bloquerait les utilisateurs légitimes. Les techniques précédentes sont donc inutiles. A la place nous allons utiliser les variables dont nous disposons au sein d'Apache et particulièrement du <kbd>Referer</kbd>.
</p>

<p>
Pour ceux qui ne le savent pas, un navigateur WEB a pour obligation de transmettre au serveur l'adresse WEB de la page qui contient le lien qui a permis d'arriver sur notre site. Cette indiscrétion est déjà bien connu et c'est elle qui permet de savoir d'où viennent nos visiteurs. Cette adresse est le fameux <kbd>Referer</kbd>. 
</p>
<p>
Ce qui est un peu moins connu c'est que chaque élément lié à une page de notre site (ex. une image ou une feuille de style), est demandée au serveur distant avec lui aussi un <kbd>Referer</kbd>. Sauf que cette fois, c'est l'adresse de notre propre site qui est passé par le navigateur, ce qui est somme toute très logique. 
</p>
<p>
En d'autres termes, toute demande d'image n'ayant pas notre site pour <kbd>Referer</kbd>, est sûrement l'objet d'un vol de bande passante… C'est cette caractéristique que nous allons exploiter avec ce code qui peut aussi bien être, comme toujours, dans un <kbd>.htaccess</kbd> qu'un fichier de configuration Apache.

  <div class='code-block code-block-fragment'>
  <div class='container'>
  SetEnvIfNoCase Referer &quot;^http://www\.monsite\.net/&quot; acces_local=1<br />
<span class="sc3"><span class="re1">&lt;FilesMatch</span> <span class="st0">&quot;.(gif|jpg|png|pdf|css|js)&quot;</span><span class="re2">&gt;</span></span><br />
Deny from all<br />
Allow from env=acces_local<br />
<span class="sc3"><span class="re1">&lt;/FilesMatch<span class="re2">&gt;</span></span></span>
  </div>
  
  </div>
</p>
<p>
Ce qui se passe c'est que si le <kbd>Referer</kbd> est bien notre site, nous positionnons une variable <kbd>acces_local</Kbd> à 1. Ensuite nous ajoutons une règle qui interdit le téléchargement des images (Deny from all) sauf pour les requêtes qui ont la variable <kbd>acces_local</kbd> définie. Voilà, c'est tout. La directive <kbd>FilesMatch</kbd> est elle là pour n'opérer cette sécurité que sur les fichiers images, feuilles de style, scripts, etc. Il serait en effet un peu idiot d'appliquer cette règles au fichier .php par exemple, cela interdirait systématique l'accès du site à tout le monde….
 </p>


	<a name='chapter_5'></a>
  <h2>Empêcher certains navigateurs</h2>
	
<p>
Vous aurez remarqué dans l'exemple précédent la syntaxe un peu étrange du paramètre de la directive <kbd>SetEnvIfNoCase</kbd>. On appelle cela une 
  <a target='_blank' href='http://fr.wikipedia.org/wiki/expression régulière'>
  expression régulière
  </a>. Une expression régulière est une sorte de motif permettant de décrire une chaîne de caractère attendue. On peut ainsi créer des expressions régulières décrivant un numéro de téléphone ou une adresse courriel. Dans l'exemple précédent, elle signifiait "toute les URL qui commencent par (symbole ^) http://www.monsite.net/".  Les <kbd>\.</kbd> étaient là pour indiquer que l'on voulait que le vrai caractère <kbd>.</kbd> soit utilisé, car sinon, ce symbole a un sens particulier dans une expression régulière. 
</p>
<p>
Maintenant imaginons qu'un vilain spammeur qui me fasse des misères et que son adresse IP varie de 81.95.144.X à 81.95.147.X. Je peux le bloquer par la configuration suivante :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  SetEnvIf Remote_Addr &quot;^81\.95\.14[4-7]\.&quot; bad_bot<br />
Deny from env=bad_bot
  </div>
  
  </div>
</p>
<p>
C'est à peu prés le même exemple que précédemment sauf que cette fois on utilise, non pas <kbd>Referer</kbd> mais <kbd>Remote_Addr</kbd> qui est l'adresse IP du navigateur client. Je ne vais pas faire ici un cours sur les expressions régulière, il y a de <a class='external' target='_blank' href='http://www.regular-expressions.info/' >magnifique tutoriaux</a> sur ce sujet.
</p>
<p>
Juste un dernier exemple, si cette fois c'est la chaîne d'identification (
  <a target='_blank' href='http://fr.wikipedia.org/wiki/User Agent'>
  User Agent
  </a>) d'un navigateur que je veux bloquer, par exemple un bot malveillant :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  BrowserMatchNoCase &quot;.*HTTrack*&quot; bad_bot<br />
Deny from env=bad_bot
  </div>
  
  </div>
<p>
   Là, j'utilise une directive un peu spéciale qui a le même rôle que les précédentes mais cette fois sur la variable <kbd>User_Agent</kbd> sans distinction de majuscules/minuscules. 
</p>
<p>
Bien évidement, vous pouvez mettre une liste complète de définitions <i>avant</i> d'insérez votre directive <kbd>Deny</kbd> :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  BrowserMatchNoCase &quot;.*HTTrack*&quot; bad_bot<br />
BrowserMatchNoCase &quot;.*ICC-Crawler*&quot; bad_bot<br />
BrowserMatchNoCase &quot;.*Nutch*&quot; bad_bot<br />
SetEnvIf Remote_Addr &quot;^82\.246\.40\.31&quot; bad_bot # un gars de free...<br />
SetEnvIf Remote_Addr &quot;^195\.69\.171\.86&quot; bad_bot # mirotel.net<br />
Deny from env=bad_bot
  </div>
  
  </div>
</p>

<p>
Cette méthode n'est pas aussi fiable que je le voudrais car les adresses change, et les chaînes d'identification de navigateur aussi. Mais au moins est-ce un moyen de contrer efficacement une attaque ponctuelle. Pour une liste complète des directives touchant à la définition de variables, je vous renvoie à la <a class='external' target='_blank' href='http://httpd.apache.org/docs/2.0/mod/mod_setenvif.html' >documentation d'Apache</a>.
</p>


	<a name='chapter_6'></a>
  <h2>Protéger par adresse IP</h2>
	
<p>
Même si cela fonctionne, passer par les variables pour interdire une IP avec des expressions régulières est un peu sauvage pour un usage courrant. Si vous voulez pour votre dossier, ne soit accessible que pour une seule IP, ou un groupe d'IP, nous pouvons plus simplement utiliser la directive <kbD>Deny From</kbd>. Par exemple ici, pour n'autoriser que l'IP 192.168.0.10 nous utiliserons la configuration suivante :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  Deny from all<br />
Allow from 192.168.0.10
  </div>
  
  </div>
</p>
<p>
Nous pouvons assouplir la règle en enlevant un group de chiffre à la fin de l'IP. Par exemple <kbd>Allow from 192.168.0</kbd> autorise les adresses allant de <kbd>192.168.0.0</kbd> à <kbd>192.168.0.255</kbd>, à se connecter.
</p>


	<a name='chapter_7'></a>
  <h2>Mixer les plaisirs</h2>
	
<p>
Pour finir, un petit mélange. Imaginons que nous protégions notre dossier par mot de passe via LDAP mais qu'en même temps nous ayons besoins que les clients se connectant d'un adresse IP spécifique, puise le faire sans mot de passe. Cela nous donnerais le code suivant :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  Allow from 192.168.0.10<br />
AuthType Basic<br />
AuthName &quot;Acces au dossier&quot;<br />
AuthBasicProvider ldap<br />
AuthLDAPURL ldap://localhost:389/dc=mon-domaine,dc=com<br />
AuthLDAPGroupAttribute memberUid<br />
AuthLDAPGroupAttributeIsDN off<br />
Require ldap-group cn=webmaster,ou=Group,dc=mon-domaine,dc=com<br />
Satisfy Any
  </div>
  
  </div>
</p>
<p>
Rien d'inconnu maintenant dans ces syntaxes, à l'exception de la dernière ligne, qui fait toute la différence. En effet, elle indique à Apache que l'une ou l'autre des conditions suffit à autoriser l'accès : soit l'IP, soit le mot de passe.
</p>


	<a name='chapter_8'></a>
  <h2>Conclusion</h2>
	
<p>
L'article est déjà long et nous sommes loin d'avoir totalement couvert le sujet. J'espère seulement que cela vous donnera assez de pistes pour trouver la solution qui convient le mieux à vos besoins. L'agressivité et l'automatisation des attaques comme en témoignent souvent les fichiers de traces, prouvent que ce genre de précaution est simplement obligatoire. Il n'y a à ma connaissance pas de moyens systématique de valider qu'un serveur est correctement fermé, et ce qui est réellement ouvert. Google permet par le biais d'une requête de type <kbD>site:mon-site.com</kbd> d'avoir la liste de ce qu'il voit mais cela se limite à ce qui a été lié, quelque part, sur le Web, ce qui est loin d'être suffisant. 
</p>
<p>
Car croire que le seul fait de ne pas publier sur le web le lien vers un dossier le rend invisible est pure crédulité comme en témoigne <a class='external' target='_blank' href='http://www.zataz.com/news/16768/SOS-Racisme-sauver-des-pirates.html' >cette ânerie là, </a>, que j'avais trouvé par hasard, en bidouillant l'URL d'annulation d'un courriel de pub, sans l'aide google. 
</p>
    ]]></content>
  </entry>
</feed>
