Bloquer l’accès aux répertoires de votre installation de WordPress

Par défaut, WordPress stocke vos médias dans un dossier accessible en saisissant l'URL dans un navigateur Internet.

N’importe quelle personne mal avisée peut donc afficher le contenu de ces répertoires susceptibles de contenir des données personnelles. Réglons ce problème de sécurité sans plus tarder en intervenant dans le .htaccess.

Notez que cette astuce fonctionne pour n’importe quel serveur Apache et que l’utilisation ou non de WordPress n’a aucun impact. Vous pouvez donc appliquer cette astuce sur tous vos projets Web.

Cette astuce va nous permettre d’interdire le listage d’un répertoire et donc de son contenu présent sur votre serveur. Pour savoir si vous êtes concerné, ouvrez un article contenant une image puis, via le menu contextuel, affichez l’image dans un nouvel onglet. Remontez d’un répertoire en supprimant le nom du fichier puis validez. Si votre serveur est bien configuré vous obtiendrez une erreur 404. Dans le cas contraire, une liste d’éléments s’affiche.

Notons toutefois que certains dossiers sensibles comme /wp-content/themes et /wp-content/plugins ne sont pas accessible via l’URL car ils contiennent un fichier index.php. Un fichier par défaut que lit en premier le navigateur.

Le principal inconvénient de cette méthode est qu’il nous faut ajouter un tel fichier dans chaque nouveau dossier : une opération fastidieuse que nous allons contourner en ajoutant une ligne de code dans le fichier .htaccess.

A l’aide de votre client FTP favori, connectez-vous à la racine de votre installation WordPress. Éditez ensuite le fichier .htaccess qui est, je le rappelle, un fichier caché. Il sera donc nécessaire d’afficher les fichiers masqués via les options de votre client.

En fin de fichier, rajoutez les lignes de code suivantes :

<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>

Sauvegardez le tout puis testez le bon fonctionnement de l’opération dans un navigateur.

Vos répertoires ne sont désormais plus accessibles en lecture. Le visiteur obtient une erreur 404 lui informant qu’aucune page de ce type n’existe. Votre sécurité s’en trouve renforcée mais n’oubliez pas que l’accès direct reste bien entendu autorisé.

Par Aurélien Denis

Another WordPress fanboy. Fondateur de WordPress Channel et WP Alacarte, président de l'association WordPress Francophone (2016-2017) et WordPress Meet & eXchange, gérant de la société Neticpro, co-organisateur du WPMX Day et du WordCamp Bordeaux, et plus encore.

Des tutoriels et des bons plans en exclusivité !
  • Ce champ n’est utilisé qu’à des fins de validation et devrait rester inchangé.
