Comment masquer mon installation Wordpress via htaccess?

9

(Je suis conscient que la sécurité via l'obscurité n'est pas recommandée).

J'essaie de cacher le fait que j'utilise Wordpress. Ce message est utile, mais il ne traite que du contenu (en quelque sorte). Je souhaite que les événements suivants se produisent:

  1. L'utilisateur essaie d'accéder à n'importe quelle URL avec wp*comme sous-chaîne via son navigateur.

    Résultat: redirigé vers la page 404.

  2. L'utilisateur / l'administrateur du blog sait qu'il doit se connecter pour se connecter http://example.com/blogin/.

    Résultat: apache les redirige vershttp://example.com/wp-admin/.

  3. Si un utilisateur essaie d'accéder directement à wp-adminpartir de son navigateur, il est envoyé au n ° 1.

    Résultat: redirigé vers la page 404.

Les choses que j'ai faites jusqu'à présent

  1. J'ai remarqué pour une installation par défaut de WordPress que je pouvais accéder à tous les wp*fichiers du répertoire racine (relatif) de l'installation WP. Plus précisément, cela a wp-settings.phpété problématique, car cela a donné des informations sur ma configuration. Si un utilisateur y accédait, il cracherait quelques erreurs PHP et révélerait une partie de la structure du répertoire. J'ai modifié mon fichier php.ini pour le display_errorsdésactiver. Maintenant, l'accès http://example.com/wp-settngs.phpfait apparaître une page vierge.

  2. Cela en soi n'est pas idéal car il révèle qu'il wp-settings.phpexiste. En fait, l'accès à tous les différents wp*fichiers est possible (avec des résultats différents). J'ai ensuite mis ce qui suit dans mon fichier htaccess:

          RewriteEngine On
          RewriteBase /
          RewriteCond %{PATH_INFO} wp* [NC]
          RewriteRule .* - [F]
    

    Cela a très bien fonctionné! Tout ce qui a un a wp*été acheminé vers ma page 404 personnalisée. Mais maintenant, je ne peux pas accéder à ma page d'administration.

  3. J'ai essayé d'insérer cette ligne dans le code ci - dessus: RewriteRule ^blogin wp-admin [NC,R,L]. C'était censé être juste après, RewriteBasemais cela n'a pas fonctionné.

  4. J'ai essayé de faire:

    <Directory /home/example/wp*> 
     Order Allow, Deny 
     Allow from example.com 
     Deny from all 
    </Directory> 
    

    en espérant qu'un référent de mon site (via la réécriture de la règle) serait en mesure d'accéder à wp-admin, mais pas à quelqu'un de l'extérieur. Cela n'a pas fonctionné non plus. apache s'est plaint que vous ne pouvez pas utiliser cette directive de htaccess.

J'ai lu la documentation d'apache; Je comprends les concepts, théoriquement, mais j'ai besoin d'une aide pratique.

EDIT: Je recherche une solution qui utilise .htaccess au lieu de httpd.conf car ma configuration particulière rend l'utilisation de httpd.conf incohérente.

Avery Chan
la source
Avez-vous essayé de renommer tous les fichiers wp * en un préfixe différent ainsi que de changer toutes les références à ces fichiers? Je pense que ce sera la chose la plus simple à faire. Bien sûr, vous pouvez opter pour la réécriture d'URL, mais vous devrez alors vous assurer que tous les liens n'utilisent pas également les noms wp *, ce qui (à mon avis) est assez similaire à la suggestion d'origine.
LazyOne
Je pense que l'un des avantages de la réécriture d'URL est que les ressources demandées peuvent être remappées vers un autre préfixe ... J'espère pouvoir le faire sans renommer tous les fichiers (ce qui est le point de passer par là) ...
Avery Chan

Réponses:

8

TLDR; Il n'est pas possible d'obscurcir WordPress en utilisant uniquement des directives dans votre fichier .htaccess.

Vient maintenant une histoire de malheur et d'horreur. Notre ami, fbh avait raison sur la difficulté de cacher WordPress, ce n'est pas pour les lâches à ventre jaune. Arr! Voici les détails de cette (mauvaise) aventure. Soyez prévenu!

Motivation

Je suis un de ces gars qui aiment les choses parfaites. Je passe de perdre du temps un peu plus de l' ingénierie à la « bonne façon ». L'une des choses que je n'aimais pas dans la configuration par défaut de WordPress était qu'un utilisateur pouvait taper http://ex.com/wp-settings.php et que tout ce jargon php cracherait partout. J'ai finalement réussi à désactiver les erreurs via PHP, mais cela a conduit à un plus grand désir de n'avoir que des choses qui faisaient depuis être des ressources localisables à partir du serveur ... et que tout le reste serait 404 / 3'ified sur notre page de recherche personnalisée. Après cela, j'ai eu l'idée que je voudrais cacher complètement le framework sous-jacent (c'est-à-dire WP) ... de toute façon ... si vous voulez cacher WP c'est possible. Mais c'est vraiment difficile.

