Jak ukryć moją instalację Wordpress przez htaccess?

9

(Zdaję sobie sprawę, że bezpieczeństwo za pomocą zaciemnienia nie jest zalecane).

Próbuję ukryć fakt, że korzystam z Wordpress. Ten post jest pomocny, ale dotyczy tylko treści (w pewnym sensie). Jestem zainteresowany wystąpieniem następujących zdarzeń:

  1. Użytkownik próbuje uzyskać dostęp do dowolnego adresu URL wp*jako podciągu za pośrednictwem swojej przeglądarki.

    Wynik: przekierowano na stronę 404.

  2. Użytkownik / administrator bloga wie, aby się zalogować, do którego powinien przejść http://example.com/blogin/.

    Wynik: apache przekierowuje je dohttp://example.com/wp-admin/.

  3. Jeśli użytkownik spróbuje uzyskać bezpośredni dostęp wp-adminz przeglądarki, zostanie wysłany na numer 1.

    Wynik: przekierowano na stronę 404.

Rzeczy, które do tej pory zrobiłem

  1. Zauważyłem, że w przypadku domyślnej instalacji WordPress mogę uzyskać dostęp do dowolnego wp*pliku w (względnym) katalogu głównym instalacji WP. W szczególności wp-settings.phpbyło problematyczne, ponieważ ujawniało informacje o mojej konfiguracji. Jeśli użytkownik uzyska do niego dostęp, wypluje niektóre błędy PHP i ujawni część struktury katalogów. Zedytowałem plik php.ini, aby go display_errorswyłączyć. Teraz dostęp http://example.com/wp-settngs.phppowoduje wyświetlenie pustej strony.

  2. To samo w sobie nie jest idealne, ponieważ ujawnia, że wp-settings.phpistnieje. W rzeczywistości wp*możliwy jest dostęp do wszystkich różnych plików (z różnymi wynikami). Następnie wstawiam następujące elementy do mojego pliku htaccess:

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

    To działało świetnie! Wszystko ze znakiem wp*zostało przekierowane na moją niestandardową stronę 404. Ale teraz nie mogę uzyskać dostępu do mojej strony administratora.

  3. Próbowałem wstawić tę linię do powyższego kodu: RewriteRule ^blogin wp-admin [NC,R,L]. Miało być zaraz potem, RewriteBaseale to nie zadziałało.

  4. Próbowałem zrobić:

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

    mając nadzieję, że osoba odsyłająca z mojej strony (poprzez przepisanie reguły) będzie mogła uzyskać dostęp do wp-admin, ale nie z zewnątrz. To też nie działało. Apache narzekał, że nie można użyć tej dyrektywy od htaccess.

Przeczytałem dokumentację apache; Teoretycznie rozumiem pojęcia, ale potrzebuję praktycznej pomocy.

EDYCJA: Szukam rozwiązania, które używa .htaccess zamiast httpd.conf, ponieważ moja konkretna konfiguracja sprawia, że ​​używanie httpd.conf jest niespójne.

Avery Chan
źródło
Czy próbowałeś zmienić nazwę wszystkich plików wp * na inny prefiks, a także zmienić wszystkie odwołania do takich plików? Myślę, że będzie to najłatwiejsza rzecz do zrobienia. Oczywiście możesz przejść do przepisywania adresów URL, ale będziesz musiał upewnić się, że wszystkie linki również nie używają nazw wp *, co jest (moim zdaniem) dość podobne do oryginalnej sugestii.
LazyOne
Myślę, że jedną z zalet przepisywania adresów URL jest to, że żądane zasoby można zmienić na inny prefiks ... Mam nadzieję, że mogę to zrobić bez zmiany nazwy wszystkich plików (co jest celem przejścia przez to) ...
Avery Chan,

Odpowiedzi:

8

TLDR; Nie można zasłonić WordPressa, używając tylko dyrektyw w pliku .htaccess.

Teraz nadchodzi opowieść o nieszczęściu i przerażeniu. Nasz przyjaciel, fbh, miał rację co do trudności z ukryciem WordPressa, nie dla żółtodziobych tchórzy. Arr! Oto szczegóły tej (błędnej) przygody. Ostrzegam!

Motywacja

Jestem jednym z tych facetów, którzy lubią rzeczy idealne. Będę spędzać czas zużyty nadmiernej inżynierii coś za „właściwy sposób”. Jedną z rzeczy, które nie podobały mi się w domyślnej konfiguracji WordPress, było to, że użytkownik mógł wpisać http://ex.com/wp-settings.php, a potem cały ten żargon php wyrzucałby wszędzie. W końcu udało mi się wyłączyć błędy przez PHP, ale doprowadziło to do większego pragnienia posiadania tylko rzeczy, które stworzyły od tego czasu zasoby lokalizowalne z serwera ... i że wszystko inne byłoby 404 / 3'ified na naszej niestandardowej stronie wyszukiwania. Potem wpadłem na pomysł, że chciałbym całkowicie ukryć podstawową strukturę (tj. WP) ... w każdym razie ... jeśli chcesz ukryć WP, jest to możliwe. Ale to naprawdę trudne.

