vue Protéger son site avec les .htaccess
Kommunauty
Connexion
Inscription

Protéger son site avec les .htaccess

le 27 juin 2011 • Programmation • par Binboy

Tout le monde a entendu parler, ces derniers temps, des attaques à répétition contre Sony et plusieurs grandes compagnies.

Par exemple, Acer s'est fait piraté parce que l’un de ses techniciens avait posté sur un forum un bout de code contenant les identifiants administrateur d'un de leur site. Du coup, c'est 40 000 comptes utilisateurs qui se retrouvent dans la nature.

Ces différentes attaques sont de types très différents mais elles font ressortir un point important : La sécurité. La sécurité ne peut pas être absolue, il y aura toujours un maillon faible que ce soit technique ou humain. La négligence dont a fait preuve le technicien d'Acer est une erreur humaine qui s’est transformée en faille. Aucun système n'est parfait. Ce n'est pas pour autant qu'il ne faut pas sécuriser !

Principe

Un site web est une vitrine disponible depuis n'importe où dans le monde. N'importe quel pirate ou apprenti pirate peut essayer de s'attaquer à votre site. Même si aucune sécurité n'est parfaite, protéger son site web est très important et permet d'écarter un grand nombre d'attaques.

Généralement, un Hacker, avant de pirater votre site, va essayer de comprendre son architecture et repérer les fichiers importants. Une fois cette étape passée, il va essayer de repérer les failles à proprement parler.

La partie sur laquelle nous allons nous attarder est la découverte de l'architecture de votre site web par le Hacker. Mon but sera de vous montrer comment ralentir voir compromettre son analyse de votre site. Pour cela nous allons utiliser les fichiers .htaccess.

Un fichier .htaccess est un fichier destiné à Apache. Il permet d'indiquer au serveur Web certaines règles et restrictions que l'on désire appliquer sur un ou plusieurs fichiers ou dossiers.

Prenons maintenant un scénario d'attaque :

Le pirate arrive sur votre site, première chose qu'il va chercher c'est votre interface d'administration. En général, c'est là que sont stockés les fichiers sensibles qui gèrent l'intégralité du site. Pour ce faire, il va essayer d'y accéder par l'url, en entrant des noms communs comme :

http:// monsite.fr/admin

http:// monsite.fr/backoffice

http:// monsite.fr/administration

http:// monsite.fr/gerer

Si cela ne donne rien, il va jeter un petit coup d'œil dans le fichier robots.txt. Vous savez ce petit fichier qui permet de dire aux moteurs de recherches de ne pas aller dans tel ou tel répertoire pour pas qu'il soit référencé. Votre interface d'administration ne doit pas apparaître dans les moteurs de recherches. Il serait donc normal de le préciser aux moteurs de recherches. FAUX, FAUX, FAUX et re-FAUX ! Si vous le précisez, vous indiquez en même temps qu'il existe. Et si Google est au courant, le pirate aussi. Donc il ne faut pas le mettre dans robots.txt !

Imaginons que notre Hacker trouve ce qu'il désire (le répertoire de votre partie d’administration) dans le fichier robots.txt. Il va donc se rendre dans le répertoire de votre backoffice. Il va alors essayer à nouveau de trouver des répertoires sensibles. Pour cela il va tenter des adresses comme :

http:// monsite.fr/admin/images

http:// monsite.fr/admin/include

Il va aussi essayer des fichiers :

http:// monsite.fr/admin/index.php

http:// monsite.fr/admin/admin.php

http:// monsite.fr/admin/gerer.php

Et la liste est longue ! Vous avez sûrement mis une redirection si la personne qui tente d'accéder à votre site web n'est pas authentifiée. ERREUR ! Si votre page redirige ailleurs, il est possible de stopper la redirection et retrouver la page que vous essayez de cacher ! De plus, trop de redirection tue les redirections Une fois cette page accessible le Hacker peut commencer à tester les failles de votre code. S’il parvient à ses fins votre site risque de s'en prendre une bonne.

Se protéger

Revenons maintenant au début de l'attaque : Le Hacker a essayé de trouver votre partie administration. Il a cherché des indices, je n'ai cité que le fichier robots.txt mais il existe d'autres moyens pour récupérer des indices. Je pense que vous l'avez compris, il ne faut pas mentionner votre backoffice dans la partie publique de votre site. Que ce soit pour le login, le sitemap ou robots.txt. Aucune trace !

Pour ce faire, nous allons commencer par le retirer de la liste des dossiers présents sur votre serveur. Créez un fichier .htaccess dans le répertoire d'administration de votre site et ajoutez cette ligne :

