Wie kann ich meine Wordpress-Installation über htaccess verdecken?

9

(Mir ist bewusst, dass Sicherheit durch Dunkelheit nicht empfohlen wird).

Ich versuche die Tatsache zu verbergen, dass ich Wordpress verwende. Dieser Beitrag ist hilfreich, befasst sich jedoch nur mit dem Inhalt (Art). Ich bin daran interessiert, dass Folgendes auftritt:

  1. Der Benutzer versucht, wp*über seinen Browser auf eine URL mit einer Teilzeichenfolge zuzugreifen .

    Ergebnis: Auf 404-Seite umgeleitet.

  2. Der Blog-Benutzer / Administrator weiß, dass er sich anmelden muss, um sich anzumelden http://example.com/blogin/.

    Ergebnis: Apache leitet sie an weiterhttp://example.com/wp-admin/.

  3. Wenn ein Benutzer versucht, direkt wp-adminvon seinem Browser aus darauf zuzugreifen , wird er an Nummer 1 gesendet.

    Ergebnis: Auf 404-Seite umgeleitet.

Dinge, die ich bisher gemacht habe

  1. Bei einer Standardinstallation von WordPress ist mir aufgefallen, dass ich auf alle wp*Dateien im (relativen) Stammverzeichnis der WP-Installation zugreifen kann . Insbesondere wp-settings.phpwar problematisch, weil es Informationen über meine Einrichtung gab. Wenn ein Benutzer darauf zugreift, werden einige PHP-Fehler ausgegeben und ein Teil der Verzeichnisstruktur angezeigt. Ich habe meine php.ini-Datei bearbeitet, um sie display_errorsauszuschalten. Beim Zugriff http://example.com/wp-settngs.phpwird eine leere Seite angezeigt.

  2. Dies an sich ist nicht ideal, weil es zeigt, dass es wp-settings.phpexistiert. Tatsächlich ist der Zugriff auf alle verschiedenen wp*Dateien möglich (mit unterschiedlichen Ergebnissen). Ich habe dann folgendes in meine htaccess-Datei eingefügt:

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

    Das hat super geklappt! Alles mit einem wp*wurde auf meine benutzerdefinierte 404-Seite weitergeleitet. Aber jetzt kann ich nicht auf meine Admin-Seite zugreifen.

  3. Ich habe versucht, diese Zeile in den obigen Code einzufügen : RewriteRule ^blogin wp-admin [NC,R,L]. Es sollte gleich danach sein, RewriteBaseaber das hat nicht funktioniert.

  4. Ich habe versucht:

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

    Ich hoffe, dass ein Referer von meiner Site (über das Umschreiben der Regel) auf wp-admin zugreifen kann, aber nicht auf jemanden von außerhalb. Das hat auch nicht funktioniert. apache hat sich beschwert, dass Sie diese Anweisung von htaccess nicht verwenden können.

Ich habe die Apache-Dokumentation gelesen. Ich verstehe die Konzepte theoretisch, aber ich brauche praktische Hilfe.

BEARBEITEN: Ich suche nach einer Lösung, die .htaccess anstelle von httpd.conf verwendet, da mein spezielles Setup die Verwendung von httpd.conf inkonsistent macht.

Avery Chan
quelle
Haben Sie versucht, alle wp * -Dateien in ein anderes Präfix umzubenennen und alle Verweise auf solche Dateien zu ändern? Ich denke, das wird am einfachsten sein. Natürlich können Sie mit dem Umschreiben von URLs beginnen, aber dann müssen Sie sicherstellen, dass nicht alle Links auch wp * -Namen verwenden, was (meiner Meinung nach) dem ursprünglichen Vorschlag ziemlich ähnlich ist.
LazyOne
Ich denke, einer der Vorteile des Umschreibens von URLs besteht darin, dass angeforderte Ressourcen einem anderen Präfix zugeordnet werden können ... Ich hoffe, dass ich dies tun kann, ohne alle Dateien umzubenennen (was der Grund dafür ist) ...
Avery Chan

