Ukryte w każdej standardowej instalacji WordPress są dwie strony, których prawie nikt świadomie nie używa, ale które po cichu zamieniają skradzione hasło administratora w pełną kompromitację serwera. Wygląd, Edytor plików motywu i Wtyczki, Edytor plików wtyczek. Oba pozwalają administratorowi edytować surowe pliki PHP w instalacji bezpośrednio przez przeglądarkę. Oba są w 2026 nadal włączone domyślnie. I oba są całkowicie opcjonalne.
Ten przewodnik wyjaśnia, dlaczego wyłączenie edytorów jest jedną z hardening zmian o najwyższej dźwigni, jakie możesz wykonać na witrynie WordPress, jak wygląda pojedyncza linia konfiguracji i czego można się spodziewać potem (w tym kilka przypadków brzegowych, które zaskakują ludzi).
Dlaczego wbudowany edytor kodu jest problemem?
W normalny dzień nikt nie używa edytora. Zmiany motywu idą przez motyw potomny lub deploy pipeline dewelopera. Zmiany wtyczek dzieją się na staging, nie na produkcji. Edytor stoi tam, nieużywany, dostępny tylko dla administratorów.
"Dostępny tylko dla administratorów" to część, która upada pod atakiem. Sposób, w jaki rozgrywa się typowe przejęcie WordPress, nie ma nic wspólnego z podatnościami na poziomie kodu w samym edytorze. Wygląda to tak:
- Hasło administratora wycieka. Phishing, ponowne użycie haseł z zhakowanej usługi, laptop dewelopera z malware, skompromitowana wtyczka eksfiltrująca cookies sesji. Wybierz jedno ze zwykłych wejść.
- Atakujący loguje się do
/wp-adminjako prawdziwy administrator. Z perspektywy WordPress nic nie jest nie tak, to jest legalne logowanie. - Atakujący idzie prosto do Wygląd, Edytor plików motywu, otwiera
functions.phpi wkleja mały backdoor PHP na górze. - Od tego momentu każde żądanie do frontendu witryny wykonuje kod atakującego. Mają zdalną powłokę na Twoim serwerze.
Edytor zamienia "skradzione hasło administratora" w "skradziony webserwer". Bez edytora atakujący, który kradnie hasło administratora, nadal ma uprawnienia administratora (co już jest wystarczająco źle), ale musi obrać wolniejszą, głośniejszą drogę, przesyłając złośliwy zip wtyczki lub motywu, aby uzyskać wykonanie kodu. Ten dodatkowy krok jest dodatkową szansą dla wtyczki bezpieczeństwa, skanera integralności plików lub WAF na poziomie serwera, aby zauważyć i zablokować upload.
Stosunek koszt-korzyść jest mocno przekrzywiony. Edytor jest używany kilka razy w roku przez małą mniejszość administratorów. Ryzyko pojawia się w każdej witrynie, która dostaje wyciek danych uwierzytelniających. Wyłączenie edytora jest jedną z tych zmian, gdzie najgorszy przypadek to "ktoś musi użyć SFTP do pięciominutowej edycji", a najlepszy przypadek to "przejęcie nigdy nie eskaluje z wycieku hasła do backdoora".
Rozwiązanie: pojedyncza linia w wp-config.php
WordPress ma wbudowaną stałą dokładnie dla tego przypadku. Otwórz wp-config.php w katalogu głównym WordPress i dodaj następującą linię gdzieś nad komentarzem, który brzmi /* That's all, stop editing! Happy publishing. */:
define('DISALLOW_FILE_EDIT', true);Zapisz plik. To wszystko. Menu Edytor plików motywu pod Wygląd i Edytor plików wtyczek pod Wtyczki znikają natychmiast dla każdego użytkownika, w tym administratorów. Same strony zwracają błąd uprawnień, jeśli są dostępne bezpośrednio przez URL. Nie ma wtyczki do zainstalowania, ustawień do utrzymania, powierzchni kompatybilności, o którą trzeba się martwić. Stała jest częścią core WordPress od wersji 3.0 (wydanej w 2010) i nigdzie się nie wybiera.
Co jeśli chcę również zablokować uploady wtyczek i motywów z admina?
WordPress ma surowszą stałą siostrzaną o nazwie DISALLOW_FILE_MODS. Robi to, co DISALLOW_FILE_EDIT, plus blokuje uploady wtyczek, uploady motywów i aktualizacje core ze środowiska admin. Ustawienie wygląda identycznie:
define('DISALLOW_FILE_MODS', true);To znacznie większa zmiana zachowania. Z aktywnym DISALLOW_FILE_MODS nie możesz już instalować ani aktualizować wtyczek, motywów lub core WordPress przez normalne środowisko admin. Wszystkie aktualizacje muszą pochodzić skądinąd: WP CLI, pipeline deploy, upload SFTP lub centralny panel managed hosta.
Dla większości witryn jest to zbyt restrykcyjne. Aktualizacje są najważniejszym zadaniem bezpieczeństwa na witrynie WordPress, a utrudnianie ich zwykle oznacza, że ludzie je pomijają. DISALLOW_FILE_MODS ma sens w dwóch konkretnych środowiskach: pipeline deploy, gdzie instalacja produkcyjna jest przeznaczona tylko do odczytu, i środowiska o wysokim bezpieczeństwie, gdzie ktoś jest naprawdę odpowiedzialny za pchanie aktualizacji z zewnątrz. Dla wszystkiego innego zwykły DISALLOW_FILE_EDIT trafia w słodki punkt "ogromna wygrana bezpieczeństwa, zero bólu operacyjnego".
Co zmienia się dla użytkowników po ustawieniu tego?
Dla 99% administratorów na 99% witryn: nic widocznego. Dwie pozycje menu znikają z panelu. Nikt nie zauważa, ponieważ nikt ich nie używał.
Przypadki, w których ktoś zauważa:
- Deweloper edytujący produkcję bezpośrednio. Jeśli masz kogoś w zespole, kto rutynowo edytuje pliki motywu lub wtyczki przez przeglądarkę, musi przejść na SFTP lub pipeline deploy. To zmiana workflow, nie blokada. W rzeczywistości to dobry moment, aby zapytać, dlaczego kod produkcyjny jest w ogóle edytowany na żywo.
- Wtyczki haczykujące w edytor. Garstka wtyczek rozszerza wbudowany edytor o dodatkowe funkcje. Po cichu nie załadują swojego UI, gdy edytor zniknie. Sama wtyczka zwykle nadal działa, łamie się tylko integracja edytora. Jeśli polegasz na którejś z nich, zobaczysz lukę podczas testowania.
- Niestandardowy kod używający uprawnień
edit_themeslubedit_plugins. Stała usuwa te uprawnienia z każdej roli, w tym administratora. Kod, który warunkuje funkcje na dokładnie te uprawnienia, będzie się zachowywał tak, jakby nikt ich nie miał. Rzadkie, ale warto wiedzieć, jeśli utrzymujesz niestandardową wtyczkę wykonującą ten rodzaj sprawdzenia uprawnień.
Weryfikacja, że jest aktywne
- Zaloguj się do WordPress jako administrator.
- Otwórz menu Wygląd w pasku bocznym admina. Pozycja "Edytor plików motywu" powinna brakować.
- Otwórz menu Wtyczki. Pozycja "Edytor plików wtyczek" powinna brakować.
- Dla dodatkowej kontroli przejdź bezpośrednio do
https://twojadomena.pl/wp-admin/theme-editor.php. WordPress powinien przekierować Cię na stronę z napisem "Przepraszamy, nie możesz edytować plików motywu". - Uruchom nowy skan InspectWP. Kontrola "edytor plików włączony" w sekcji bezpieczeństwa powinna stać się zielona.
Jeśli pozycje menu nadal są tam po zapisaniu wp-config.php, najczęstsze powody to: object cache (opróżnij to), cache opcode taki jak OPcache (może chwilę potrwać, zanim nowy plik zostanie odebrany, lub możesz zrestartować PHP FPM), edycja pliku trafiła do nieprawidłowego wp-config.php w folderze nadrzędnym, lub stała jest ustawiana później w pliku przez coś innego i Twoja linia jest nadpisywana. Otwórz wp-config.php od samego początku i wyszukaj DISALLOW_FILE_EDIT; powinieneś zobaczyć swoją linię i nic, co by ją ponownie ustawiało później.
Co ta poprawka robi, a czego nie robi
Warto być jasnym co do tego, jaki typ ataku DISALLOW_FILE_EDIT zatrzymuje, a co zostawia nietknięte. Zatrzymuje konkretną ścieżkę, gdzie atakujący używa skradzionego loginu administratora do zapisania PHP w plikach motywu lub wtyczki przez przeglądarkę. Nie zatrzymuje:
- Atakującego przesyłającego złośliwy zip wtyczki lub motywu z admina (do tego użyj
DISALLOW_FILE_MODS, z kompromisami opisanymi powyżej, lub ogranicz uprawnienia do uploadu wtyczek). - Atakującego wykorzystującego podatność na poziomie kodu w wtyczce do zapisywania plików. Do tego sama wtyczka musi zostać załatana.
- Atakującego, który ma dostęp SFTP lub shell. W tym momencie warstwa WordPress jest całkowicie ominięta.
DISALLOW_FILE_EDIT to warstwa obrony, nie kompletna strategia. Naturalnie pasuje do silnych haseł administratora, uwierzytelniania dwuskładnikowego na kontach administratora i wtyczki bezpieczeństwa obserwującej nieoczekiwane zmiany plików. Kombinacja usuwa najłatwiejszą ścieżkę przejęcia i czyni trudniejsze ścieżki wystarczająco głośnymi, aby zauważyć.
Jedna linia w wp-config.php, brak wtyczki, brak utrzymania, brak powierzchni kompatybilności. Jeśli nie robisz nic innego w tym miesiącu z witryną WordPress, zrób to.