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 vulnerability w wtyczkach
- 10% ataków wykorzystuje dziury w motywach
- 8% włamań to słabe hasła
- Średni koszt naruszenia danych: 4.35 mln USD globalnie (IBM Security)
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żytku
- 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: Minimum PHP 8.0+ (starsze wersje mają znane exploity)
2. Silne hasła dla wszystkich użytkowników
Hasło powinno mieć minimum 16 znaków z mix wielkich/małych liter, cyfr i symboli.
- Używaj password managera (1Password, Bitwarden)
- Wymuszaj strong passwords wtyczką (Force Strong Passwords)
- Zmiana hasła co 3-6 miesięcy
- Nigdy nie używaj tego samego hasła na wielu stronach
3. Ogranicz liczbę administratorów
Minimum privilege principle: Tylko osoby, które MUSZĄ mieć admin access, powinny go mieć.
- Content writers - Editor role
- Klienci - Author/Contributor role
- Admin - tylko Ty i zaufani developerzy
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)
Non-negotiable w 2025. HTTPS szyfruje komunikację między serwerem a użytkownikiem.
- Certyfikat SSL: Let's Encrypt (darmowy) lub płatny wildcard
- 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 MySQL
- PHP 8.2+ - starsze wersje (7.x i niższe) nie mają wsparcia security
- MySQL 8.0+ lub MariaDB 10.6+
- Sprawdź: Dashboard - Site Health w WordPress
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 comprehensive security plugin
Wordfence Security (FREE)
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 (FREE + Premium około 735 zł/rok)
- Audyt bezpieczeństwa
- Malware scanning
- Blacklist monitoring
- Post-hack security actions
- Premium: Website firewall (WAF) z edge protection
iThemes Security (FREE)
- 30+ sposobów zabezpieczenia WP
- Brute force protection
- File change detection
- 404 detection (skanowanie exploitów)
- Database backups
Rekomendacja: Wordfence Free dla większości stron, Sucuri Premium dla high-value sites.
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
User WordPressa nie powinien mieć DROP, ALTER, GRANT
privileges - tylko SELECT, INSERT, UPDATE, DELETE.
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 (FREE)
- Change DNS do Cloudflare
- Włącz "Under Attack Mode" przy DDoS
- Firewall rules: blokuj kraje/IP
Opcja 2: Sucuri Firewall (około 735 zł/rok)
- Edge firewall (przed serwerem)
- DDoS mitigation
- Malware cleanup included
Opcja 3: Wordfence WAF (FREE)
- 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 = jedyna 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 (FREE + Premium) - najpopularniejsza, łatwa
- BackWPup (FREE)
- Duplicator (FREE + Pro)
- VaultPress (Jetpack Backup, około 18 zł/m)
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
Track każdej akcji: logowania, edycje postów, instalacje wtyczek, zmiany ustawień.
Wtyczki:
- WP Activity Log - najbardziej comprehensive (FREE + Premium)
- Simple History (FREE)
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) - FREE, 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 zawsze zawierają malware. Koszt czyszczenia zhakowanej strony >> koszt licencji.
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 i zmień co 3-6 miesięcy.
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 (FREE online)
- 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. Retention policy: 30-day rolling backups
- Daily backups: keep ostatnie 7
- Weekly backups: keep ostatnie 4
- Monthly backups: keep ostatnie 12
Automatyczne powiadomienia o zagrożeniach
51. Email alerts dla kluczowych event:
- 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
Rocznie: zatrudnij security professional do pen-testu.
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 (FREE, checks co 5 minut)
- Jetpack Monitor (FREE, wbudowane w Jetpack)
- 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: Sucuri (734 zł), Wordfence (1808 zł), lub freelance security expert.
Podsumowanie i checklista do pobrania (PDF)
Kluczowe wnioski
Bezpieczeństwo WordPress to nie jednorazowa akcja, ale ciągły proces. Ta checklista to 30 fundamentalnych kroków, które chronią przed 95% ataków.
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
WordPress security w 2025 to must-have, nie nice-to-have. Koszt implementacji tej checklisty: 2-4 godziny pracy. Koszt zhakowania: utrata danych, reputacji, SEO rankingu, potencjalnie tysiące złotych w cleanup.
Zacznij dziś. Nawet wdrożenie samych top 10 punktów redukuje ryzyko o 80%.
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.