Antworten:

8

TLDR; Es ist nicht möglich, WordPress zu verschleiern, indem Sie nur Anweisungen in Ihrer .htaccess-Datei verwenden.

Jetzt kommt eine Geschichte von Leid und Entsetzen. Unser Freund fbh hatte Recht mit der Schwierigkeit, WordPress zu verstecken, nicht für Feiglinge mit gelbem Bauch. Arr! Hier sind die Details dieses (falschen) Abenteuers. Ihr seid gewarnt!

Motivation

Ich bin einer von denen, die Dinge perfekt mögen. Ich werde Zeit damit verschwenden, etwas zu überarbeiten, um der „richtige Weg“ zu sein. Eines der Dinge, die mir am Standard-WordPress-Setup nicht gefallen haben, war, dass ein Benutzer http://ex.com/wp-settings.php eingeben konnte und dann all dieser PHP-Jargon überall herumspuckte. Ich war schließlich in der Lage, Fehler über PHP auszuschalten, aber das führte zu einem größeren Wunsch, nur Dinge zu haben, die seitdem als lokalisierbare Ressourcen vom Server gemacht wurden ... und dass alles andere auf unserer benutzerdefinierten Suchseite 404 / 3'-bestätigt würde. Danach kam mir die Idee, dass ich das zugrunde liegende Framework (dh WP) vollständig ausblenden möchte ... sowieso ... wenn Sie WP ausblenden möchten, ist dies möglich. Aber es ist wirklich schwer.

