cadenas_ouvert

Quand vous installez une application web sur un serveur (comme par exemple le CMS Joomla), vous devez généralement utiliser une base de données dans laquelle sont stockées les données de l'application. Pour que cela puisse fonctionner, il faut renseigner dans l'arborescence de l'application un fichier de configuration qui contient le nom de la base, ainsi que l'identifiant et le mot de passe d'un utilisateur avec des droits de lecture et d'écriture. Le problème c'est qu'on se retrouve alors avec des informations sensibles dans un fichier accessible depuis l'arborescence publique du serveur web. Normalement, le contenu de ce fichier ne devrait jamais être affiché directement, mais si une personne malveillante y parvient, elle obtient alors des accès directs aux bases de données. Dans le cas où l'on possède plusieurs applications web sur le même serveur, une première bonne mesure est de définir un couple identifiant / mot de passe différent pour chaque base. Ainsi si une base est attaquée, les autres seront épargnées.

 

cadenas_ferme

J'ai découvert récemment une mesure complémentaire qui permet d'améliorer la sécurité. Pour éviter d'exposer les informations d'accès à la base, il est possible de les sortir de l'arborescence publique, en les déclarant comme variables d'environnement du serveur web Apache. Seules ces variables figureront alors dans les fichiers de configuration des applications, et pas les informations d'accès aux bases. La structure des fichiers de configuration reste la même, mais la sécurité est améliorée !

 

Voyons en détail comment mettre en oeuvre cette technique.

 

Définir les paramètres d'accès comme variables d'environnement Apache

 

Créer un fichier base.txt en dehors de l'arborescence web, par exemple dans /etc/apache2 :

SetEnv dbname mon_nombase
SetEnv dblogin mon_login
SetEnv dbpass mon_passwd


En changeant les valeurs mon_nombase, mon_login et mon_passwd par celles qui correspondent aux paramètres d'accès à la base de l'application web. N'oubliez pas de donner les droits rw-rw---- à ce fichier :

chmod 660 base.txt

 

Lier le fichier précédent dans le répertoire de l'application


Éditer le fichier de configuration du serveur web /etc/apache2/apache2.conf ou celui du virtualhost associé à votre application (par exemple /etc/apache2/sites-available/monappli.mondomaine.fr), et ajoutez y :


 Include /etc/apache2/base.txt


En remplaçant monappli par le nom du répertoire qui contient votre application web.

 

 

Utiliser les variables d'environnement dans le fichier de configuration

 

Modifier le fichier de configuration de votre appli web en remplaçant les valeurs par les variables d'environnement Apache. Par exemple, pour le CMS Joomla :

var $user = getenv('dblogin');
var $db = getenv('dbname');
var $password = getenv('dbpass');


Prenez soin de bien respecter les noms de variables d'environnement que vous avez choisies dans le fichier base.txt. A la place de la fonction getenv, il est aussi possible en PHP d'utiliser le tableau superglobal $_SERVER, ce qui revient au même dans ce cas :

var $user = $_SERVER['dblogin'];
var $db = $_SERVER['dbname'];
var $password = $_SERVER['dbpass'];

 

Conclusion

 

Vous ne modifiez pas la structure du fichier de configuration de vos applications, mais maintenant les paramètres d'accès à la base de données n'y apparaissent plus. Les valeurs se trouvent dans un fichier non accessible à l'utilisateur, donc beaucoup plus sécurisé. Malheureusement cette méthode n'est pas utilisable avec un hébergement mutualisé, car vous n'avez en général pas la possibilité de modifier les variables d'environnement d'Apache, ni son fichier de configuration. De toute façon, si vous vous posez des questions sur la sécurité de vos sites web, vous devriez passer sur un serveur dédié ou mettre en place votre propre serveur !