Options –Indexes

Cette simple ligne va interdire au serveur de lister ce répertoire, c'est à dire qu'il n'indiquera pas sa présence. Voila déjà une étape de franchie !

Maintenant que le répertoire est invisible, il faut prévoir le "au cas où" en interdisant purement et simplement l'accès aux répertoires primordiaux du site. Les répertoires auxquels même vous n'avez pas besoin d’accéder. Par exemple, les dossiers qui contiennent vos fichiers de fonctions ou de classes. Personnes ne doit y accéder même pas vous ! Donc encore moins un Hacker !

Dans ces répertoires créez un .htaccess et ajoutez cette ligne :

Deny from all

Ce qui aura pour effet d'afficher une belle erreur 403 Forbidden impossible à détourner. Les fichiers protégés par ça ne sont plus accessibles par quelqu'un d'autre que le serveur lui même.

Sachez qu'un répertoire contenant un .htaccess avec la règle Deny from all, applique automatiquement la règle Options –Indexes. Il est quand même conseillé de mettre les deux

En plus de tout cela vous pouvez restreindre l'accès au répertoire d'administration en fonction des IP que vous définissez. C'est à dire que si quelqu'un tente d'accéder au répertoire et qu'il ne possède pas une adresse IP qui se trouve dans la liste. Il lui sera impossible d'y accéder.

Pour cela il faut que vous ajoutiez dans votre .htaccess :

Order Deny,Allow
Deny from all
Allow from VOTRE_IP

Si par exemple vous avez des fichiers sensibles qui sont dans des répertoires publics (CHOSE A NE PAS FAIRE !) vous pouvez restreindre l'accès de ces fichiers et uniquement ces fichiers. Tout d'abord donnez-leur un nom spécifique, du style :

monfichier.inc.php

monfichier.sec.php

Et ajoutez dans votre .htaccess :

<Files *.sec.php>
Deny from all
</Files>

Ce qui aura pour effet d'interdire à tout le monde d'accéder aux fichiers se terminant par .sec.php

La pratique

Il faut savoir que lorsque vous mettez un .htaccess dans un répertoire tous les dossiers et fichiers de ce même répertoire sont concernés par les règles que vous aurez défini.

Je m'explique : Prenons votre disque dur sous Windows. Si vous mettez une restriction sur C:, celle-ci va s'appliquer sur tous les dossiers et fichiers se trouvant dans C:. C'est à dire, Windows, Program Files, Documents and Settings, etc...

Par contre, si vous mettez une restriction sur Documents and Settings, cette restriction s'appliquera aux dossiers et fichiers dans Documents and Settings et pas les autres ! C: n'aura pas ses restrictions modifiées.

C'est exactement le même principe pour les .htaccess sur les serveurs Web. Si vous définissez des restrictions dans un sous dossier, le dossier principal ne sera pas concerné. Lorsque vous définissez vos règles, il faut donc partir de la racine en donnant de faibles restrictions et plus vous avancez dans l'arborescence plus vous augmentez les restrictions.

Application

Dans cette application nous allons interdire l’accès de tous les fichiers en .sec.php, interdire le listage de notre répertoire d’administration et notre répertoire de fichiers à inclure. Nous allons aussi autoriser uniquement notre adresse IP à accéder au dossier d’admin.

Allez c’est partit !

On bloque l’accès à tous les fichiers .sec.php. Dans le .htaccess à la racine de votre site web ajoutez :

<Files *.sec.php>

Deny from all

</Files>

On restreint ensuite l’accès à l’interface d’administration en fonction de notre IP (internet bien sur). Dans le .htaccess du dossier contenant les fichiers d‘administration :

Order Deny,Allow
Deny from all
Allow from VOTRE_IP

Pour finir, dans les répertoires contenant les fichiers (PHP) que vous incluez dans vos pages et donc que personne n'a besoin de voir créez un .htaccess et mettez la ligne suivante :

Deny from all

Conclusion

Je pense avoir fait le tour des fonctionnalités du .htaccess indispensables à une bonne sécurisation d'un site web. Je n'ai pas parlé des authentifications par mot de passe, l'URL Rewriting ou les erreurs personnalisées. Simplement parce que ce n'était pas le but. Le but de ce tutoriel était de sécuriser son site web et non le personnaliser.

  
Aucun commentaire

Sois le premier à débuter une discussion à propos de cet article !



Ajoute un commentaire !

Ajouter une image... Trouvée sur internet » De mon PC »
Adresse URL :
Adresse de la page de la vidéo :
Taille du texte :
Couleur du texte :

Article lu 24011 fois.