(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ń:
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.
Użytkownik / administrator bloga wie, aby się zalogować, do którego powinien przejść
http://example.com/blogin/
.Wynik: apache przekierowuje je do
http://example.com/wp-admin/
.Jeśli użytkownik spróbuje uzyskać bezpośredni dostęp
wp-admin
z przeglądarki, zostanie wysłany na numer 1.Wynik: przekierowano na stronę 404.
Rzeczy, które do tej pory zrobiłem
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ściwp-settings.php
był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 godisplay_errors
wyłączyć. Teraz dostęphttp://example.com/wp-settngs.php
powoduje wyświetlenie pustej strony.To samo w sobie nie jest idealne, ponieważ ujawnia, że
wp-settings.php
istnieje. W rzeczywistościwp*
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.Próbowałem wstawić tę linię do powyższego kodu:
RewriteRule ^blogin wp-admin [NC,R,L]
. Miało być zaraz potem,RewriteBase
ale to nie zadziałało.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.
źródło
Odpowiedzi:
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
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, żeWP_*
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.
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: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, coRewriteCond %{ENV:REDIRECT_STATUS} ^$
naprawdę robi. Cóż, próbowałem zrobić sobie „tajne” backdoor do strony administratora WP. Użyłem tego kodu:Tak więc adres URL: http://ex.com/mordor powinien doprowadzić nas do strony logowania. Powodem, dla którego mieliśmy
REDIRECT
wiersz w powyższym kroku, jest to, że ponieważ ten adres URL zostaje przepisany nawp-*
adres URL, nie chcemy, aby pierwsza reguła przepisywania go otrzymała. Ponieważ jest przekierowywany wewnętrznie,REDIRECT_STATUS
zostanie ustawiony poprawnie i nie zepchnie nas do ziemi 403/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.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-content
adresu URL, zostanie przekierowany tutaj.Grep i zamień wszystkie odniesienia do treści wp w twojej DB opcjonalnie . Nadal masz
wp-content
w 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łemwp-content
cią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.Wymień wszystkie odniesienia do
wp-includes
iwp-admin
w źródle. Wiele funkcji WordPress zależy od tych dwóch katalogów:wp-includes
iwp-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.
źródło
wp-includes
iwp-admin
napisał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ę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ć?
źródło
Spróbuj wykonać konfigurację w konfiguracji apache. Może to być plik podobny do pliku
/etc/wordpress/htaccess
. Umożliwi to użycieDirectory
dyrektywy 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ą
.htaccess
plików, muszą one znajdować się w odpowiednich katalogach. Działają podobnie jak treśćDirectory
dyrektywy konfiguracyjnej. Może być konieczne włączenie wymaganych.htaccess
opcji w konfiguracji apache. Ta metoda nie jest tak wydajna, jak użycie polecenia w konfiguracji apache, ponieważ wymaga częstej naprawy.źródło
.htaccess
pliku w pasującym katalogu. Uwaga: Apache zaleca użycie konfiguracji, jeśli to możliwe. Użyj kontroli wersji, aby uchronić się przed nadpisaniem.