Poranek zaczął się od paniki. Moja klientka napisała: „Strona pokazuje dziwne reklamy, a Google Chrome blokuje dostęp z ostrzeżeniem o złośliwym oprogramowaniu”. Zhakowana strona WordPress to koszmar każdego właściciela biznesu online i wyzwanie dla każdego freelancera. Dziś pokażę Ci dokładnie, jak odzyskałam kontrolę nad zhakowaną stroną WordPress i co zrobiłam, żeby to się nie powtórzyło.
Diagnostyka problemu – rozpoznanie ataku na WordPress
Objawy, które wskazywały na zhakowaną stronę WordPress
Gdy otrzymałam zgłoszenie, lista problemów była alarmująca:
- Ostrzeżenie Google Safe Browsing – przeglądarka blokowała dostęp
- Niechciane przekierowania na strony z pornografią i podejrzanymi farmaceutykami
- Dziwne pliki PHP w katalogu uploads
- Spadek ruchu o 87% w ciągu 48 godzin
- Strona została usunięta z Google Search Console
Narzędzia diagnostyczne, których użyłam
1. Sucuri SiteCheck (darmowy skaner online)
Wynik: 3 pliki backdoor wykryte
Status Google: Blacklisted2. Wordfence Security Plugin Po zainstalowaniu skan wykrył:
- 27 zmodyfikowanych plików core WordPress
- 5 nieznanych plików w katalogu wp-admin
- Podejrzany kod w functions.php motywu
3. Analiza logów serwera W logach dostępu znalazłam:
- 1247 prób logowania z tego samego IP w ciągu godziny (atak brute force)
- Dostęp do nieistniejących plików .php (próby exploitów)
- Podejrzane requesty POST do wp-login.php
Co ujawniła głębsza analiza zhakowanej strony WordPress
Hakerzy wykorzystali lukę w nieaktualizowanej wtyczce Contact Form 7 (wersja 5.1.6 miała znaną podatność – na szczęście od wersji 5.8+ problem został załatany). Uzyskali dostęp przez backdoor i:
- Zainfekowali 47 plików złośliwym kodem JavaScript
- Dodali ukryte konta administratora
- Zainstalowali plugin-backdoor pod nazwą „System Update Manager”
Proces czyszczenia zhakowanej strony WordPress
KROK 1: Izolacja (0-30 minut)
Natychmiastowe działania:
- Tryb konserwacji – zainstalowałam plugin „WP Maintenance Mode”
- Zmiana wszystkich haseł:
- Hosting (FTP, cPanel)
- Baza danych
- WordPress (wszystkie konta)
- Konta email powiązane ze stroną
- Backup czystej wersji (na wszelki wypadek)
bash*# Pobrałam całą zawartość przez FTP# Zrobiłam dump bazy danych* mysqldump -u username -p database_name > backup.sqlKROK 2: Usuwanie infekcji (2-4 godziny)
A. Czyszczenie plików:
- Porównanie z czystym WordPress
- Pobrałam świeżą instalację WordPress 6.8.1
- Zastąpiłam CAŁE katalogi: wp-admin, wp-includes
- Sprawdziłam różnice w wp-config.php
- Przegląd wtyczek i motywów:
php*// Znalazłam zainfekowany kod w functions.php:* eval(base64_decode('ZXZhbChiYXNlNjRfZGVjb2RlKCdaWFpoYkNoaVlYTmx...')); *// USUNIĘTE!*- Skanowanie katalogu uploads:
- Znalazłam 12 plików .php w folderach z obrazkami
- Pliki o nazwach: error_log.php, cache.php, system.php
- WSZYSTKIE USUNIĘTE
B. Czyszczenie bazy danych:
Zhakowana strona WordPress często ma złośliwy kod w bazie. Sprawdziłam:
sql*
- Podejrzani użytkownicy
* SELECT * FROM wp_users WHERE user_registered > '2024-10-15'; *
- Znalazłam 2 konta "admin2" i "support" - USUNIĘTE
- Podejrzane opcje* SELECT * FROM wp_options WHERE option_value LIKE '%base64%'; *
- Złośliwy JavaScript w opcjach motywu - WYCZYSZCZONE*KROK 3: Reinstalacja i weryfikacja
- Zainstalowałam wszystko od nowa:
- WordPress core (najnowsza wersja)
- Wszystkie wtyczki (tylko z oficjalnego repo)
- Motyw (sprawdzona wersja premium)
- Potrójna kontrola przez 3 skanery:
- Wordfence: ✅ Czysta
- Sucuri: ✅ Brak zagrożeń
- MalCare: ✅ Bezpieczna
Zabezpieczenia na przyszłość – ochrona WordPress
Warstwa 1: Podstawowe bezpieczeństwo
1. Wtyczka Security (wybór: Wordfence Premium)
✓ Firewall aplikacyjny (WAF)
✓ Blokowanie złośliwych IP
✓ Ochrona przed brute force
✓ Monitoring w czasie rzeczywistym2. Automatyczne aktualizacje
php
*// wp-config.php*
define('WP_AUTO_UPDATE_CORE', true);
*// Plus włączona automatyczna aktualizacja wtyczek*3. Mocne hasła + 2FA
- Hasła generowane przez menedżer (20+ znaków)
- Two-Factor Authentication dla wszystkich adminów
- Plugin: WP 2FA
Warstwa 2: Zaawansowana ochrona
1. Ukrycie wp-login.php
php
*// Plugin WPS Hide Login zmienia adres logowania
// Było: example.com/wp-login.php
// Jest: example.com/moj-tajny-login-2024*2. Ograniczenie prób logowania
- Po 3 błędnych próbach: CAPTCHA
- Po 5: blokada IP na 15 minut
- Po 10: blokada na 24h
3. Zablokowanie edycji plików z poziomu panelu
php
*// wp-config.php*
define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true);
*// produkcja*4. Uprawnienia plików na serwerze
bash
find . -type d -exec chmod 755 {} \\; *# katalogi*
find . -type f -exec chmod 644 {} \\; *# pliki*
chmod 600 wp-config.php *# tylko właściciel*Warstwa 3: Monitoring i backup
1. Automatyczne backupy (UpdraftPlus Premium)
- Codzienne backupy plików
- Backupy bazy co 12h
- Przechowywanie w Google Drive
- Testowanie odzyskiwania co miesiąc
2. Monitoring zmian
- Sucuri Integrity Monitoring alarmuje o każdej zmianie w plikach core
- Logi dostępu analizowane przez Wordfence
3. SSL/HTTPS + CDN
php
*// Wymuszenie HTTPS*
define('FORCE_SSL_ADMIN', true);
*// Cloudflare jako dodatkowa warstwa ochrony przed DDoS*Strategie zapobiegania – jak unikać hakowania WordPress
Strategia #1: Regularne audyty bezpieczeństwa
Co miesiąc (15 minut):
- Przegląd zainstalowanych wtyczek – usunięcie nieużywanych
- Sprawdzenie dostępnych aktualizacji
- Analiza raportów z Wordfence
- Weryfikacja użytkowników (czy wszystkie konta są potrzebne?)
Co kwartał (30 minut):
- Pełny skan bezpieczeństwa (Sucuri + Wordfence)
- Zmiana haseł (wszystkie konta)
- Test przywracania backupu
- Przegląd uprawnień użytkowników
- Sprawdzenie, czy WordPress jest na najnowszej wersji (obecnie 6.8+)
Strategia #2: Wybór bezpiecznych rozszerzeń
Czerwone flagi przy wyborze wtyczek:
- ❌ Brak aktualizacji > 1 rok
- ❌ Mało instalacji (< 1000 aktywnych)
- ❌ Niskie oceny / dużo negatywnych opinii
- ❌ Brak wsparcia deweloperskiego
Zielone światło:
- ✅ Regularne aktualizacje (co 2-3 miesiące)
- ✅ Aktywne wsparcie na forum
- ✅ Duża liczba instalacji
- ✅ Kod dostępny do przeglądu
Strategia #3: Edukacja klienta
Przygotowałam dla klientki prostą checklistę:
`🚨 NIGDY NIE:
- Instaluj wtyczek z nieznanych źródeł
- Używaj „nulled” (pirackich) motywów premium
- Dawaj dostępu admin zewnętrznym bez weryfikacji
- Odwlekaj aktualizacji WordPress
✅ ZAWSZE:
- Aktualizuj wtyczkę natychmiast po powiadomieniu
- Używaj różnych haseł dla każdej usługi
- Sprawdzaj logi dostępu raz w miesiącu
- Miej świeży backup przed większymi zmianami`
Strategia #4: Hosting ma znaczenie
Po tym incydencie przeniosłam stronę na hosting z:
- Skanowaniem malware na poziomie serwera
- Firewallem sprzętowym
- Automatycznymi backupami (niezależnie od backupów WordPress)
- Wsparciem technicznym 24/7 znającym się na WordPress
Rekomendacje: Kinsta, WP Engine, SiteGround (plan premium)
Podsumowanie – lekcje z odzyskiwania zhakowanej strony WordPress
Co zajęło mi najwięcej czasu?
- Czyszczenie bazy danych: 2 godziny
- Identyfikacja wszystkich zainfekowanych plików: 1,5 godziny
- Komunikacja z Google (usunięcie z blacklisty): 3 dni
Koszty operacji:
- Wordfence Premium
- Sucuri Integrity Monitoring
- UpdraftPlus Premium
- Mój czas pracy: 6 godzin
- Strata klientki w przychodach (3 dni przestoju)
Najważniejsza lekcja:
Zhakowana strona WordPress to nie „czy”, ale „kiedy”. Każda strona bez podstawowych zabezpieczeń to kwestia czasu. Koszt prewencji (około 1000zł/rok) to ułamek kosztów odzyskiwania strony po ataku.
Twoja kolej – zabezpiecz WordPress już dziś
Minimalna konfiguracja bezpieczeństwa (30 minut):
- Zainstaluj Wordfence (darmowa wersja OK na start)
- Włącz automatyczne aktualizacje
- Ustaw mocne hasła + 2FA
- Skonfiguruj UpdraftPlus (backupy na Google Drive)
- Przeprowadź pierwszy skan bezpieczeństwa
Dla freelancerów – oferta usług:
Po tym case study zacząłam oferować pakiet „WordPress Security Audit” i mam kolejkę klientów. Ludzie PŁACĄ za spokój. Może to Twoja nowa usługa?
Pytania? Podziel się swoimi doświadczeniami z zhakowaną stroną WordPress w komentarzach. Chętnie pomogę!
Ostatnia aktualizacja: listopad 2025 | Oparte na rzeczywistym przypadku | WordPress 6.8+
![{"type":"elementor","siteurl":"https://danutacybulska.pl/wp-json/","elements":[{"id":"e6dd003","elType":"widget","isInner":false,"isLocked":false,"settings":{"editor":"Napisz krótko jaki masz problem z WordPress - przygotuje dla Ciebie bezpłatną wycenę!","_margin":{"unit":"px","top":"0","right":"0","bottom":"40","left":"0","isLinked":false},"_animation":"fadeIn","_animation_delay":250,"align":"left","__globals__":{"typography_typography":"globals/typography?id=text","text_color":"globals/colors?id=primary"},"drop_cap":"","text_columns":"","text_columns_tablet":"","text_columns_mobile":"","column_gap":{"unit":"px","size":"","sizes":[]},"column_gap_tablet":{"unit":"px","size":"","sizes":[]},"column_gap_mobile":{"unit":"px","size":"","sizes":[]},"align_tablet":"","align_mobile":"","typography_typography":"","typography_font_family":"","typography_font_size":{"unit":"px","size":"","sizes":[]},"typography_font_size_tablet":{"unit":"px","size":"","sizes":[]},"typography_font_size_mobile":{"unit":"px","size":"","sizes":[]},"typography_font_weight":"","typography_text_transform":"","typography_font_style":"","typography_text_decoration":"","typography_line_height":{"unit":"px","size":"","sizes":[]},"typography_line_height_tablet":{"unit":"em","size":"","sizes":[]},"typography_line_height_mobile":{"unit":"em","size":"","sizes":[]},"typography_letter_spacing":{"unit":"px","size":"","sizes":[]},"typography_letter_spacing_tablet":](https://danutacybulska.pl/wp-content/uploads/2022/04/cropped-MOJE-NOWE-LOGO_bez-tla-1-1-100x106.png)

