Bezpieczeństwo WordPress - checklista top 30

Spis treści

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.

Jeśli interesuje Cię ochrona przed atakami DDoS i botami, polecam przeczytać artykuł: WAF w WordPress – jak chronić stronę przed atakami botów i DDoS, gdzie znajdziesz więcej szczegółów na temat konfiguracji i najlepszych praktyk.

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:

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):

  1. Aktualizuj WordPress, wtyczki, motywy, PHP
  2. ✓ Silne hasła (16+ znaków) + 2FA
  3. HTTPS/SSL
  4. Zainstaluj Wordfence lub Sucuri
  5. Daily automated backups (offsite)
  6. Limit login attempts
  7. Zmień prefix bazy danych
  8. Wyłącz file editing (DISALLOW_FILE_EDIT)
  9. Chroń wp-config.php
  10. 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.