Étapes vers votre perte

  1. Modifiez vos paramètres PHP ini de manière appropriée. (c.-à-d. désactiver les erreurs d'affichage) Vous pourriez penser que ce n'est pas nécessaire car si nous utilisons .htaccess pour rediriger les choses, les gens ne verront pas les erreurs car ils ne peuvent pas accéder aux ressources à l'origine des erreurs (je vous regarde wp-settings.php). Mais des erreurs peuvent survenir dans les pages affichées, vous devez donc absolument les supprimer. Ce WP_*n'est pas parce que les directives sont établies que les choses fonctionneront comme vous le pensez. J'ai constaté que sur mon serveur, je devais définir les display_errors sur false FIRST, car WP_DISPLAY_ERRORS supposait que le paramètre par défaut était false.

    Le contrôle des paramètres PHP ini peut être quelque chose d'aussi simple que de mettre une directive dans votre fichier .htaccess. Ou, dans mon cas, aussi compliqué que de créer un gestionnaire CGI puis d'y placer un fichier php.ini. YMMV en fonction de votre configuration.

  2. Supprimez tout accès aux fichiers / répertoires avec wp-préfixe. L'idée est que votre déploiement WP concerne votre contenu, pas WP (sauf s'il est spécifiquement axé sur WP). Cela n'a aucun sens pour les gens de vouloir voir ce que http; // ex.com/wp-cron.php a ... à moins qu'ils ne soient pas bons. J'ai accompli cela via ceci:

     # If the resource requested is a `wp-*` file or directory, poop to a 403. 
     RewriteCond %{REQUEST_FILENAME} wp-.*$ [NC] 
     RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
     RewriteCond %{REQUEST_FILENAME} -f [NC,OR] 
     RewriteCond %{REQUEST_FILENAME} -d [NC] 
     RewriteRule .* - [F,L] 
    
  3. Apprenez à passer simplement par le mordor En supprimant tout accès à wp-*vous ne pouvez plus accéder à la partie administrative de WP. Ça craint vraiment. En plus de cet inconvénient, vous venez de réaliser que vous ne savez pas ce RewriteCond %{ENV:REDIRECT_STATUS} ^$qui fait vraiment. Eh bien, ce que j'ai essayé de faire, c'est de me donner une porte dérobée «secrète» à la page d'administration de WP. J'ai utilisé ce code:

     # If the resource requested is 'mordor' (with or without an ending
     # slash) do a URL rewrite to `wp-login.php`. 
     RewriteCond %{REQUEST_URI} mordor/?$ [NC]
     RewriteRule mordor/?$ /wp-login.php [NC,L]
    

    L'URL: http://ex.com/mordor devrait donc nous amener à la page de connexion. La raison pour laquelle nous avons eu la REDIRECTligne à l'étape ci-dessus est que, puisque cette URL est réécrite dans une wp-*URL, nous ne voulons pas que la première règle de réécriture l'obtienne. Puisqu'il est redirigé en interne, REDIRECT_STATUSil sera réglé correctement et il ne nous poussera pas à atterrir 403/4.

  4. Supprimer le contenu wp Wordpress.stackexchange a un excellent article sur la suppression du contenu wp. Vous devez redéfinir certaines constantes WP et cela fonctionne à peu près. Vous devez également rediriger tous les accès de wp-contentvers «quel que soit le contenu». Ce ne sera probablement pas un problème s'il s'agit d'un déploiement propre. Si vous modifiez un déploiement préexistant, vous devrez faire des choses supplémentaires.

  5. Réécrivez les URL en wp-content facultatif RewriteRule (.*)(wp-content)(.*) $1whatever-content$3 [NC,R,L] . Cela va dans votre fichier .htaccess. Si votre utilisateur essaie d'accéder à du contenu ancien via une wp-contentURL, il sera redirigé ici.

  6. Grep et remplacez toutes les références au contenu wp dans votre base de données en option . Vous en avez encore wp-contentdans votre base de données. Si vous voulez télécharger gratuitement WP, vous devez vous débarrasser de tout ça. J'ai exporté / mysql vidé ma base de données, fait une recherche et remplacé sur la wp-contentchaîne à la nouvelle chaîne. Vous pourriez dire ... pourquoi dois-je faire cela si apache va réécrire mes URL? Le problème est que le code source contiendra ces références, donc si vous êtes vraiment intéressé à obscurcir WordPress, vous devez le faire. Remarque: À ce stade, j'aurais dû m'arrêter et accepter la réalité que cela n'allait pas fonctionner. Mais je voulais que M. T me plains.

  7. Remplacez toutes les références à wp-includeset wp-admindans la source. Une grande partie de la fonctionnalité WordPress dépend de ces deux répertoires: wp-includeset wp-admin. Cela signifie que ces noms de répertoire sont codés en dur dans le code source. Cela signifie que vous devrez créer de nouveaux répertoires (puisque PHP utilise le système de fichiers OS sous-jacent, et non apache) pour y accéder, puis ÉCRIVEZ-LES DANS LE html émis. C'est tout simplement trop de problèmes. J'ai rapidement abandonné et je suis allé aux toilettes pour prendre un caca.