Kroki do swojej zagłady

  1. Zmodyfikuj odpowiednio ustawienia ini PHP. (tj. wyłącz błędy wyświetlania) Możesz pomyśleć, że nie jest to konieczne, ponieważ jeśli używamy .htaccess do przekierowywania rzeczy, ludzie nie zobaczą błędów, ponieważ nie mogą uzyskać dostępu do błędu powodującego zasoby (patrzę na ciebie wp-settings.php). Ale na wyświetlanych stronach mogą wystąpić błędy, więc zdecydowanie chcesz je wyłączyć. To, że WP_*określone są dyrektywy, niekoniecznie oznacza, że ​​wszystko będzie działało tak, jak myślisz. Odkryłem, że na moim serwerze musiałem ustawić wartość display_errors na false PIERWSZY, ponieważ WP_DISPLAY_ERRORS założył, że ustawienie domyślne to false.

    Kontrolowanie ustawień PHP ini może być tak proste, jak umieszczenie dyrektywy w pliku .htaccess. Lub, w moim przypadku, tak skomplikowane, jak utworzenie modułu obsługi CGI, a następnie umieszczenie w nim pliku php.ini. YMMV w zależności od konfiguracji.

  2. Usuń cały dostęp do plików / katalogów z wp-prefiksem. Chodzi o to, aby wdrożenie WP dotyczyło treści, a nie WP (chyba że jest skoncentrowane na WP). Ludzie nie mają sensu widzieć, co ma http; // ex.com/wp-cron.php ... chyba że nie jest to dobre. Osiągnąłem to przez to:

     # 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. Dowiedz się, jak po prostu przejść przez mordor Usuwając cały dostęp, wp-*nie możesz już uzyskać dostępu do części administracyjnej WP. To naprawdę do bani. Oprócz tego downer, właśnie zdałeś sobie sprawę, że nie wiesz, co RewriteCond %{ENV:REDIRECT_STATUS} ^$naprawdę robi. Cóż, próbowałem zrobić sobie „tajne” backdoor do strony administratora WP. Użyłem tego kodu:

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

    Tak więc adres URL: http://ex.com/mordor powinien doprowadzić nas do strony logowania. Powodem, dla którego mieliśmy REDIRECTwiersz w powyższym kroku, jest to, że ponieważ ten adres URL zostaje przepisany na wp-*adres URL, nie chcemy, aby pierwsza reguła przepisywania go otrzymała. Ponieważ jest przekierowywany wewnętrznie, REDIRECT_STATUSzostanie ustawiony poprawnie i nie zepchnie nas do ziemi 403/4.

  4. Usuwanie wp-content Wordpress.stackexchange ma świetny artykuł na temat usuwania wp-content. Musisz przedefiniować niektóre stałe WP i to prawie działa. Musisz także przekierować wszystkie dostępy z wp-content„na dowolną treść”. Prawdopodobnie nie będzie to problemem, jeśli jest to czyste wdrożenie. Jeśli modyfikujesz istniejące wcześniej wdrożenie, musisz wykonać dodatkowe czynności.

  5. Przepisz adresy URL do treści wp opcjonalnie RewriteRule (.*)(wp-content)(.*) $1whatever-content$3 [NC,R,L] . To znajduje się w pliku .htaccess. Jeśli użytkownik spróbuje uzyskać dostęp do niektórych starych treści za pomocą wp-contentadresu URL, zostanie przekierowany tutaj.

  6. Grep i zamień wszystkie odniesienia do treści wp w twojej DB opcjonalnie . Nadal masz wp-contentw swojej bazie danych. Jeśli chcesz WP bezpłatnie, musisz się tego pozbyć. Wyeksportowałem / mysql zrzuciłem moją bazę danych, przeszukałem i zamieniłem wp-contentciąg na nowy. Możesz powiedzieć ... dlaczego muszę to zrobić, jeśli Apache przepisze moje adresy URL? Problem polega na tym, że kod źródłowy będzie zawierał te odniesienia, więc jeśli naprawdę chcesz zasłonić WordPress, musisz to zrobić. Uwaga: w tym momencie powinienem po prostu przestać i zaakceptować rzeczywistość, że to nie zadziała. Ale chciałem, żeby pan T współczuł mi.

  7. Wymień wszystkie odniesienia do wp-includesi wp-adminw źródle. Wiele funkcji WordPress zależy od tych dwóch katalogów: wp-includesi wp-admin. Oznacza to, że te nazwy katalogów są zapisane na stałe w kodzie źródłowym. Oznacza to, że będziesz musiał utworzyć nowe katalogi (ponieważ PHP używa bazowego systemu plików OS, a nie apache), aby uzyskać do nich dostęp, a następnie PISUJE TE WYNIKI do emitowanego HTML. To po prostu zbyt duży problem. Szybko się poddałem i poszedłem do łazienki po kupę.