Schritte in dein Verderben

  1. Ändern Sie Ihre PHP-INI-Einstellungen entsprechend. (dh Anzeigefehler deaktivieren ) Sie denken möglicherweise, dass dies nicht erforderlich ist, da bei Verwendung von .htaccess zum Umleiten von Dingen keine Fehler angezeigt werden, da sie nicht auf die fehlerverursachenden Ressourcen zugreifen können (ich sehe Sie an wp-settings.php). Auf den angezeigten Seiten können jedoch Fehler auftreten, sodass Sie sie auf jeden Fall deaktivieren möchten. Nur weil WP_*Richtlinien festgelegt sind, bedeutet dies nicht unbedingt, dass die Dinge so funktionieren, wie Sie es sich vorstellen. Ich habe festgestellt, dass ich auf meinem Server die display_errors auf false FIRST setzen musste, da WP_DISPLAY_ERRORS davon ausgegangen ist, dass die Standardeinstellung false ist.

    Das Steuern der PHP-INI-Einstellungen kann so einfach sein wie das Einfügen einer Direktive in Ihre .htaccess-Datei. Oder in meinem Fall so kompliziert wie das Erstellen eines CGI-Handlers und das anschließende Ablegen einer php.ini-Datei. YMMV abhängig von Ihrer Einrichtung.

  2. Entfernen Sie jeglichen Zugriff auf Dateien / Verzeichnisse mit wp-Präfix. Die Idee ist, dass es bei Ihrer WP-Bereitstellung um Ihren Inhalt geht, nicht um WP (es sei denn, es ist speziell auf WP ausgerichtet). Es macht keinen Sinn, dass die Leute sehen wollen, was http; // ex.com/wp-cron.php hat ... es sei denn, sie haben nichts Gutes vor. Ich habe dies folgendermaßen erreicht:

     # 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. Erfahren Sie, wie Sie mordor einfach durchlaufen. Wenn Sie den gesamten Zugriff auf entfernen, erhalten wp-*Sie keinen Zugriff mehr auf den administrativen Teil von WP. Das ist wirklich scheiße. Zusätzlich zu diesem Wermutstropfen haben Sie gerade festgestellt, dass Sie nicht wissen, was RewriteCond %{ENV:REDIRECT_STATUS} ^$wirklich funktioniert. Nun, ich habe versucht, mir eine "geheime" Hintertür zur WP-Administrationsseite zu geben. Ich habe diesen Code verwendet:

     # 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]
    

    Die URL: http://ex.com/mordor sollte uns also zur Anmeldeseite bringen. Der Grund, warum wir die REDIRECTZeile im obigen Schritt hatten, ist, dass wp-*wir nicht möchten, dass die erste Umschreiberegel sie erhält, da diese URL in eine URL umgeschrieben wird . Da es intern umgeleitet wird, REDIRECT_STATUSwird es richtig eingestellt und es wird uns nicht auf 403/4 Land drängen.

  4. Entfernen von wp-Inhalten Wordpress.stackexchange bietet einen großartigen Artikel zum Entfernen von wp-Inhalten. Sie müssen einige WP-Konstanten neu definieren und das funktioniert so ziemlich. Sie müssen auch alle Zugriffe von wp-content"Was auch immer-Inhalt" umleiten. Dies ist wahrscheinlich kein Problem, wenn es sich um eine saubere Bereitstellung handelt. Wenn Sie eine bereits vorhandene Bereitstellung ändern, müssen Sie einige zusätzliche Aufgaben ausführen.

  5. URLs in wp-content umschreiben optional RewriteRule (.*)(wp-content)(.*) $1whatever-content$3 [NC,R,L] . Dies geht in Ihre .htaccess-Datei. Wenn Ihr Benutzer versucht, über eine wp-contentURL auf alte Inhalte zuzugreifen , werden diese hier umgeleitet.

  6. Grep und ersetzen Sie alle Verweise auf wp-Inhalt in Ihrer DB optional . Sie haben noch wp-contentin Ihrer Datenbank. Wenn du WP frei haben willst, musst du das Zeug loswerden. Ich habe meine Datenbank exportiert / mysql ausgegeben, eine Suche durchgeführt und die wp-contentZeichenfolge durch die neue ersetzt. Sie könnten sagen ... warum muss ich das tun, wenn Apache meine URLs neu schreibt? Das Problem ist, dass der Quellcode diese Referenzen enthält. Wenn Sie also wirklich daran interessiert sind, WordPress zu verschleiern, müssen Sie dies tun. Hinweis: Zu diesem Zeitpunkt hätte ich einfach aufhören und die Realität akzeptieren sollen, dass dies nicht funktionieren würde. Aber ich wollte, dass Mr. T mich bemitleidet.

  7. Ersetzen Sie alle Verweise auf wp-includesund wp-adminin der Quelle. Ein Großteil der WordPress-Funktionalität hängt von diesen beiden Verzeichnissen ab: wp-includesund wp-admin. Dies bedeutet, dass diese Verzeichnisnamen im Quellcode fest codiert sind. Dies bedeutet, dass Sie neue Verzeichnisse erstellen müssen (da PHP das zugrunde liegende Betriebssystem-Dateisystem verwendet, nicht Apache), um auf diese zuzugreifen, und diese dann in das ausgegebene HTML schreiben müssen. Das ist einfach viel zu viel Mühe. Ich gab schnell auf und ging ins Badezimmer, um einen Kot zu machen.

Lektion

Klar, ich hätte einfach http://codex.wordpress.org/Hardening_WordPress lesen und diese Schritte befolgen können. Aber ich wollte die perfekte Seite. Jetzt will ich nur noch all diese Stunden zurück. Das Größte, was mich daran hinderte anzuhalten, war, dass ich nirgendwo im Internet gelesen habe, dass dies eine Menge Arbeit war und fast unmöglich zu tun war. Stattdessen las ich von Leuten, die versuchten, es zu tun, ohne zu wissen, ob sie erfolgreich waren oder nicht. Also, an mein früheres Ich, an das ich dies über Apples Time Machine senden werde, versuchen Sie bitte nicht, WordPress zu verschleiern. Es lohnt sich nicht.

