Kto przeprowadza audyty bezpieczeństwa WordPress?
WPPoland to specjalizowana agencja WordPress z 20-letnim doświadczeniem i ponad 500 zrealizowanymi projektami. Nasze audyty przeprowadzają certyfikowani specjaliści ds. cyberbezpieczeństwa, z doświadczeniem w wykrywaniu i usuwaniu malware, luk w zabezpieczeniach oraz hardeningu WordPress.
Co zawiera audyt bezpieczeństwa?
Nasz audyt bezpieczeństwa WordPress obejmuje:
- Wykrywanie malware - Głębokie skanowanie plików i bazy danych
- Skanowanie luk - Analiza core, wtyczek i motywów
- Usuwanie wirusów - Kompletne czyszczenie złośliwego kodu
- Hardening - Firewall, 2FA, nagłówki bezpieczeństwa
- Analiza logów - Śledzenie ataków i włamań
- Raport wykonawczy - Pełna dokumentacja znalezionych luk
Gdzie dostępna jest usługa?
Przeprowadzamy audyty bezpieczeństwa WordPress zdalnie dla:
- Polski (Warszawa, Kraków, Wrocław, Gdańsk, cała Polska)
- Europa (Niemcy, Norwegia, UK, Hiszpania, Portugalia)
- Świat - obsługujemy klientów międzynarodowych
Usługa dostępna w języku polskim, angielskim, niemieckim, norweskim, hiszpańskim i portugalskim.
Ile kosztuje audyt bezpieczeństwa?
Ceny audytu i usuwania malware:
| Usługa | Cena | Opis |
|---|---|---|
| Audyt Bezpieczeństwa | wycena indywidualna | Kompletna analiza luk w zabezpieczeniach |
| Usuwanie Malware | wycena indywidualna | Czyszczenie wirusa i odzyskanie strony |
| Pakiet Kompletny | wycena indywidualna | Audyt + Usuwanie + Hardening |
Uwaga: Ceny zależą od złożoności strony i poziomu infekcji. Sklepy WooCommerce mogą mieć inne stawki.
Audyt bezpieczeństwa WordPress: Kompendium wiedzy 2026
W dobie cyfrowej transformacji, bezpieczeństwo strony internetowej przestało być opcją, a stało się absolutną koniecznością. Rok 2025 przyniósł rekordową liczbę cyberataków wymierzonych w systemy CMS, a prognozy na 2026 rok wskazują na dalszy wzrost tego trendu, napędzany m.in. przez automatyzację ataków z wykorzystaniem sztucznej inteligencji (AI). WordPress, zasilający już ponad 43% wszystkich stron w internecie, jest naturalnym celem numer jeden.
Czy Twoja strona jest bezpieczna? Czy masz pewność, że dane Twoich klientów nie wyciekły? Audyt bezpieczeństwa WordPress to nie tylko sprawdzenie „czy strona działa”. To kompleksowy proces analizy, wykrywania luk (vulnerabilities), usuwania złośliwego oprogramowania (malware) i wdrażania strategii obronnej typu hardening.
W tym artykule, napisanym z perspektywy dewelopera i eksperta bezpieczeństwa, przeprowadzę Cię przez kompletny proces audytu. Dowiesz się, jak zabezpieczyć swojego WordPressa w wersji 6.7+, jakich narzędzi używać w 2026 roku i dlaczego podejście „Zero Trust” jest kluczowe dla przetrwania w sieci.
Jak naprawdę dochodzi do włamań
Większość incydentów, które czyścimy, sprowadza się do kilku powtarzających się wzorców. Świadomość tych wzorców zmienia to, czego szukasz w kodzie i logach.
Wtyczki, nie rdzeń
Core WordPressa od linii 5.x jest mocno utwardzony. Włamania, które widzimy na produkcji, idą przez wtyczki, najczęściej w trzech postaciach:
- Endpointy REST rejestrowane z
permission_callback => '__return_true'. Tę szkołę pisania mieliśmy m.in. w Elementorze i kilku znanych form builderach. - Stored XSS w shortcode’ach, które echo’ują
$_GETlub post meta bezwp_kses_post(). - Upload przez AJAX, który przyjmuje plik bez
wp_check_filetype_and_ext()i bez whitelisty MIME; kończy się dropem.cache.phpw/wp-content/uploads/. - Eskalacja uprawnień przez
update_option('user_role')wystawione na save settings, który ufa requestowi.
Audyt sprawdza zainstalowane sluginy względem WPScan i Patchstack, a potem czyta źródło wtyczek pod kątem powyższych wzorców. Sama baza CVE nie wystarcza, bo zero-day nie jest jeszcze skatalogowany.
Enumeracja użytkowników
?author=1 przekierowuje na /author/<slug>/ i wystawia login admina. Tak samo ?rest_route=/wp/v2/users i /wp-json/wp/v2/users na instalacjach, które nigdy nie ograniczyły publicznego endpointu users. Po hardeningu oba powinny zwracać 404 albo pustą tablicę.
XML-RPC i amplifikacja
/xmlrpc.php jest ulubionym celem botnetów Loginizer-style. Klasyczny trik amplifikacyjny to system.multicall opakowujący wp.getUsersBlogs; jeden POST testuje 1000+ haseł. Jeśli nie używasz Jetpack i aplikacji mobilnej WP, można to wyłączyć całkowicie. Jeśli używasz, ograniczenie idzie na poziom WAF (Cloudflare managed challenge na /xmlrpc.php), nie do wp-config.
Konsekwencje, które realnie boli klienta
Skompromitowana strona w polskim ekosystemie oznacza najczęściej:
- Wyciek bazy klientów objętej RODO i obowiązek zgłoszenia incydentu do UODO w ciągu 72 godzin (art. 33 RODO). IOD musi mieć log dostępu pokazujący, kiedy doszło do nieautoryzowanego dostępu, a zwykła wtyczka security tego nie wystarczy.
- Ryzyko wokół KSeF. Jeśli
wp-config.phpprzechowuje klucze do API KSeF (testowego lub produkcyjnego), każdy backdoor w/wp-content/uploads/ma do nich dostęp i może wystawiać faktury w imieniu firmy. Klucze KSeF nigdy nie powinny siedzieć w plikach pod web rootem; minimum to zmienna środowiskowa poza katalogiem WWW. - Wycieki credentiali Allegro, Przelewy24, Tpay. Restricted key Stripe albo seed do PSP zaszyte w
wp-config.phpjest pierwszą rzeczą, którą atakujący wyciąga przez backdoor. Mailer z firmową domeną zamienia się w spam relay w 48 godzin, host blackholuje port 25, a dostawca PSP cofnie ci konto na czas wyjaśnienia. - Pharma Hack i japanese keywords: czerwony ekran w Chrome i spadek pozycji w SERP, którego odbudowa po Safe Browsing trwa 2-6 tygodni nawet po pełnym czyszczeniu.
Checklist audytu bezpieczeństwa WordPress
Profesjonalny audyt to proces ustrukturyzowany. Poniższa tabela przedstawia moją autorską checklistę, którą stosuje podczas pracy z klientami.
| Krok | Opis działania | Narzędzia | Szacowany czas |
|---|---|---|---|
| 1. Skanowanie zewnętrzne | Wykrycie widocznych infekcji, sprawdzenie czarnych list (Google Safe Browsing). | WPScan, Sucuri SiteCheck | 1-2h |
| 2. Analiza plików Core | Porównanie sum kontrolnych plików WordPressa z oryginałem. Wykrycie backdoorów. | WP-CLI, Wordfence | 2-3h |
| 3. Audyt wtyczek i motywów | Identyfikacja porzuconych wtyczek (abandonware) i znanych luk (CVE). | WPScan Vulnerability DB | 1h |
| 4. Baza danych (SQL) | Szukanie wstrzykniętego kodu (spam linki, admini widmo). | PHPMyAdmin, SQL Queries | 2-4h |
| 5. Logi serwera | Analiza access.log i error.log w poszukiwaniu śladów włamania. | SSH, grep, awk | 2-3h |
Najczęstsze rodzaje infekcji (Malware)
Podczas audytów najczęściej spotykam się z trzema typami zagrożeń:
1. SEO Spam (Pharma Hack / Japanese Keywords)
Hakerzy wstrzykują tysiące stron z chińskimi lub japońskimi znakami, promując podróbki produktów.
- Objaw: W wynikach wyszukiwania Google Twoja strona wyświetla dziwne znaki.
- Skutek: Pełna blokada w Google (ban) w ciągu 14 dni.
wycena indywidualna ośliwe przekierowania (Malicious Redirects)
Użytkownik wchodzący na stronę jest przekierowywany na witryny hazardowe lub pornograficzne. Często działa to tylko dla użytkowników mobilnych lub z konkretnych lokalizacji, co utrudnia wykrycie przez właściciela.
- Mechanizm: Zmieniony plik
header.phplub zainfekowany plik.htaccess.
3. Backdory PHP
Ukryte skrypty (np. w plikach systemowych typu wp-includes/images.php), które pozwalają hakerowi odzyskać kontrolę nad stroną nawet po zmianie haseł.
Hardening, który realnie zmienia ekspozycję
Hardening to nie checklist, który odhaczasz raz. To zestaw ograniczeń, które utrudniają lądowanie kolejnej klasy exploitów. Poniżej kolejność, w jakiej wdrażamy to przy audycie.
Stałe w wp-config.php. DISALLOW_FILE_EDIT i DISALLOW_FILE_MODS ucinają edytor w panelu i instalator wtyczek. FORCE_SSL_ADMIN blokuje kradzież ciastek na sieciach współdzielonych. WP_AUTO_UPDATE_CORE => 'minor' puszcza poprawki bezpieczeństwa bez ryzyka, że major aktualizacja położy sklep w piątek wieczorem. Sam plik trzymamy w trybie 440, własność na użytkowniku wdrożenia, nie web userze. Klucze do API (KSeF, Tpay, Przelewy24) nie idą tutaj; idą do zmiennych środowiskowych poza web rootem.
Rotacja sekretów. Audyt rotuje osiem soli AUTH_KEY/SECURE_AUTH_KEY przez generator wordpress.org i wymusza wylogowanie wszystkich sesji. Robimy też przegląd Application Passwords w Users → Profile i unieważniamy te, które nie mają dokumentacji integracji.
Warstwa logowania. Two Factor lub Wordfence Login Security z TOTP, plus udokumentowana ścieżka odzyskania przez WP-CLI (wp user meta delete <id> _two_factor_* z serwera, kiedy ktoś zgubi telefon). Throttling na brzegu sieci, nie tylko w PHP. Dla sklepu na Cloudflare: WAF custom rule limitujący POST do /wp-login.php do 5 prób na minutę z IP, managed challenge na /xmlrpc.php. Polskie hostingi managed (Mhostingu, home.pl, Cyberfolks) coraz częściej oferują WAF na poziomie panelu; sprawdź zanim doinstalujesz Wordfence Premium na duplikat.
System plików. PHP wyłączone w /wp-content/uploads/ regułą <FilesMatch "\.php$"> Require all denied </FilesMatch> w .htaccess lub odpowiednikiem nginx location block. wp-config.php przeniesiony katalog wyżej tam, gdzie hosting na to pozwala. Listing katalogów off. xmlrpc.php 403, jeśli strona tego nie potrzebuje.
Filtrowanie na brzegu. ModSecurity OWASP CRS na paranoia level 1, z udokumentowanymi wyjątkami site-specific zamiast hurtowego wyłączenia. Custom rule blokujący znane user-agenty wp-scan i POSTy do /wp-admin/admin-ajax.php bez nagłówka nonce. Dla klientów RODO ważne jest, żeby Cloudflare miał ustawione DPA i Data Localization w EU; bez tego IOD nie podpisze rejestru czynności przetwarzania.
Detekcja, nie tylko prewencja. Codzienny diff plików core, wtyczek i motywów względem upstream zip checksumów przez WP-CLI (wp checksum core, wp checksum plugin --all). fail2ban czyta access log pod kątem ratio 200/302 na /wp-login.php, bo udany brute force pojawia się tam wcześniej niż gdziekolwiek indziej. Alerty na nowe konta admin i na zdarzenia user_register poza godzinami pracy. Dla klientów z IOD ten log idzie do osobnego rejestru audytowego; to jest dokument, który firma pokazuje UODO, jeśli dojdzie do incydentu.
Trzy incydenty, które widzimy najczęściej
Liczba „średni koszt naruszenia to X tysięcy złotych” nie ma żadnej wartości operacyjnej, bo każde naruszenie kosztuje co innego. Wartość mają wzorce techniczne, które powtarzają się przy czyszczeniach.
Trwały admin po injection. Dziurawa wtyczka formularzy puszcza wp_insert_user() przez źle skonfigurowany endpoint AJAX. Konto dostaje rolę administrator i niewinną nazwę „Support” lub „Editor”. Przywrócenie backupu sprzed tygodnia nic nie daje, bo injection był wcześniej, a backup jest już zatruty. Polujemy na to diffem wp_users i wp_usermeta względem ostatniego czystego snapshota, nie zaufaniem do listy w panelu. Dla sklepu Allegro lub WooCommerce z integracją PSP to poważne; taki admin może wystawić faktury KSeF i podmienić dane bankowe na fakturach pro forma.
Backdoor w uploadach. Plik PHP zrzucony do /wp-content/uploads/2024/03/.cache.php przyjmuje payload base64 przez POST i wykonuje eval(). Częściowy restore samego core’a i wtyczek go nie usuwa, atakujący wraca w kilka godzin. Audyt tarballuje uploads, szuka wewnątrz .php, .phtml i .phar, weryfikuje, że na poziomie serwera PHP jest tam wyłączony.
Wyciek .env przez publiczne repo. Programista commituje .env z hasłem do SMTP relay i restricted key Stripe na publiczny mirror w GitHub. Mailer w 48 godzin staje się relayem spamerskim, hosting blackholuje port 25, a Stripe blokuje konto na czas wyjaśnienia. Recovery to rotacja obu kluczy, scrub git history (git filter-repo), pre-commit hooki blokujące commit .env. Sprawdzamy .env, .env.backup, modyfikacje wp-config-sample.php i każdy plik pod web rootem zawierający DB_PASSWORD lub wzorce _KEY.
Realny koszt to przede wszystkim czas: godziny developera na identyfikację wektora wejścia, downtime w trybie maintenance, krzywa odbudowy SEO po flagu Safe Browsing (2 do 6 tygodni do pełnego oczyszczenia) i rozmowa z klientami, jeśli w zakresie były dane osobowe. Cena audytu jest mała przy każdym z tych pojedynczych kosztów.
Co otrzymujesz po audycie bezpieczeństwa
Audyt kończy się trzema namacalnymi rzeczami, które trafiają do Twojej skrzynki e-mail w ciągu 5 dni roboczych od zakończenia analizy:
- Raport techniczny w PDF z pełną listą znalezionych podatności, posegregowanych po priorytecie (krytyczne, wysokie, średnie, niskie). Każda pozycja ma CVE jeśli istnieje, opis wektora ataku, dowód w postaci screenshotu albo logu, oraz konkretną instrukcję naprawczą napisaną tak, żeby Twój developer mógł ją wdrożyć bez dodatkowych pytań.
- Karta wynikowa (security scorecard) w skali 0-100 z rozbiciem na pięć obszarów: hardening konfiguracji, podatności wtyczek i motywów, integralność bazy danych, ekspozycja brzegowa (WAF i edge), oraz wykrywanie ataków (logi i monitoring). Pozwala porównywać stan strony rok do roku i pokazać zarządowi mierzalny postęp.
- 30-minutowe nagranie wideo z przejściem przez raport, najczęściej do wglądu IOD i osoby technicznej. Tłumaczymy tam, co dokładnie znaleźliśmy, w jakiej kolejności poprawiać i co możesz zostawić jako akceptowalne ryzyko.
Do tego zostaje 30-dniowe wsparcie e-mailowe, w trakcie którego odpowiadamy na pytania uzupełniające z wdrożenia. Jeśli zamówisz pakiet z naprawą, my wdrażamy poprawki krytyczne natychmiast, a po wdrożeniu uruchamiamy re-skan weryfikacyjny, który potwierdza zamknięcie każdej znalezionej luki.
Czego potrzebujemy od Ciebie
Audyt zdalny prowadzimy bez dostępu do Twojego biura ani urządzeń. Potrzebujemy minimum trzech rzeczy, w kolejności od najbardziej krytycznej:
- Tymczasowy login administratora WordPressa (rola
administrator) z dwuskładnikową autoryzacją. Tworzysz konto na potrzeby audytu i kasujesz po jego zakończeniu. Nie potrzebujemy dostępu do panelu hostingowego, jeśli mamy panel WordPressa, ale jest to plus przy głębszym audycie konfiguracji. - Dostęp SSH lub SFTP do serwera (read-only wystarczy w 80% przypadków). Pozwala nam zweryfikować integralność plików core przez
wp-cli, sprawdzić uprawnienia katalogów, przejrzeć logiaccess.logierror.logoraz wykryć backdoory w/wp-content/uploads/. Bez tego część warstwy ataków pozostaje niewidoczna. - Lista integracji i kluczowych wtyczek, najlepiej w formie pliku tekstowego: nazwa, wersja, czy jest aktywna, oraz krótki opis funkcji. Pomaga to priorytetyzować ręczny przegląd kodu w pierwszej kolejności wtyczek, które przyjmują wejście od użytkownika lub mają endpointy REST.
Opcjonalnie przydaje się: dostęp do Google Search Console (pozwala szybko zweryfikować flagę Safe Browsing), kopia ostatniego raportu z poprzedniego audytu (jeśli istnieje), oraz dostęp do narzędzia monitorującego (Wordfence, Sucuri, Patchstack), z którego zbieramy historyczne alerty. Jeśli czegoś brakuje, dopasowujemy zakres audytu i dokumentujemy w raporcie, czego nie udało się sprawdzić.
Jak audyt bezpieczeństwa pomaga Twojej firmie
Audyt to nie zakup techniczny, to zarządzanie trzema konkretnymi ryzykami biznesowymi:
- Zaufanie klientów i reputacja marki. Strona oflagowana przez Google Safe Browsing albo Chrome Deceptive Site jest niedostępna dla 60-80% ruchu organicznego w ciągu godzin. Powrót do pełnej widoczności po pełnym czyszczeniu trwa zwykle 2 do 6 tygodni, a wśród klientów B2B utracone zaufanie zostaje znacznie dłużej. Audyt pre-incydentowy kosztuje ułamek tej krzywej.
- Zgodność z RODO i KSeF. Wyciek danych osobowych z bazy WooCommerce albo z formularza kontaktowego oznacza obowiązek zgłoszenia do UODO w ciągu 72 godzin (art. 33 RODO) oraz, w zależności od skali, powiadomienie samych osób (art. 34). Audyt pokazuje, gdzie dane są przechowywane, jak są chronione i czy konfiguracja Cloudflare ma DPA i Data Localization w UE. Strony, które integrują się z KSeF, dostają osobny moduł sprawdzający ekspozycję kluczy API i sposób ich przechowywania (zmienne środowiskowe poza web rootem, nie
wp-config.php). - Straty finansowe. Realne koszty po incydencie to: pełna naprawa techniczna od 8 do 40 godzin developera, downtime sklepu w trakcie czyszczenia, kary umowne z PSP (Tpay, Przelewy24, Stripe) za naruszenie bezpieczeństwa danych płatniczych, oraz koszt obsługi prawnej zgłoszenia do UODO. Audyt pre-incydentowy zamyka większość wektorów ataku zanim staną się aktywne.
Mierzalny efekt biznesowy widzimy najczęściej w trzech wskaźnikach: spadek liczby incydentów wymagających reakcji (typowo o 70-90% rok do roku po pełnym hardeningu), skrócenie czasu wykrycia (mean time to detect) z dni do godzin po wdrożeniu codziennego diff’a checksumów, oraz zerowanie zgłoszeń od użytkowników o „dziwnych przekierowaniach” w Google.
Potrzebujesz pomocy? Wyślij krótki opis projektu, żeby zaplanować audyt zakresowy, jednorazowe czyszczenie po incydencie albo monitoring z miesięcznym diffem checksumów i kwartalnym re-audytem.