Lekcja

Jasne, mogłem po prostu przeczytać http://codex.wordpress.org/Hardening_WordPress i wykonać te kroki. Ale chciałem idealnej strony. Teraz chcę tylko odzyskać wszystkie te godziny. Najważniejszą rzeczą, która powstrzymała mnie od zatrzymania się, było to, że nigdzie nie czytałem w Internecie, że jest to dużo pracy i prawie niemożliwe do wykonania. Zamiast tego czytam o ludziach, którzy próbują to zrobić, nie mając pojęcia, czy im się udało, czy nie. Tak więc, do mojej przeszłości, do której wyślę to za pośrednictwem Wehikułu Czasu Apple, nie próbuj zaciemniać WordPressa. To nie jest tego warte.

Avery Chan
źródło
Cóż, Avery, ja też jestem facetem, który chce być doskonały. Najpierw chciałem stworzyć witrynę Wordpress na wielu stronach, ukrywając fakt, że używam Wordpress. Przeszedłem przez wiele problemów i ostatecznie porzuciłem pomysł na wiele witryn. Ponieważ wiele wtyczek nie obsługuje wielu witryn. Twój 7. punkt wskazuje, że zastąpiłeś wp-includesi wp-adminnapisałeś ręcznie. Jestem pewien, że przeglądałeś każdy plik i zastępowałeś go ręcznie. To dlatego, że przegapiłeś kilka przydatnych przydatnych programów. Na przykład mogłeś wypróbować grepwin, który ułatwia tę pracę
Giri
4

Jeśli próbujesz ukryć, że używasz wordpressa z powodu crackerów, naprawdę masz trochę pracy. Jeśli wykonasz sztuczkę wp *, co z wp-content i wp-include? Nie mogąc do nich dotrzeć, złamiesz stronę i będzie ona wyglądać okropnie.

Ponadto w Wordpress jest tak wiele rzeczy, że naprawdę zajmuje to trochę pracy - i najprawdopodobniej będziesz musiał zrobić to dużo więcej, gdy zostanie zainstalowana aktualizacja. (Kilka przekierowań w Apache nie załatwi sprawy)

Jeśli po prostu próbujesz ukryć to przed panem i panią, oczywiście, powinieneś być w stanie to zrobić z niejasną pewnością.

Czy czytałeś przewodnik „hartowanie Wordpress”? Jeśli nie, powinieneś to sprawdzić: http://codex.wordpress.org/Hardening_WordPress Daje to świetne wprowadzenie do wielu rzeczy, które możesz zrobić.

Ponadto, jeśli tak bardzo chcesz ukryć fakt korzystania z Wordpress, po co z niego korzystać?

Frands Hansen
źródło
1. Re: wp-content / wp-includes patrz link w poście 2. I mają czytać instrukcji utwardzenie WordPress. 3. Na twoje ostatnie pytanie można łatwo odpowiedzieć, przeglądając zamieszczony przeze mnie link. Nie staram się być niegrzeczny, ale to pytanie ma niewiele wspólnego z technicznymi zaletami mojego pytania. Wiele osób korzysta z różnych narzędzi, ale nie chce ich reklamować. Dla niektórych jest to decyzja biznesowa.
Avery Chan,
0

Spróbuj wykonać konfigurację w konfiguracji apache. Może to być plik podobny do pliku /etc/wordpress/htaccess. Umożliwi to użycie Directorydyrektywy konfiguracyjnej. Musisz jednak ponownie uruchomić apache, aby załadować zmiany. Użyj wdzięcznego restartu, jeśli nie chcesz przerywać usług.

Aby ograniczyć dostęp do katalogu za pomocą .htaccessplików, muszą one znajdować się w odpowiednich katalogach. Działają podobnie jak treść Directorydyrektywy konfiguracyjnej. Może być konieczne włączenie wymaganych .htaccessopcji w konfiguracji apache. Ta metoda nie jest tak wydajna, jak użycie polecenia w konfiguracji apache, ponieważ wymaga częstej naprawy.

BillThor
źródło
Szukam rozwiązania, które nie wymaga edycji mojego pliku httpd.conf, ponieważ może to zostać zastąpione (jestem na wirtualnym hoście prywatnym). Będę odpowiednio edytować pytanie.
Avery Chan,
@Avry: Będziesz musiał umieścić dyrektywy, które chciałbyś umieścić w konfiguracji <Directory> w .htaccesspliku w pasującym katalogu. Uwaga: Apache zaleca użycie konfiguracji, jeśli to możliwe. Użyj kontroli wersji, aby uchronić się przed nadpisaniem.
BillThor,