Avery Chan
quelle
Nun, Avery, ich bin auch einer der Typen, die perfekt sein wollen. Zuerst wollte ich eine WordPress-Multisite erstellen, indem ich die Tatsache verstecke, dass ich WordPress verwende. Ich habe viele Probleme durchgemacht und schließlich die Multisite-Idee fallen gelassen. Weil viele Plugins Multisite nicht unterstützen. Ihr 7. Punkt zeigt an, dass Sie ersetzt wp-includesund wp-adminmanuell geschrieben haben. Ich bin mir ziemlich sicher, dass Sie jede einzelne Datei durchsucht und manuell ersetzt haben. Das liegt daran, dass Sie einige nützliche handliche Software verpasst haben. Zum Beispiel hätten Sie Grepwin ausprobieren können , was diese Arbeit einfacher macht
Giri
4

Wenn Sie versuchen zu verbergen, dass Sie WordPress wegen Crackern verwenden, dann haben Sie wirklich etwas zu tun. Wenn Sie den wp * -Trick ausführen, was ist dann mit wp-content und wp-includes? Ohne diese erreichen zu können, werden Sie die Seite brechen und es wird schrecklich aussehen.

Außerdem gibt es in Wordpress so viele Dinge, dass dies wirklich einige Arbeit erfordert - und Sie werden höchstwahrscheinlich viel davon erneut tun müssen, wenn ein Upgrade installiert wird. (Da einige Weiterleitungen in Apache nicht ausreichen)

Wenn Sie nur versuchen, es vor Herrn und Frau allen zu verbergen, sollten Sie das natürlich etwas mit Dunkelheit tun können.

Haben Sie die Anleitung zum Härten von Wordpress gelesen? Wenn nicht, sollten Sie es sich ansehen : http://codex.wordpress.org/Hardening_WordPress Es bietet eine großartige Einführung in viele Dinge, die Sie tun können.

Wenn Sie die Tatsache, dass Sie Wordpress verwenden, unbedingt verbergen möchten, warum sollten Sie es dann verwenden?

Frands Hansen
quelle
1. Betreff: wp-content / wp-includes Siehe Link in Beitrag 2. Ich habe die Anleitung zum Härten von WordPress gelesen. 3. Ihre letzte Frage kann leicht beantwortet werden, indem Sie den von mir geposteten Link lesen. Ich versuche nicht unhöflich zu sein, aber diese Frage hat wenig mit den technischen Vorzügen meiner eigenen Frage zu tun. Viele Leute verwenden verschiedene Tools, möchten diese aber nicht bewerben. Für einige ist es eine Geschäftsentscheidung.
Avery Chan
0

Versuchen Sie, Ihre Konfiguration in der Apache-Konfiguration vorzunehmen. Dies kann ein Include von Dateien wie sein /etc/wordpress/htaccess. Auf diese Weise können Sie die DirectoryKonfigurationsanweisung verwenden. Sie müssen jedoch Apache neu starten, um Änderungen zu laden. Verwenden Sie den ordnungsgemäßen Neustart, wenn Sie keine Dienstunterbrechungen wünschen.

Um Verzeichniszugriffe mit .htaccessDateien einzuschränken , müssen sie sich in den entsprechenden Verzeichnissen befinden. Sie funktionieren ähnlich wie der Inhalt einer DirectoryKonfigurationsanweisung. Möglicherweise müssen Sie die erforderlichen .htaccessOptionen in Ihrer Apache-Konfiguration aktivieren . Diese Methode ist nicht so effizient wie die Verwendung von Befehlen in der Apache-Konfiguration, da sie häufig repariert werden muss.

BillThor
quelle
Ich suche nach einer Lösung, bei der meine httpd.conf-Datei nicht bearbeitet werden muss, da diese überschrieben werden kann (ich bin auf einem virtuellen privaten Host). Ich werde die Frage entsprechend bearbeiten.
Avery Chan
@Avry: Sie müssen die Anweisungen, die Sie in die Konfiguration <Verzeichnis> einfügen würden, in einer .htaccessDatei im entsprechenden Verzeichnis ablegen . Hinweis: Apache empfiehlt, wenn möglich, die Konfiguration zu verwenden. Verwenden Sie die Versionskontrolle, um sich vor Überschreibungen zu schützen.
BillThor