Spis treści
- Dlaczego WordPress jest celem ataków
- Podstawy bezpieczeństwa
- Konfiguracja serwera i SSL
- Wtyczki bezpieczeństwa
- Ograniczenie dostępu do panelu
- Zabezpieczenie bazy danych
- Uprawnienia plików
- Firewall aplikacyjny (WAF)
- Ochrona przed brute force
- Backup jako linia obrony
- Monitorowanie logów
- Ukrywanie wersji WordPress
- Bezpieczne API i REST
- Uwierzytelnianie dwuetapowe
- Bezpieczne wtyczki i motywy
- Separacja środowisk
- Konfiguracja wp-config.php
- Ochrona przed XSS i SQL Injection
- Ograniczanie XML-RPC
- Ochrona .htaccess i robots.txt
- Zabezpieczenie uploadów
- Skanowanie malware
- Kopie zapasowe w chmurze
- Automatyczne powiadomienia
- Bezpieczne logowanie SSH
- Segmentacja użytkowników
- Audyt bezpieczeństwa
- Testy penetracyjne
- Plan reakcji na incydenty
- Podsumowanie i checklista PDF
Dlaczego WordPress jest celem ataków
WordPress napędza 43% wszystkich stron internetowych na świecie, co czyni go najbardziej popularnym CMS-em - i jednocześnie najczęstszym celem cyberataków.
Statystyki są alarmujące:
- 90,000+ ataków na strony WordPress dziennie (Wordfence)
- 29% włamań wynika z luk we wtyczkach
- 10% ataków wykorzystuje dziury w motywach
- 8% włamań to słabe hasła
- Skutki włamania to często utrata dostępu do strony, spam SEO i wyciek danych
Dlaczego hakerzy atakują WordPressa?
- Popularność = duża powierzchnia ataku - więcej stron = więcej celów
- Nieaktualizowane instalacje - 60% stron WP używa nieaktualnych wersji
- Słabe hasła - admin/admin123 wciąż w użyciu
- Niezabezpieczone wtyczki - abandonware z krytycznymi lukami
- Automatyzacja - boty skanują tysiące stron szukając znanych exploitów
Dobra wiadomość: Prawidłowo zabezpieczony WordPress jest praktycznie nie do zhakowania. Ta checklista przeprowadzi Cię przez 30 kluczowych kroków ochrony.
Podstawy bezpieczeństwa: aktualizacje, hasła, użytkownicy
1. Regularnie aktualizuj wszystko
Najważniejszy punkt na liście. 61% stron zhakowanych używało przestarzałego core WordPress.
- WordPress core: Włącz automatyczne aktualizacje minor releases
- Wtyczki: Aktualizuj w ciągu 24h od wydania security patch
- Motywy: Sprawdzaj co tygodniu, aktualizuj natychmiast
- PHP: Celuj w PHP 8.2+, a przy nowych wdrożeniach najlepiej w 8.3+ jeśli motyw i wtyczki są zgodne
2. Silne hasła dla wszystkich użytkowników
Hasło powinno mieć minimum 16 znaków i łączyć wielkie oraz małe litery, cyfry i symbole.
- Używaj password managera (1Password, Bitwarden)
- Wymuszaj strong passwords wtyczką (Force Strong Passwords)
- Zmień hasło po incydencie, podejrzeniu wycieku albo przekazaniu dostępu kolejnej osobie
- Nigdy nie używaj tego samego hasła na wielu stronach
3. Ogranicz liczbę administratorów
Zasada minimalnych uprawnień: uprawnienia administratora dawaj tylko osobom, które naprawdę ich potrzebują.
- Autorzy treści - rola Editor
- Klienci - rola Author lub Contributor
- Administrator - tylko Ty i zaufani deweloperzy
4. Usuń nieużywane konta
Co 3 miesiące audytuj listę użytkowników i usuwaj nieaktywne konta - każde konto to potencjalny wektor ataku.
Konfiguracja serwera i SSL
5. Używaj HTTPS (SSL/TLS)
To podstawa w 2025 roku. HTTPS szyfruje komunikację między serwerem a użytkownikiem.
- Certyfikat SSL: np. Let's Encrypt lub wildcard, jeśli potrzebujesz wielu subdomen
- Wymuś HTTPS: Przekierowanie 301 z HTTP na HTTPS
- HSTS header: Strict-Transport-Security (zmusza przeglądarki do HTTPS)
- Mixed content: Wszystkie zasoby muszą być HTTPS
6. Aktualna wersja PHP i bazy danych
- PHP 8.2+ - rozsądne minimum bezpieczeństwa na 2025 rok; dla nowych wdrożeń warto celować w PHP 8.3+, jeśli motyw i wtyczki są zgodne
- MySQL 8.0+ lub MariaDB 10.6+; przy nowych instalacjach lepiej wybierać nowsze, nadal wspierane gałęzie
- Jeśli prowadzisz sklep na WooCommerce, trzymaj się wersji PHP testowanej przez aktualne wydanie WooCommerce - najczęściej będzie to 8.3+ lub nowsza zgodna wersja
- Sprawdź w WordPressie: Narzędzia → Kondycja witryny
7. Wyłącz directory browsing
Dodaj do .htaccess:
Options -Indexes
Zapobiega listowaniu zawartości katalogów (np. /wp-content/uploads/)
8. Wyłącz file editing w dashboardzie
Dodaj do wp-config.php:
define('DISALLOW_FILE_EDIT', true);
Uniemożliwia edycję plików PHP z poziomu panelu WordPress (gdyby haker dostał się do admina, nie może modyfikować kodu).
Wtyczki bezpieczeństwa - co warto zainstalować
9. Zainstaluj porządną wtyczkę bezpieczeństwa
Wordfence Security
Najpopularniejsza wtyczka security - 4+ miliony aktywnych instalacji.
- Firewall (WAF) - blokuje złośliwe requesty
- Malware scanner - skanuje pliki codziennie
- Login security - brute force protection, 2FA
- Live traffic monitoring
- Country blocking
Sucuri Security
- Audyt bezpieczeństwa
- Malware scanning
- Blacklist monitoring
- Post-hack security actions
- Website firewall (WAF) dostępny jako usługa przed serwerem
iThemes Security
- 30+ sposobów zabezpieczenia WP
- Brute force protection
- File change detection
- 404 detection (skanowanie exploitów)
- Database backups
Rekomendacja: dla większości stron wystarczy jedna dobrze skonfigurowana wtyczka security, a przy większym ryzyku warto dołożyć WAF przed serwerem.
Ograniczenie dostępu do panelu i plików systemowych
10. Zmień URL logowania
Domyślnie: /wp-admin i /wp-login.php - hakerzy to wiedzą.
Zmień na custom URL wtyczką:
- WPS Hide Login
- iThemes Security (rename login URL)
Przykład: /twoj-sekretny-panel-1945
11. Ogranicz dostęp do wp-admin przez IP
Jeśli masz statyczne IP, dodaj do /wp-admin/.htaccess:
Order Deny,Allow Deny from all Allow from 123.45.67.89 # Twoje IP
12. Wyłącz XML-RPC (jeśli nie używasz)
XML-RPC to wektor brute force ataków. Dodaj do .htaccess:
Order Allow,Deny Deny from all
Lub użyj wtyczki: Disable XML-RPC
13. Chroń wp-config.php
Najważniejszy plik WordPressa (credentials do bazy). Dodaj do .htaccess:
Order Allow,Deny Deny from all
Zabezpieczenie bazy danych i prefiksów
14. Zmień domyślny prefix tabel bazy danych
Domyślnie: wp_ - hakerzy to wiedzą i używają w SQL injection.
Przy instalacji ustaw custom prefix: wp_a8f3k_ (losowy string).
Dla istniejącej strony: użyj wtyczki Change Table Prefix lub ręcznie przez phpMyAdmin + edycję wp-config.php.
15. Używaj silnego hasła do bazy danych
Hasło w wp-config.php powinno być 32+ znaki losowe.
16. Limit user permissions w bazie
Użytkownik bazy dla WordPressa powinien być przypisany tylko do tej jednej bazy i mieć wyłącznie uprawnienia potrzebne do działania strony oraz aktualizacji. Unikaj nadawania szerokich uprawnień globalnych dla wszystkich baz na serwerze.
Uprawnienia plików i katalogów
17. Ustaw prawidłowe file permissions
Złote zasady Unix permissions:
- Katalogi: 755 lub 750
- Pliki: 644 lub 640
- wp-config.php: 600 lub 400 (read-only dla ownera)
Ustaw przez FTP/SFTP lub SSH:
find /ścieżka/do/wordpress/ -type d -exec chmod 755 {} \;
find /ścieżka/do/wordpress/ -type f -exec chmod 644 {} \;
chmod 600 wp-config.php
18. Właściciel plików (owner/group)
Pliki powinny należeć do Twojego user, nie do www-data lub
apache.
chown -R your-user:your-group /path/to/wordpress/
Firewall aplikacyjny (WAF)
19. Wdróż Web Application Firewall
WAF filtruje złośliwe requesty zanim dotrą do WordPressa.
Opcja 1: Cloudflare
- Change DNS do Cloudflare
- Włącz "Under Attack Mode" przy DDoS
- Firewall rules: blokuj kraje/IP
Opcja 2: Sucuri Firewall
- Edge firewall (przed serwerem)
- DDoS mitigation
- Malware cleanup included
Opcja 3: Wordfence WAF
- Endpoint firewall (na serwerze)
- Blokuje SQL injection, XSS, LFI
Ochrona przed brute force i botami
20. Limituj login attempts
Po 3-5 błędnych próbach logowania - block IP na 15-30 minut.
Wtyczki:
- Limit Login Attempts Reloaded
- Wordfence (wbudowane)
21. Dodaj CAPTCHA do formularzy logowania
Google reCAPTCHA v3 (niewidoczny) lub v2 (checkbox).
Wtyczki:
- reCAPTCHA by BestWebSoft
- Advanced noCaptcha & invisible Captcha
22. Honeypot dla botów
Niewidoczne pole w formularzu - jeśli bot je wypełni, request jest odrzucany.
Wbudowane w większość form plugins (WPForms, Gravity Forms).
Backup jako linia obrony
23. Automatyczne daily backups
Jeśli zostaniesz zhakowany, backup = jedyny ratunek.
Co backupować:
- Pełna baza danych
- Katalog /wp-content/ (motywy, wtyczki, uploady)
- wp-config.php
- .htaccess
Jak często:
- Blog: co 3 dni
- E-commerce: codziennie o 3:00 AM
- High-traffic: co 12h
Gdzie przechowywać:
- Nie na tym samym serwerze! - jeśli serwer padnie, backup też przepadnie
- Chmura: Google Drive, Dropbox, Amazon S3
- Offsite FTP
Wtyczki backup:
- UpdraftPlus - najpopularniejsza i prosta w konfiguracji
- BackWPup
- Duplicator
- VaultPress (Jetpack Backup)
Monitorowanie logów i zmian w plikach
24. File integrity monitoring
Powiadomienie email gdy jakikolwiek plik PHP jest modyfikowany.
Wtyczki:
- Wordfence (File Change Detection)
- iThemes Security (File Change Detection)
- Sucuri Security (File Integrity Monitoring)
25. Activity log dla wszystkich użytkowników
Śledź każdą akcję: logowania, edycje postów, instalacje wtyczek i zmiany ustawień.
Wtyczki:
- WP Activity Log - bardzo rozbudowany
- Simple History
26. Monitor failed login attempts
Jeśli widzisz setki prób logowania z różnych IP - jesteś celem ataku botnet. Czas na Cloudflare "Under Attack Mode".
Ukrywanie wersji WordPressa i adresów logowania
27. Usuń WordPress version z HTML
Domyślnie WP pokazuje wersję w - hakerzy to wiedzą i targetują konkretne
wersje.
Dodaj do functions.php:
remove_action('wp_head', 'wp_generator');
28. Ukryj login errors
Domyślnie WP mówi "Nieprawidłowe hasło" vs "Nieprawidłowa nazwa użytkownika" - hakerzy mogą enumerować usernames.
Dodaj do functions.php:
add_filter('login_errors', function() {
return 'Nieprawidłowe dane logowania.';
});
29. Wyłącz user enumeration
Domyślnie /?author=1 pokazuje username w URL - exploitable.
Wtyczka: Stop User Enumeration
Bezpieczne API i REST Endpoints
30. Ogranicz dostęp do WordPress REST API
REST API (/wp-json/) może wyciekać dane (user list, post drafts).
Jeśli nie używasz: wyłącz dla niezalogowanych.
Dodaj do functions.php:
add_filter('rest_authentication_errors', function($result) {
if (!is_user_logged_in()) {
return new WP_Error('rest_disabled', 'REST API wyłączone.', ['status' => 401]);
}
return $result;
});
Uwierzytelnianie dwuetapowe (2FA)
31. Włącz 2FA dla wszystkich adminów
Nawet jeśli haker zdobędzie hasło, nie zaloguje się bez 2FA.
Wtyczki 2FA:
- Two-Factor (Automattic) - TOTP (Google Authenticator)
- Wordfence 2FA - wbudowane w Wordfence
- Duo Two-Factor Authentication - push notifications
Metody 2FA:
- TOTP: Google Authenticator, Authy (najlepsze)
- SMS: mniej bezpieczne (SIM swapping)
- Email: backup method
- Hardware keys: YubiKey (najbezpieczniejsze, enterprise)
Bezpieczne korzystanie z wtyczek i motywów
32. Instaluj tylko zaufane wtyczki
Przed instalacją sprawdź:
- Oceny i recenzje (4.5+ gwiazdek)
- Liczba aktywnych instalacji (100,000+)
- Ostatnia aktualizacja (max 6 miesięcy temu)
- Kompatybilność z najnowszym WP
- Developer reputation
33. Usuń nieużywane wtyczki i motywy
Nie wystarczy dezaktywować - musisz usunąć. Nieaktywne wtyczki mogą być exploitowane.
34. Unikaj nulled/pirated plugins
"Darmowe" premium wtyczki z warez sites bardzo często zawierają malware albo backdoory. Ryzyko jest niewspółmierne do pozornej oszczędności.
Separacja środowisk (dev/stage/prod)
35. Nigdy nie testuj na produkcji
Miej oddzielne środowiska:
- Development: local (XAMPP/MAMP) lub dev.twojadomena.pl
- Staging: staging.twojadomena.pl (testowanie przed deploy)
- Production: twojadomena.pl (publiczna strona)
36. Wyłącz debug mode na produkcji
W wp-config.php:
define('WP_DEBUG', false); // NIGDY true na produkcji
define('WP_DEBUG_LOG', false);
define('WP_DEBUG_DISPLAY', false);
Debug wyświetla ścieżki serwerowe i błędy - gold mine dla hakerów.
Bezpieczna konfiguracja pliku wp-config.php
37. Zmień security keys
WordPress używa 8 kluczy do szyfrowania cookies i sesji. Wygeneruj nowe:
https://api.wordpress.org/secret-key/1.1/salt/
Zamień w wp-config.php. W praktyce warto je wymienić po incydencie, migracji albo wtedy,
gdy dostęp do pliku miały osoby, które nie powinny go mieć.
38. Przenieś wp-config.php poziom wyżej
WordPress pozwala na umieszczenie wp-config.php jeden katalog wyżej niż root WP - poza
public_html.
Haker z exploit mający dostęp do /public_html nie zobaczy wp-config.
Ochrona przed XSS i SQL Injection
39. Escape output, sanitize input
Jeśli piszesz custom kod PHP:
- Sanitize input:
sanitize_text_field($_POST['field']) - Escape output:
esc_html($variable) - SQL queries: Używaj
$wpdb->prepare()
40. Content Security Policy (CSP)
Header HTTP blokujący inline scripts (ochrona przed XSS).
Dodaj do .htaccess lub przez wtyczkę (Wordfence):
Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline';"
Ograniczanie XML-RPC
41. Wyłącz XML-RPC jeśli nie używasz
XML-RPC to stary protokół (dla Jetpack, mobile apps). Exploit dla DDoS amplification.
Dodaj do .htaccess:
Order Deny,Allow Deny from all
Lub wtyczka: Disable XML-RPC-API
Ochrona pliku .htaccess i robots.txt
42. Chroń .htaccess przed dostępem
Dodaj do .htaccess:
Order Allow,Deny Deny from all
43. Blokuj access do wrażliwych plików
Order Allow,Deny Deny from all
Zabezpieczenie uploadów i formularzy
44. Ogranicz typy plików do uploadu
Domyślnie WP blokuje .php, ale hakerzy mogą uploadować .php5, .phtml.
Dodaj do /wp-content/uploads/.htaccess:
Order Allow,Deny Deny from all
45. Walidacja formularzy
Wszystkie formularze (contact, comment) powinny mieć:
- CAPTCHA (reCAPTCHA v3)
- Honeypot
- CSRF tokens (WordPress nonce)
Regularne skanowanie malware
46. Codzienne automated scans
Wtyczki security (Wordfence, Sucuri) skanują daily. Sprawdzaj raporty.
47. Scan po każdej instalacji wtyczki
Nowa wtyczka może być skompromitowana - scan natychmiast po instalacji.
48. External malware scanners
Oprócz Wordfence/Sucuri, użyj:
- Sucuri SiteCheck
- VirusTotal
- Google Safe Browsing: sprawdź status
Bezpieczne kopie zapasowe w chmurze
49. Szyfrowane backupy
Backup zawiera credentials do bazy - musi być zaszyfrowany.
UpdraftPlus: opcja szyfrowania AES-256 przed upload do chmury.
50. Retencja kopii: 30 dni rotacji
- Daily backups: keep ostatnie 7
- Weekly backups: keep ostatnie 4
- Monthly backups: keep ostatnie 12
Automatyczne powiadomienia o zagrożeniach
51. Powiadomienia email o kluczowych zdarzeniach:
- Nieudane logowanie (po 5 próbach)
- Udane logowanie admina
- Instalacja/usunięcie wtyczki
- Edycja plików core WordPress
- Zmiana hasła użytkownika
- Malware detection
Konfiguracja: Wordfence → Alerts lub WP Activity Log → Notifications
Bezpieczne logowanie przez klucze SSH
52. Wyłącz password authentication, używaj SSH keys
Edytuj /etc/ssh/sshd_config:
PasswordAuthentication no PubkeyAuthentication yes
Restart SSH: sudo systemctl restart sshd
53. Zmień domyślny port SSH (22)
W /etc/ssh/sshd_config:
Port 2222 # Zamiast 22
Boty skanują port 22 - zmiana portu redukuje noise.
Segmentacja użytkowników i ról
54. Custom user roles
Domyślne role (Admin, Editor, Author) mogą być za szerokie.
Wtyczka: User Role Editor - stwórz custom roles z dokładnymi permissions.
Przykład: "Blog Manager" - może publikować posty, ale nie instalować wtyczek.
Audyt bezpieczeństwa co kwartał
55. Quarterly security checklist
- Audyt user accounts - usuń nieaktywne
- Przegląd zainstalowanych wtyczek/motywów
- Sprawdź changelog security exploitów (WPScan Vulnerability Database)
- Test backup restore (czy backup działa?)
- Review file permissions
- Zmień security keys w wp-config
- Review error logs
Testy penetracyjne i monitoring uptime
56. Penetration testing
Raz w roku zleć test bezpieczeństwa specjaliście.
DIY: Użyj WPScan (command-line security scanner):
wpscan --url https://twojadomena.pl --enumerate vp
57. Uptime monitoring
Monitor czy strona jest online 24/7.
Narzędzia:
- UptimeRobot (sprawdzenie co 5 minut)
- Jetpack Monitor
- Pingdom
Email/SMS alert jeśli strona down > 5 minut.
Plan reakcji na incydenty
58. Incident response plan
Co robić gdy zostaniesz zhakowany:
Krok 1: Izolacja
- Odłącz stronę od internetu (suspend hosting)
- Zablokuj wszystkie user accounts
Krok 2: Analiza
- Sprawdź logi (access.log, error.log)
- Znajdź backdoor (scan Wordfence/Sucuri)
- Określ źródło włamania
Krok 3: Cleanup
- Usuń malware
- Przywróć z backup (sprzed ataku)
- Zmień WSZYSTKIE hasła (WP, hosting, baza, FTP)
- Regeneruj security keys
Krok 4: Zabezpieczenie
- Aktualizuj wszystko
- Zainstaluj security plugin
- Wdrażaj punkty z tej checklisty
Krok 5: Monitoring
- Daily scans przez miesiąc
- Monitor traffic i logów
Professional cleanup: skorzystaj z wyspecjalizowanej usługi albo pomocy administratora bezpieczeństwa.
Podsumowanie i checklista do pobrania (PDF)
Kluczowe wnioski
Bezpieczeństwo WordPressa to nie jednorazowa akcja, tylko stały proces. Ta checklista zbiera najważniejsze kroki, które ograniczają typowe ryzyka: od włamań przez panel, po luki we wtyczkach i błędy konfiguracyjne.
Quick Start - Minimum Viable Security (top 10):
- Aktualizuj WordPress, wtyczki, motywy, PHP
- ✓ Silne hasła (16+ znaków) + 2FA
- HTTPS/SSL
- Zainstaluj Wordfence lub Sucuri
- Daily automated backups (offsite)
- Limit login attempts
- Zmień prefix bazy danych
- Wyłącz file editing (DISALLOW_FILE_EDIT)
- Chroń wp-config.php
- Usuń nieużywane wtyczki/motywy
Full Checklista (58 punktów):
- Podstawy (1-4): Aktualizacje, hasła, role, audyt users
- Serwer (5-8): SSL, PHP/MySQL, directory browsing, file editing
- Wtyczki (9): Wordfence/Sucuri/iThemes
- Dostęp (10-13): Custom login URL, IP whitelist, XML-RPC, wp-config
- Baza danych (14-16): Custom prefix, silne hasło, permissions
- Uprawnienia (17-18): File permissions 755/644, owner/group
- WAF (19): Cloudflare/Sucuri/Wordfence firewall
- Brute force (20-22): Login limits, CAPTCHA, honeypot
- Backup (23): Daily, offsite, automatyczne
- Monitoring (24-26): File integrity, activity log, failed logins
- Ukrywanie (27-29): WP version, login errors, user enumeration
- API (30): Ogranicz REST API
- 2FA (31): Google Authenticator dla adminów
- Wtyczki/motywy (32-34): Zaufane źródła, usuń nieużywane, no nulled
- Środowiska (35-36): Dev/stage/prod separation, wyłącz debug
- wp-config (37-38): Security keys, przenieś poza root
- XSS/SQL (39-40): Sanitize/escape, CSP header
- XML-RPC (41): Wyłącz jeśli nie używasz
- .htaccess (42-43): Chroń .htaccess i wrażliwe pliki
- Uploady (44-45): Ogranicz typy plików, walidacja formularzy
- Malware (46-48): Daily scans, post-install scans, external scanners
- Backup chmura (49-50): Szyfrowane, retention 30 dni
- Powiadomienia (51): Email alerts
- SSH (52-53): Keys only, zmień port
- Role (54): Custom user roles
- Audyt (55): Co kwartał
- Testy (56-57): Pen-testing, uptime monitoring
- Incident (58): Response plan
Finalny checklist
Bezpieczeństwo WordPressa w 2025 roku to podstawa, nie dodatek. Najwięcej ryzyka wynika zwykle z zaległych aktualizacji, słabych haseł i zbyt szerokich uprawnień.
Zacznij od podstaw. Nawet wdrożenie samych top 10 punktów wyraźnie ogranicza ryzyko.
Potrzebujesz pomocy w zabezpieczeniu WordPressa? Przeprowadzimy security audit i wdrożymy wszystkie punkty z checklisty.
Chcesz kompleksowo zabezpieczyć swoją stronę WordPress? Chętnie przeprowadzimy dla Ciebie pełny audyt bezpieczeństwa i wdrożymy wszystkie 30 punktów z naszej checklisty. Skontaktuj się z nami, aby uzyskać profesjonalną ochronę przed atakami, malware i włamaniami dostosowaną do Twojej witryny.