Réponse courte: oui
La réponse à cette question est un oui sans équivoque , et dire le contraire est totalement irresponsable .
Réponse longue: un exemple concret
Permettez-moi de donner un exemple très réel, tiré de mon serveur très réel, où le fait de passer wp-config.phpà l'extérieur de la racine Web empêchait spécifiquement la capture de son contenu .
L'insecte:
Jetez un coup d’œil à cette description d’un bogue dans Plesk (corrigée dans 11.0.9 MU # 27):
Plesk réinitialise le transfert de sous-domaine après la synchronisation de l'abonnement avec le plan d'hébergement (117199)
Cela semble inoffensif, non?
Eh bien, voici ce que j'ai fait pour déclencher ce bug:
- Configurez un sous-domaine pour le rediriger vers une autre URL (par exemple,
site.staging.server.comvers site-staging.ssl.server.com).
- Modification du plan de service de l'abonnement (par exemple, sa configuration PHP).
Lorsque j'ai fait cela, Plesk a réinitialisé le sous-domaine aux valeurs par défaut: servir le contenu de ~/httpdocs/, sans interprète (par exemple, PHP) actif.
Et je n'ai pas remarqué. Pendant des semaines.
Le résultat:
- Avec
wp-config.phpdans la racine Web, une demande /wp-config.phpaurait téléchargé le fichier de configuration WordPress.
- En
wp-config.phpdehors de la racine Web, demande de /wp-config.phptélécharger un fichier totalement inoffensif. Le wp-config.phpfichier réel n'a pas pu être téléchargé.
Il est donc évident que le fait de wp-config.phpsortir de la racine Web présente des avantages réels en matière de sécurité .
Comment passer wp-config.phpà n’importe quel emplacement sur votre serveur
WordPress recherchera automatiquement un répertoire au-dessus de votre installation WordPress pour votre wp-config.phpfichier. Si c'est là que vous l'avez déplacé, vous avez terminé!
Mais que faire si vous l'avez déplacé ailleurs? Facile. Créez un nouveau wp-config.phpdans le répertoire WordPress avec le code suivant:
<?php
/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
/** Location of your WordPress configuration. */
require_once(ABSPATH . '../phpdocs/wp-config.php');
(Assurez-vous de remplacer le chemin ci-dessus par le chemin réel de votre wp-config.phpfichier déplacé .)
Si vous rencontrez un problème avec open_basedir, ajoutez simplement le nouveau chemin d'accès à la open_basedirdirective dans votre configuration PHP:
open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"
C'est ça!
Choisir des arguments contraires
Chaque argument contre le fait de wp-config.phpquitter la racine Web repose sur de fausses hypothèses.
Argument 1: Si PHP est désactivé, ils sont déjà présents
La seule façon de voir le contenu de [ wp-config.php] est de contourner l'interpréteur PHP de votre serveur ... Si cela se produit, vous avez déjà un problème: vous avez un accès direct à votre serveur.
FAUX : Le scénario que je décris ci-dessus est le résultat d'une mauvaise configuration, pas d'une intrusion.
Argument 2: La désactivation accidentelle de PHP est rare, et donc insignifiante
Si un attaquant a suffisamment d'accès pour modifier le gestionnaire PHP, vous êtes déjà voué à l'échec. D'après mon expérience, les modifications accidentelles sont très rares et dans ce cas, il serait facile de changer le mot de passe.
FAUX : Le scénario que je décris ci-dessus est le résultat d'un bogue dans un logiciel serveur commun affectant une configuration de serveur commune. C’est loin d’être "rare" (et d’ailleurs, sécurité, c’est se soucier de ce scénario rare).
WTF : Changer le mot de passe après une intrusion n'aide guère si des informations sensibles ont été collectées pendant l'intrusion. Vraiment, pensons-nous toujours que WordPress n'est utilisé que pour les blogs occasionnels, et que les attaquants ne s'intéressent qu'à la défiguration? Nous allons nous préoccuper de la protection de notre serveur, pas seulement de la restauration après que quelqu'un se soit introduit.
Argument 3: Refuser l'accès wp-config.phpest suffisant
Vous pouvez restreindre l'accès au fichier via votre configuration d'hôte virtuel ou
.htaccess- en limitant efficacement l'accès extérieur au fichier de la même manière que le fait de passer à l'extérieur de la racine du document.
FALSE : Imaginez que les valeurs par défaut de votre serveur pour un hôte virtuel soient: pas de PHP, non .htaccess, allow from all(ce qui n’est guère inhabituel dans un environnement de production). Si votre configuration est en quelque sorte réinitialisée au cours d'une opération de routine, telle qu'une mise à jour de panneau, par exemple, tout reviendra à son état par défaut et vous serez exposé.
Si votre modèle de sécurité échoue lorsque les paramètres sont réinitialisés par défaut, vous avez besoin de davantage de sécurité.
WTF : Pourquoi quelqu'un recommanderait-il spécifiquement moins de couches de sécurité? Les voitures chères n'ont pas seulement des serrures; ils ont également des alarmes, des immobilisateurs et des suiveurs GPS. Si quelque chose mérite d'être protégé, faites-le correctement.
Argument 4: L'accès non autorisé à wp-config.phpn'est pas grave
Les informations de base de données sont vraiment le seul élément sensible de [ wp-config.php].
FALSE : Les clés d’authentification et les sels peuvent être utilisés dans un nombre illimité d’attaques de piratage.
WTF : Même si les informations d'identification de la base de données étaient la seule chose à posséder wp-config.php, vous devriez être terrifié par l'attaque d'un attaquant.
Argument 5: le fait de wp-config.phpsortir de la racine Web rend un serveur moins sécurisé
Vous devez toujours laisser l'accès WordPress [ wp-config.php], vous devez donc développer open_basedirpour inclure le répertoire au-dessus de la racine du document.
FALSE : En supposant que wp-config.phpsoit présent httpdocs/, déplacez-le simplement ../phpdocs/et définissez-le open_basedirpour inclure uniquement httpdocs/et phpdocs/. Par exemple:
open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"
(N'oubliez pas de toujours inclure /tmp/, ou votre tmp/répertoire utilisateur , si vous en avez un.)
Conclusion: les fichiers de configuration doivent toujours toujours être situés en dehors de la racine Web.
Si la sécurité vous tient à cœur, vous vous déplacerez en wp-config.phpdehors de votre racine Web.