5 podstaw: zrób je najpierw
- Aktualizuj rdzeń WordPress, motywy i wtyczki. Podatne wtyczki to wektor ataku numer 1. Włącz automatyczne aktualizacje wersji pomniejszych (WordPress 5.6+ robi to domyślnie). W przypadku wersji większych aktualizuj w ciągu 7 dni od wydania. W przypadku wtyczek włącz automatyczną aktualizację tych zaufanych; ręcznie przeglądaj informacje o wydaniach wtyczek krytycznych.
- Używaj silnych, unikalnych haseł do każdego konta WordPress. Zwłaszcza administratorskich. Korzystaj z menedżera haseł (1Password, Bitwarden). Wyłącz nazwę użytkownika «admin»: utwórz nowego administratora i usuń starego.
- Włącz uwierzytelnianie dwuskładnikowe. Użyj Wordfence Login Security (za darmo) lub naszego Generatora Kodów QR 2FA z dowolną aplikacją TOTP. 2FA pokonuje ponad 99% ataków typu credential stuffing.
- Zainstaluj zaufaną wtyczkę bezpieczeństwa. Wordfence (darmowa wersja wystarcza większości stron) lub Solid Security. Nie nakładaj na siebie kilku: wchodzą ze sobą w konflikt. Wtyczka zarządza limitowaniem prób logowania, monitorowaniem integralności plików i skanowaniem w poszukiwaniu złośliwego oprogramowania.
- Codzienne kopie zapasowe poza witryną. UpdraftPlus → Dropbox/Google Drive. Wykonaj kopię, zanim będzie potrzebna. Przetestuj proces przywracania co najmniej raz.
Kolejnych 10: dodatkowe zabezpieczenia o dużym wpływie
- Wymuś HTTPS. Let's Encrypt jest darmowy na każdym nowoczesnym hostingu. Przekierowuj HTTP na HTTPS na poziomie serwera.
- Zmień prefiks tabel bazy danych. WordPress domyślnie używa wp_; zmień go na coś niestandardowego podczas instalacji. Nie zapobiega atakom, ale utrudnia niektóre wzorce ataków.
- Wyłącz XML-RPC, jeśli go nie używasz. XML-RPC to częsty wektor amplifikacji brute force. Jeśli nie używasz aplikacji mobilnej Jetpack ani publikacji zdalnej, wyłącz go za pomocą .htaccess lub wtyczki.
- Limituj próby logowania. Wordfence robi to automatycznie. Zapobiega credential stuffingowi metodą brute force.
- Rotuj klucze/sole uwierzytelniania WordPress. Użyj naszego Generatora Soli WordPress. Rotuj je po każdym podejrzeniu kompromitacji, po usunięciu skompromitowanego administratora oraz rutynowo co 6–12 miesięcy.
- Do transferu plików używaj SSH lub SFTP, nigdy zwykłego FTP. FTP przesyła poświadczenia zwykłym tekstem.
- Ogranicz dostęp do wp-admin według adresu IP, jeśli to możliwe. Jeśli Twój zespół używa stałych adresów IP (biuro, VPN), ogranicz wp-admin tylko do tych adresów IP. Za pomocą .htaccess lub konfiguracji Nginx.
- Wyłącz edycję plików w wp-config.php. Dodaj:
define('DISALLOW_FILE_EDIT', true);Uniemożliwia atakującym edytowanie motywów/wtyczek z panelu, jeśli skompromitują konto. - Ukryj numer wersji WordPress. Usuń metaznacznik generator. Nie zapobiega atakom, ale ogranicza fingerprinting.
- Zablokuj uprawnienia plików. Pliki 644, katalogi 755, wp-config.php 600. Większość hostingów zarządzanych robi to automatycznie; na VPS skonfiguruj to jawnie.
Dopracowanie: dobre, ale niekrytyczne
- Niestandardowy adres URL logowania (np. WPS Hide Login). Przede wszystkim redukuje szum ruchu botów; to nie jest prawdziwe bezpieczeństwo.
- CAPTCHA w formularzach logowania. Lekka przeszkoda dla zautomatyzowanych ataków.
- Wyłącz wykonywanie PHP w /uploads/. Uniemożliwia uruchamianie przesłanych powłok PHP.
- Użyj WAF Cloudflare (darmowy poziom). Filtruje złośliwy ruch, zanim dotrze do Twojego serwera.
- Skonfiguruj alert e-mail dla administratora o aktualizacjach wtyczek/rdzenia.
- Użyj wstępnego ładowania HSTS, aby wymusić HTTPS na poziomie przeglądarki.
- Wyłącz enumerację użytkowników przez REST API (Solid Security lub Wordfence to obsługują).
- Używaj nagłówków Polityki Bezpieczeństwa Treści (CSP).
- Wyłącz przeglądanie katalogów (większość hostingów robi to domyślnie).
- Monitoruj dostępność + integralność za pomocą usługi zewnętrznej (darmowy poziom UptimeRobot + cotygodniowy Sucuri SiteCheck).
- Ogranicz role użytkowników do minimum uprawnień. Większość współpracowników nie potrzebuje dostępu na poziomie redaktora.
- Szyfrowanie kopii zapasowych bazy danych (oferuje je UpdraftPlus Premium).
- Hostowanie obrazów poza domeną za pomocą CDN (redukuje powierzchnię ataku).
- Okresowy przegląd dziennika audytu bezpieczeństwa.
- Coroczny test penetracyjny, jeśli strona generuje znaczące przychody.
Mity o bezpieczeństwie WordPress: pomiń je
Kilka mocno polecanych zabezpieczeń «bezpieczeństwa» oferuje minimalną realną ochronę: (1) «Ukrywanie wersji WordPress»: znajomość Twojej wersji nieznacznie pomaga atakom celowanym, ale prawdziwym rozwiązaniem jest aktualizacja, a nie ukrywanie. (2) «Przenoszenie wp-config.php powyżej public_html»: daje zasadniczo zerową korzyść bezpieczeństwa; plik jest już chroniony przez .htaccess. (3) «Wyłączanie REST API»: psuje wiele wtyczek, a blokuje niewiele. Zamiast tego limituj konkretne punkty końcowe. (4) «Nakładanie kilku wtyczek bezpieczeństwa»: wchodzą w konflikt i się pokrywają. Jedna zaufana wtyczka (Wordfence lub Solid Security) pokrywa to, co zrobiłyby trzy. (5) «Zmiana nazwy wp-login.php»: bezpieczeństwo przez zaciemnianie; atakujący łatwo znajdują nowy adres URL przez przekierowania.
Jeśli zostałeś zhakowany: lista kontrolna odzyskiwania
- Nie panikuj; nie usuwaj niczego od razu. Najpierw zrób migawkę bieżącego stanu na potrzeby analizy śledczej.
- Wyłącz stronę z sieci (wtyczka trybu konserwacji lub przekierowanie .htaccess na statyczną stronę).
- Zmień wszystkie hasła administratorów i rotuj sole WordPress.
- Skontroluj konta użytkowników: natychmiast usuń nierozpoznane konta administratorów.
- Przeskanuj w poszukiwaniu złośliwego oprogramowania za pomocą Wordfence Premium lub Sucuri.
- Porównaj bieżące pliki z czystym pobraniem WordPress: różnica ujawnia zmodyfikowane pliki rdzenia.
- Przejrzyj tabelę wp_options bazy danych w poszukiwaniu nieoczekiwanych wpisów (często zawiera wstrzyknięty JS).
- Przywróć z najnowszej czystej kopii zapasowej (właśnie dlatego codzienne kopie mają znaczenie).
- Po przywróceniu skontroluj każdą wtyczkę: usuń nieużywane, zaktualizuj wszystkie i zastąp każdą z publicznymi CVE.
- Zaktualizuj rdzeń WordPress do najnowszej wersji.
- Ponownie włącz stronę i obserwuj pod kątem ponownej infekcji przez 30 dni.