80 commentaires
  1. Thierry Benquey

    La photo est trop belle. J’adore le ptit cadenas moderne en comparaison de l’ancien. Remarque ca passe bien avec l’article, une petite phrase au lieu de centaines de fichiers index.
    Merci pour cette astuce.
    Thierry

  2. Azed

    Merci énormément pour cette astuce.

  3. foxprime

    C’est ajouté, merci 🙂

  4. Abcmoteur

    J’ai jamais rien fait et j’ai déjà une page 404. 🙂

  5. brunom

    moi j’obtiens une erreur 500 internal erreur

    1. teki

      Pareil, j’ai la même erreur

      1. Aurélien Denis auteur de l’article

        Comme indiqué plus base, probablement une limitation hébergeur… 🙁

  6. Hervé

    un fichier index.html avec ce contenu peut aussi suffire (sauf qu’il n’agit pas dans les sous-répetoires mais est très pratique pour les hébergements n’autorisant pas les .htaccess) :
    history.go(-1);

    1. Hervé

      Manque les balises script à mon commentaire 😉 :
      history.go(-1);

      1. Aurélien Denis auteur de l’article

        Par contre, ton script me faisait revenir en arrière la page de cet article… jusqu’à ce je regarde les commentaires ! 🙁

      2. Aurore

        Peux-tu en dire plus à ce sujet STP ? Car je suis vitime d’erreur 500. Je suis chez OVH. J’ai donc du remettre mon htacess de base sans les modifs 🙁 Merci

  7. Allues

    Bonjour,
    pouvez vous détailler les manoeuvres à faire pour l’ignorant que je suis… Par exemple, comment je me connecte à « la racine de mon installation de WordPress »? Oui, je sais cette question vous fait rire, mais je ne voudrais pas faire de bêtises !
    Merci

  8. Mélodie

    Allues, à l’aide d’un client ftp. Filezilla par exemple. Regardez sur le web « tutoriel filezilla » si vous voulez une documentation.

    J’ai une question sur le « Options All -Indexes » : le répertoire uploads ne risque-t-il pas de ne plus être accessible depuis les pages du site également ?

  9. Uncle Bee

    Ça marche très bien pour moi et Filezilla m’affiche par défaut les fichiers cachés.

    Merci beaucoup !

  10. Abdou

    Le pb est que quand tu mets ce code, tu n’as plus accès à la page admin

  11. Abdou

    On n’a même plus accès au site via le navigateur

    1. Aurélien Denis auteur de l’article

      Cela vient peut-être de ton hébergeur car cette astuce est reconnue.

      1. Abdou

        Bonjour,
        Merci d’avoir répondu; je suis en hébergement mutualisé; vous voulez dire que c’est la configuration du serveur qui fait cela.

        1. Aurélien Denis auteur de l’article

          Tu obtiens une erreur 500 ?

  12. @Toutestici

    Merci pour cette astuce !

  13. Blog E-commerce

    Manipulation ajoutée à mon fichier.htaccess. Ce sont des petites manipulation qui prennent 30 secondes et ça marche. Encore merci pour les « 14 astuces indispensables ».

  14. Emmanuel

    Est ce que ca marche aussi avec une installation en version MultiSite ?

    1. Mélodie

      Bien entendu, puisqu’un multisites, c’est un site. Les différents sous-sites sont dans l’arborescence du site, ça ne fait donc pas de différence.

  15. Chafik

    Bonsoir,

    Apparement cette manip empêche même l téléchargement de fichier qu’on propose dans le cadre de notre site! genre cadeau gratuit, etc.
    Donc c’est quoi la solution s’il y en a une, pour qu’on puisse autoriser les autres à télécharger un fichier à partir de notre espace d’hébergement?

    1. Aurélien Denis auteur de l’article

      Cela m’étonne car j’ai déjà utilisé ce type d’options de sécurité sans soucis. Ne serait-ce pas un plugin qui te poserait problème ?

      1. Chafik

        Mais c’est écrit : Vos répertoires ne sont désormais plus accessibles en lecture et leur contenu est donc protégé de tout téléchargement.

        Donc, les repertoires ou fichiers ajoutés ne seront plus accessibles !

  16. Chafik

    C’est bon aurélien problème résolu, il fallait juste mettre l’adresse entière pour pouvoir télécharger un fichier sinon on peut pas accéder aux repertoires. Merci

  17. Phil D

    Chez OnLine la ligne de code à insérer dans .htaccess est différente , il faut mettre :
    « IndexOptions –Indexes » et non « Options All –Indexes »
    sinon on a erreur 500 et tout est bloqué.

  18. Nico

    A l’aide!!

    J’ai fais cette manip, tout à disparu
    Plus rien dans mon FTP, mon site affiche:
    Index of /
    Name Last modified Size Description

    Et plus moyen d’accéder à mon admin!!

    Quelqu’un aurait-il une solution?

    1. Aurélien Denis auteur de l’article

      Supprimes le fichier .htaccess et tout devrait rentrer dans l’ordre.

      1. Nico

        Le problème c’est qu’il n’a plus rien de visible dans mon ftp. Hors les fichiers sont toujours présent, le favicon dans la barre d’adresse du navigateur est toujours présent.
        J’ai résolu le problème en renvoyant tous les fichiers et dossiers du site par ftp d’une sauvegarde que j’avais faite, la tout est revenu dans l’ordre, mais je sais pas si c’est une bonne solution, à mon avis maintenant tout est en double, les fichiers cachés par la manip et les fichiers que j’ai renvoyé manuellement

  19. Nico

    Voilà ce que j’ai trouvé mais pas encore testé:
    URl de la page: http://www.wiscocomputing.com/articles/using_htaccess.htm

    Prevent Directory Listings

    Most web servers are configured to automatically find an index file in every web site directory. Your web host may use a global configuration setting that allows the listing of all files in all directories. If you type the URL http://www.wiscocomputing.com, the page that is actually displayed is http://www.wiscocomputing.com/index.htm. If your web site has a cgi-bin directory, and your web host has directory browsing enabled, you have a potential security nightmare. If a hacker enters http://www.yourdomain.com/cgi-bin/ , and the web server can not find an index page in the cgi-bin directory, all of your executable cgi scripts will be listed. If you have a folder of images in a directory that doesn’t have a default file (index.htm), it could also be browsed. Placing an index.htm file in all subdirectories that you want to protect from these hackers and snoops is one way to stop directory listings. Adding the following command to your .htaccess file located in your root directory is another way to prevent directory browsing:

    IndexIgnore *

    1. Nico

      Je viens de testé:

      Ca fonctionne pour moi, voici ce qui s’affiche:

      Index of /wp-admin/css

      Name Last modified Size Description

      1. Aurélien Denis auteur de l’article

        Je trouve vraiment curieux que tes fichiers aient disparu. Es-tu sûr de ne pas commettre une fausse manipulation ?

        Le fait d’ajouter une ligne de code dans le fichier caché .htaccess ne supprime en rien le contenu présent sur le http://FTP...

        Au pire, ton site est inaccessible et dans ce cas, il suffit de supprimer le fichier bloquant.

        1. Nico

          je vais réessayer je te tiens au courant

          1. Nico

            Bon j’ai réessayé votre technique, cette fois tout marche à merveille ! Encore désolé du mal entendu, j’ai du faire une fausse manip, mais ou !?
            En tout cas ça rappel une chose, toujours effectuer une sauvegarde de votre BD et une sauvegarde complete du contenu de votre site!

  20. bertrande

    Bonjour
    j’ai testé mais je rencontre un problème.
    Une fois le code mis, je n’ai plus accès à la page admin.
    je suis hébergé chez phpnet.
    quelle est la démarche à suivre
    Par avance merci
    ps : très bonne vidéo
    arnaud

  21. Aurélien Denis auteur de l’article

    Réponse également adressé par mail. 😉

    Cette option ne fonctionne que sur les serveurs Apache. En cas de soucis, le mieux est de supprimer la ligne pour revenir à l’état initial.

    C’est difficile de fournir une réponse toute prête car cela dépend du serveur.

  22. bertrande

    Comment faire sous serveur phpnet alors
    merci pour votre réponse

    1. Aurélien Denis auteur de l’article

      Le mieux est de poser la question à ton hébergeur qui devrait être en mesure de te répondre. 😉

  23. Gone

    Merci , vraiment, merci !!!! Cette astuce, est simple direct et FONCTIONNELLE !!!! MERCI 1000 FOIS !!!

  24. Flobogo

    Merci pour cette petite astuce simple à mettre en œuvre, et qui fonctionne à merveille ! Ca sécurise un peu plus l’ensemble … même quand on n’a rien à cacher 😉

    1. Aurélien Denis auteur de l’article

      Le problème n’est pas d’avoir des choses à cacher ou non… mais à éviter que votre site ne serve de porte d’entrée pour en pirater d’autres. 😉

  25. PureNrgy

    Bonjour,
    Avant de faire des bêtises, lol, si je comprends bien: si mon FTP est sur net2ftp car mon hébergeur est OVH, cette astuce ne marchera pas, correct?
    ESt-ce OK de créer aussi un accès FTP sur Apache en + alors, pour faire cette manipulation?
    Merci 🙂
    Bon weekend

  26. PureNrgy

    ps: désolé, tu peux effacer ou oublier mon commentaire, j’ai compris apparemment que mon hébergeur et ftp = ok, apache aussi. merci 🙂

    1. Aurélien Denis auteur de l’article

      Non je laisse tout les commentaires, cela permet à d’autres de progresser. 😉

      1. PureNrgy

        c’est vrai aussi 🙂

  27. Guillaume

    Moi j’obtiens une erreur 403 et non 404, c’est pareil ?

    Très bonne astuce en tout cas ! 😉

    1. Kalagan

      J’obtiens également une erreur 403 (page interdite) et non une erreur 404 (page introuvable). Ce qui peut indiquer à un pirate qu’une URL correspond à un répertoire. Je me content de cette solution pour l’instant, mais une redirection vers une erreur 404 serait plus sécurisante.

  28. Philippe

    Bonjour et merci pour ce très bon site
    Pour ma part étant chez phpnet en mutualisé cette astuce option All -index générait une erreur 500 !
    La solution qui marche est de rajouter la ligne Options -Indexes dans le htaccess

  29. kinmar56

    Bonjour. J’avais déjà essayé cette astuce avec succès. Seul soucis c’est que j’ai régulièrement besoin d’accéder à ce dossier « Upload » car je travaille avec beaucoup d’image et il est plus simple pour moi de piocher les liens d’images directement sur l’Upload. Il y a une solution pour bloquer l’accès à ce dossier tout en permettant à l’Admin par exemple d’y accéder ? J’avais vu des astuces à droite à gauche mais à chaque fois j’étais bloqué ou alors les images ne s’affichaient plus sur mon site. Merci.

  30. Laurent

    Bonjour Aurélien,

    Merci 1000 fois pour cette astuce !!
    Exactement ce que je cherchais…

    Et par le plus grand des hasards, auriez-vous une idée pour cet autre problème que j’ai :
    j’ai un pdf que j’offre en cadeau contre inscription à ma newsletter. Le pdf est dans le wp-content/uploads/xxx
    Mon problème est qu’il est référencé par google. Pourtant j’ai bien le plugin yoast et j’ai bien réglé le Méta Robots Index à « noindex » pour ce pdf en question…
    C’est embettant car n’importe qui peut trouver le cadeau avec une recherche google :-S
    Désolé pour le hors sujet car ça n’a rien à voir avec l’article de base.

    En tout cas bravo pour votre blog que je consulte fréquemment !

    A très bientôt !

  31. Naz Oke

    Bonjour Aurélien, je suis tombée sur ton article en cherchant des infos pour trouver une solution, pour les fichier pdf qui me donnent une erreur 403… (pas de soucis pour les images qui se trouvent dans le même répertoire).
    Aurais-tu une suggestion ?
    Merci beaucoup.

    1. Aurélien Denis auteur de l’article

      Vérifies que ton fichier ne comporte pas de caractères accentués ou d’espace… si les images fonctionnent il y a peut être une restriction spéciale sur les PDF mais cela serait curieux.

  32. Bruno Roch

    Bonjour,

    Merci. Cela fonctionne chez moi.

    Bien à vous

    Bruno Roch

    ps. Avez-vous un plugin pour une liste d’article (cliquable) défliante du type news… (comme tout en bas ici : http://www.lemonde.fr/)

    1. Darknote

      bonsoir,
      vous parlez du carousel en bas de la page du site Le Monde , si oui peut être tester le pluign Shortcodes Ultimate

  33. Frankis

    le probleme dans mon cas c’est que je ne peux PLUS RIEN acceder…. y compris la homepage ….. quelle est la solution ?

    1. Aurélien Denis auteur de l’article

      Il convient de supprimer les lignes insérées et de vider son cache navigateur pour que cela rentre dans l’ordre.

  34. OlalaWeb

    Bonjour Aurélien et merci pour cet article.

    Savez-vous comment faire pour empêcher totalement l’affichage des médias de wp-content hors du site ?

    Par exemple, comment éviter que les médias puissent apparaitre dans Google Image ?

    Merci d’avance 😉

  35. Jean-Charles Cotting

    Bonjour Aurélien, merci pour cette astuce très utile. Petite question, comment faire pour que le contenu de uploads ne soit pas disponible via les recherches google par exemple.
    Grâce à votre astuce le répertoire uploads n’est plus accessible, par contre, si je recherche les mots clés de documents se trouvant dans uploads, j’arrive à contourner cette protection et accéder aux fichiers.
    Si vous connaissez la solution, je suis preneur.
    D’avance un tout grand merci pour votre aide.
    Jean-Charles

    1. Aurélien Denis auteur de l’article

      En intervenant sur le fichier robots.txt par exemple.

  36. Jean-Charles Cotting

    Extra merci,
    j’ai créé un fichier robots.txt que j’ai placé à la racine de mon site
    dont le contenu est :
    User-agent: *
    Disallow: /cgi-bin/
    Disallow: /wp/
    Disallow: /wp/wp-content/uploads/

    les fichiers dont j’aimerais bloquer l’accès se trouvent dans le répertoire /wp/wp-content/uploads/

    j’ai retenté une recherche via google, j’accède toujours aux fichiers. Y a-t-il un délai de prise en compte du fichier robots.txt par les moteurs de recherche ?

    1. Aurélien Denis auteur de l’article

      Le disallow sur le répertoire racine de WordPress, on va éviter 😉

      Ce n’est pas très logique de bloquer l’accès aux fichiers envoyés qui seront de toute manière présents dans les contenus du site…

      Sinon, oui il faut attendre que Google fasse son travail.

      Pour un blocage immédiat à tous les visiteurs, il reste htaccess / htpasswd mais pour ce répertoire il ne FAUT PAS le faire. 😉

      1. Jean-Charles Cotting

        Merci Aurélien,
        Dans uploads, j’ai des contenus disponibles seulement sur abonnement, d’où l’idée de bloquer leur accès, je vais créer un sous-répertoire pour ces contenus et bloquer ce sous-répertoire ce qui sera plus logique.
        Merci beaucoup pour votre aide, je m’en vais de ce pas faire un don.

  37. Luis

    Bonjour Aurélien et bonjour tout le onde.

    J’étais en train de tester la solution sur mon serveur local et avant même de rajouter la ligne de code au .htaccess je tombe sur une erreur 403 Forbidden. Le fait de rajouter la ligne ne change rien, on a toujours l’erreur 403.
    J’imagine que c’est du à la configuration de mon serveur, ça se situe dans le php.ini d’après toi ?
    Est-ce qu’on peut personnaliser la page 403 avec un peu de css ?

    1. Aurélien Denis auteur de l’article

      Certains hébergeurs le font de base oui… les pages d’erreurs ne sont pas toujours personnalisables, cela dépend de la configuration serveur. Il n’est pas franchement utile de les modifier… A voir auprès de votre hébergeur. 😉

  38. Fabien

    Bonjour, merci tout d’abord pour cet article. Je me demandais si cette astuce empêcher l’indexation des images, css et js par les robots?
    Merci d’avance pour votre réponse.
    Cordialement.
    Fabien

    1. Aurélien Denis auteur de l’article

      Les données en question sont présentes dans la source de vos pages et sont donc accessibles par tout le monde y compris les robots.

      1. Fabien

        Oui évidement, j’aurais du réfléchir un peu, je devais être un peu fatigué, merci pour votre rapide réponse et à bientôt.

  39. Alex

    On peut ajouter un index.html ou autre fichier (.htaccess) par script php a la racine du site ex :

    <?php
    $overwriteOnly = "Y";

    if ($overwriteOnly == "Y") echo "Operating in Overwrite Only Mode »;
    $path = « /home/exemple/www »;
    $source = $path . « /index.html »;
    if (!file_exists($source)) die(‘Error – no source index.html file’);
    function search($dir) {
    global $source;
    global $overwriteOnly;
    $dh = opendir($dir);
    while (($filename = readdir($dh)) !== false) {
    if ( $filename !== ‘.’ AND $filename !== ‘..’ AND $filename !== ‘cgi-bin’ AND is_dir(« $dir/$filename ») ) {
    $path = $dir. »/ ».$filename;
    $target = $path . « /index.html »;
    if (!file_exists($target) AND $overwriteOnly == « Y ») {
    echo « $path skipped – no index.html file« ;
    } else {
    echo « $target « ;

    if (!copy($source,$target)) echo « Write failed for $target « ;
    if (file_exists($target)) chmod($target,0444);

    }
    search($path);
    }
    }
    closedir($dh);
    }
    search($path);
    echo « Done. »;
    ?>
    ajouter toujours a la racine un index.html

  40. Marcello

    Désolé pour ma question de novice, mais si on bloque l’accès au dossier /wp-content/uploads/, Google ne va-t-il pas générer des erreurs d’exploration. Cela veut-il dire qu’il faut obligatoirement passer les fichiers média en noindex ?

    1. Aurélien Denis auteur de l’article

      Cela n’a pas d’impacts sur les robots ici et oui les fichiers joints en général on ne les indexe pas (les médias en eux-mêmes ne disposent pas de balise noindex).

      1. Marcello

        Après une période d’observation, j’ai pourtant des erreurs dans la Search Console : Accès refusé (27, toutes dans wp-content/uploads/ )
        Dans les paramètres de Yoast SEO », j’ai réglé le type de contenu « Fichier média » sur noindex, mais j’ai toujours des erreurs 403 qui sont générées dans la Search Console.
        Je suis perdu ! Avez-vous une idée de ce que j’ai mal fait ?

  41. karim kheyar

    Bonjour, y a t-il un impact quelconque pour le référencement google à interdire l’accès à wp-content ? par défaut yoast me la bloquer dans le robots.txt, et je me questionne sur la pertinence de cela.
    Merci !

    1. Aurélien Denis auteur de l’article

      L’astuce décrite ici n’a aucune incidence sur le référencement. L’accès au /wp-content/ nécessite que l’on autorise malgré tout le crawl des fichiers CSS / JS en principe.

  42. bloa

    Bonjour
    merci bcp pour ce tuto rapide et clair
    j’ai une question qui a déjà été posée peut-être
    Sur ton site lorsqu’on ouvre une image dans un nouvel onglet et qu’on tente d’accéder au dossier parent (upload) on tombe sur ta page 404.
    Sur l’un de mes sites sur o2switch je suis bien redirigé vers une 404 (page dans laquelle je fais une redirection permanente vers l’accueil).
    sur Ovh mon site me renvoie une erreur 403 et non pas 404.
    Sais-tu par hasard comment modifier cela ??? car la page 403 forbidden est bien laide..

    1. Aurélien Denis auteur de l’article

      Étrange cela semble être davantage une histoire de droits ici…

  43. Pierre

    Bonjour,
    l’URL : « https://www.campingnoroc/wp-content/themes/enfold/framework/php » de mon site est indéxée dans google. Comment puis-je faire pour la supprimer de google?
    Par avance merci,

    Pierre

    1. Aurélien Denis auteur de l’article

      Il faut définir une règle de blocage dans votre robots.txt comme sur celui de ce blog.

Laisser un commentaire