Leçon

Bien sûr, j'aurais pu lire http://codex.wordpress.org/Hardening_WordPress et suivre ces étapes. Mais je voulais le site parfait. Maintenant, je veux juste retrouver toutes ces heures. La plus grande chose qui m'a empêché d'arrêter, c'est que je n'ai lu nulle part sur Internet que c'était beaucoup de travail et presque impossible à faire. Au lieu de cela, j'ai lu des gens qui essayaient de le faire sans savoir s'ils avaient réussi ou non. Donc, pour mon passé, à qui j'enverrai cela via Time Machine d'Apple, n'essayez pas d'obscurcir WordPress. Ça ne vaut pas le coup.

Avery Chan
la source
Eh bien Avery, je suis aussi un gars qui veut être parfait. Tout d'abord, je voulais créer un multisite wordpress en cachant le fait que j'utilise wordpress. J'ai traversé beaucoup de problèmes et j'ai finalement abandonné l'idée multisite. Parce que de nombreux plugins ne prennent pas en charge le multisite. Votre 7ème point indique que vous avez remplacé wp-includeset wp-admintexte manuellement. Je suis sûr que vous avez parcouru chaque fichier et remplacé manuellement. C'est parce que vous avez manqué des logiciels utiles. Par exemple, vous auriez pu essayer grepwin ce qui rend ce travail plus facile
Giri
4

Si vous essayez de cacher que vous utilisez wordpress à cause des crackers, alors vous avez vraiment du travail à faire. Si vous faites l'astuce wp *, qu'en est-il du contenu wp et des inclusions wp? Sans pouvoir les atteindre, vous casserez la page et elle aura l'air horrible.

De plus, il y a tellement de choses dans Wordpress que cela prend vraiment un peu de travail - et vous devrez probablement en refaire beaucoup une fois qu'une mise à niveau est installée. (Comme quelques redirections dans Apache ne feront pas l'affaire)

Si vous essayez simplement de le cacher à M. et Mme tout le monde, alors bien sûr, vous devriez être en mesure de le faire avec obscurité.

Avez-vous lu le guide "durcissement de Wordpress"? Sinon, vous devriez le vérifier: http://codex.wordpress.org/Hardening_WordPress Il donne une excellente introduction à beaucoup de choses que vous pouvez faire.

De plus, si vous êtes si désireux de cacher le fait que vous utilisez Wordpress, pourquoi l'utiliser?

Frands Hansen
la source
1. Re: wp-content / wp-includes lien Voir en poste 2. J'ai lu le guide de WordPress de durcissement. 3. Vous pouvez facilement répondre à votre dernière question en parcourant le lien que j'ai publié. Je n'essaie pas d'être impoli, mais cette question n'a pas grand-chose à voir avec les mérites techniques de ma propre question. Beaucoup de gens utilisent différents outils mais ne souhaitent pas en faire la publicité. Pour certains, c'est une décision commerciale.
Avery Chan
0

Essayez de faire votre configuration dans la configuration apache. Cela peut être une inclusion de fichier comme /etc/wordpress/htaccess. Cela vous permettra d'utiliser la Directorydirective de configuration. Cependant, vous devrez redémarrer apache pour charger les modifications. Utilisez le redémarrage gracieux si vous ne voulez pas d'interruptions de service.

Pour restreindre l'accès aux .htaccessrépertoires avec des fichiers, ils doivent se trouver dans les répertoires appropriés. Ils fonctionnent comme le contenu d'une Directorydirective de configuration. Vous devrez peut-être activer les .htaccessoptions requises dans votre configuration Apache. Cette méthode n'est pas aussi efficace que l'utilisation de la commande dans la configuration d'apache car elle doit être répétée fréquemment.

BillThor
la source
Je recherche une solution qui ne nécessite pas de modifier mon fichier httpd.conf car cela peut être écrasé (je suis sur un hôte privé virtuel). Je vais modifier la question de manière appropriée.
Avery Chan
@Avry: Vous devrez placer les directives que vous mettriez dans la configuration <Directory> dans un .htaccessfichier dans le répertoire correspondant. Remarque: Apache vous recommande d'utiliser la configuration si possible. Utilisez le contrôle de version pour vous protéger contre les écrasements.
BillThor