Jak sprawdzić bezpieczeństwo strony internetowej bez hakowania

Pasywne testy bezpieczeństwa sklepu: ważność certyfikatu TLS, HSTS, CSP, nosniff, flagi cookies, mixed content, stary jQuery, security.txt i DMARC.

Redakcja FixReports10 min czytania

Wiele elementów zabezpieczeń sklepu internetowego możesz sprawdzić z zewnątrz, odczytując to, co strona i tak wysyła każdemu odwiedzającemu: certyfikat TLS, przekierowania, nagłówki odpowiedzi HTTP, pliki cookie, ładowane skrypty i publiczne rekordy DNS. Takie pasywne testy nie wysyłają ruchu atakującego i nie wymagają logowania, więc obciążają sklep nie bardziej niż zwykła wizyta. Wychwytują luki w konfiguracji, takie jak wygasający certyfikat, brak HSTS, niezabezpieczone pliki cookie, mieszana zawartość (mixed content) czy wersja jQuery ze znanymi podatnościami. Nie są testem penetracyjnym i nie mogą dowieść, że sklep jest bezpieczny.

Najważniejsze w skrócie

Co uznaje się za pasywny test bezpieczeństwa?

Test pasywny jedynie odczytuje to, co strona lub jej DNS zwracają w odpowiedzi na zwykłe żądanie.

Oznacza to wczytywanie publicznych stron, odczytywanie certyfikatu i nagłówków odpowiedzi, sprawdzanie, jakie pliki cookie i skrypty ustawia strona, oraz odpytywanie publicznych rekordów DNS. Test pasywny nie zgaduje haseł, nie wysyła ładunków typu injection, nie sonduje adresów panelu administracyjnego i nie skanuje portów. Wszystko, co opisujemy poniżej, możesz zrobić za pomocą przeglądarki oraz narzędzi curl, openssl i dig.

Jak sprawdzić certyfikat TLS i datę jego wygaśnięcia?

Odczytaj bezpośrednio daty i nazwy w certyfikacie i upewnij się, że jego odnawianie jest zautomatyzowane.

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates

Sprawdź, czy data notAfter przypada z dużym zapasem w przyszłości, czy certyfikat obejmuje zarówno example.com, jak i www.example.com, jeśli używasz obu (nazwy pokazuje podgląd certyfikatu w przeglądarce), i czy przeglądarka nie wyświetla ostrzeżeń. Okresy ważności certyfikatów skracają się zgodnie z Baseline Requirements organizacji CA/Browser Forum (sekcja 6.3.2, wersja 2.3.1 według stanu na październik 2026 roku), w następstwie głosowania SC-081v3 (otwiera się w nowej karcie) przyjętego 11 kwietnia 2025 roku:

Data wydania certyfikatuMaksymalny okres ważności
Przed 15 marca 2026398 dni
Od 15 marca 2026 do 14 marca 2027200 dni
Od 15 marca 2027 do 14 marca 2029100 dni
Od 15 marca 202947 dni

Przy krótkich okresach ważności ręczne odnawianie jest ryzykowne, więc upewnij się, że Twój hosting lub narzędzie do obsługi certyfikatów odnawia je automatycznie. Sprawdź też, czy zwykłe HTTP przekierowuje na HTTPS:

curl -sI http://example.com/ | grep -i -E "^HTTP|^location"

Oczekiwany wynik to odpowiedź 301 (lub 308) z nagłówkiem location zaczynającym się od https://.

Jakie nagłówki bezpieczeństwa powinien wysyłać sklep internetowy?

Niewielki zestaw nagłówków odpowiedzi blokuje typowe ataki po stronie przeglądarki niemal bez kosztów.

NagłówekCo robiTypowa wartośćŹródło
Strict-Transport-SecurityNakazuje przeglądarkom używać wyłącznie HTTPS i uniemożliwia użytkownikom ignorowanie błędów certyfikatumax-age=31536000; includeSubDomainsMDN (otwiera się w nowej karcie)
Content-Security-Policy: frame-ancestorsOkreśla, które witryny mogą osadzać Twoje strony, co chroni przed clickjackingiemframe-ancestors 'self'MDN (otwiera się w nowej karcie)
X-Frame-OptionsStarszy mechanizm kontroli osadzania w ramkach; według OWASP w przeglądarkach, które obsługują frame-ancestors, jest on przestarzałyDENY lub SAMEORIGINOWASP (otwiera się w nowej karcie)
X-Content-Type-OptionsWyłącza zgadywanie typu MIME (MIME sniffing) i blokuje skrypty oraz arkusze stylów serwowane z niewłaściwym typemnosniffMDN (otwiera się w nowej karcie)
Referrer-PolicyOgranicza, jaka część Twoich adresów URL jest przekazywana innym witrynomstrict-origin-when-cross-originOWASP
X-XSS-ProtectionNagłówek przeglądarkowego filtra XSS; według OWASP może tworzyć podatności XSS w witrynach, które poza tym są bezpieczneNie ustawiaj go albo ustaw 0OWASP

Sprawdź, co wysyła Twój sklep:

curl -sI https://example.com/
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Security-Policy: frame-ancestors 'self'
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin

Dwie przestrogi. includeSubDomains blokuje każdą subdomenę, która działa tylko przez HTTP, więc najpierw sprawdź subdomeny. Wpisanie na listę HSTS preload wymaga max-age wynoszącego co najmniej 31536000 oraz includeSubDomains, więc dodawaj preload dopiero wtedy, gdy każda subdomena jest gotowa na HTTPS. Pełna polityka CSP ograniczająca skrypty jest warta wdrożenia, ale OWASP zaznacza, że jej konfiguracja i utrzymanie są złożone, a sklepy z wieloma aplikacjami muszą ją starannie przetestować.

Pliki cookie sesji i koszyka powinny mieć wszystkie trzy atrybuty, a zobaczysz je w nagłówkach odpowiedzi Set-Cookie.

AtrybutDziałanie (według MDN (otwiera się w nowej karcie))Gdzie ma znaczenie
SecureWysyłany tylko przez HTTPS; witryny działające na zwykłym HTTP nie mogą go ustawićKażdy plik cookie w sklepie działającym na HTTPS
HttpOnlyJavaScript nie może go odczytać przez document.cookie, co pomaga chronić przed XSSSesje logowania i koszyki
SameSite=Lax lub StrictOgranicza sytuacje, w których plik cookie jest wysyłany w żądaniach między witrynamiSesje; Strict sprawdza się w plikach cookie uwierzytelniania i koszyka
SameSite=NoneWysyłany w żądaniach między witrynami; musi być połączony z SecureTylko osadzone funkcje zewnętrzne, które tego wymagają

Jeśli atrybut SameSite nie jest ustawiony, przeglądarki traktują plik cookie jak Lax. Pliki cookie, które muszą odczytywać Twoje własne skrypty, nie mogą mieć atrybutu HttpOnly, więc skup się na tych, które identyfikują zalogowanego klienta lub administratora.

curl -sI https://example.com/ | grep -i "^set-cookie"

Narzędzia deweloperskie przeglądarki pokazują te same informacje, w tym pliki cookie ustawiane przez skrypty po wczytaniu strony.

Jak znaleźć mieszaną zawartość (mixed content)?

Mieszana zawartość to każdy zasób ładowany przez HTTP na stronie serwowanej przez HTTPS, a konsola przeglądarki wyświetla jej listę.

MDN (otwiera się w nowej karcie) dzieli ją na dwie grupy. Obrazy, dźwięk i wideo to zasoby „możliwe do podniesienia” (upgradable): przeglądarki automatycznie pobierają je przez HTTPS. Skrypty, arkusze stylów, ramki iframe, czcionki i żądania fetch() to zasoby „blokowalne” (blockable): przeglądarki je blokują, co psuje wszystko, co od nich zależało. Podniesione żądania kierowane na sam adres IP również są blokowane.

Aby ją znaleźć, otwórz konsolę na kluczowych szablonach (strona główna, kolekcja, produkt, koszyk) i przeszukaj kod motywu, treść stron i ustawienia aplikacji pod kątem http://. Centrum pomocy Shopify podaje, że każda strona sklepu z zasobem, który nie jest dostarczany przez HTTPS, jest uznawana za niezabezpieczoną (otwiera się w nowej karcie), i zaleca hostowanie zasobów w Shopify lub serwowanie ich przez HTTPS. W WooCommerce sprawdź treść starszych wpisów i opcje motywu, jeśli witryna kiedykolwiek działała na http://.

Jak wykryć przestarzałe biblioteki JavaScript ze znanymi CVE?

Sporządź listę bibliotek ładowanych przez każdą stronę, odczytaj ich wersje i porównaj je z bazą National Vulnerability Database.

Zacznij od jQuery. W konsoli przeglądarki $.fn.jquery zwraca wczytaną wersję (jQuery API (otwiera się w nowej karcie)). Wersje, które należy oznaczyć:

CVEPodatne wersjeProblemOcena NVD (v3.1)
CVE-2020-11022 (otwiera się w nowej karcie)Od 1.12.0 do wersji przed 3.5.0Przekazanie niezaufanego kodu HTML do metod takich jak .html() lub .append() może uruchomić kod6,1 (Medium)
CVE-2020-11023 (otwiera się w nowej karcie)Od 1.0.3 do wersji przed 3.5.0To samo dla kodu HTML zawierającego elementy <option>; w katalogu KEV agencji CISA od 23 stycznia 2025 roku6,1 (Medium)
CVE-2019-11358 (otwiera się w nowej karcie)Przed 3.4.0Zanieczyszczenie prototypu (prototype pollution) przez jQuery.extend(true, ...)6,1 (Medium)

Oba problemy z 2020 roku naprawiono w jQuery 3.5.0. Podatna wersja oznacza, że wadliwy kod jest obecny; to, czy da się go wykorzystać, zależy od tego, jak strona przekazuje do niego dane. WordPress zawiera jQuery 3.5.1 od wersji 5.6 (otwiera się w nowej karcie), więc stary jQuery w sklepie WooCommerce wskazuje na przestarzałego WordPressa albo na motyw lub wtyczkę, które ładują własną kopię. W Shopify sprawdź pliki motywu i aplikacje, które wstrzykują skrypty.

Czym jest security.txt i czy Twój sklep go potrzebuje?

To zwykły plik tekstowy, który informuje badaczy bezpieczeństwa, jak zgłosić Ci podatność.

RFC 9116 (otwiera się w nowej karcie) (kwiecień 2022 roku; to RFC informacyjne, więc stosowanie go jest dobrowolne) stanowi, że plik musi być serwowany przez HTTPS pod adresem /.well-known/security.txt jako text/plain. Pola Contact i Expires są wymagane, a RFC zaleca datę Expires przypadającą za mniej niż rok.

Contact: mailto:security@example.com
Expires: 2027-09-30T23:00:00.000Z
Preferred-Languages: en
Policy: https://example.com/security-policy

W WooCommerce możesz umieścić plik na swoim serwerze. Na platformie hostowanej sprawdź, czy możesz opublikować plik pod tą ścieżką; jeśli nie, wyraźnie opisany kontakt w sprawach bezpieczeństwa na stronie kontaktowej też jest pomocny.

Jak DMARC chroni sklep przed podszywaniem się pod jego adres e-mail?

DMARC pozwala poprosić dostawców poczty o umieszczenie w kwarantannie lub odrzucenie wiadomości, które używają Twojej domeny w adresie From, a nie przechodzą zgodnej weryfikacji SPF ani DKIM.

Rekord z p=none jedynie zbiera raporty; nie zatrzymuje sfałszowanych wiadomości. Klienci oczekują potwierdzeń zamówień i wiadomości o resetowaniu hasła z Twojej domeny, więc warto blokować wiadomości phishingowe, które pokazują dokładnie Twoją domenę. Sprawdź swoją politykę poleceniem dig +short TXT _dmarc.example.com, a specyfikację znajdziesz w RFC 9989 (otwiera się w nowej karcie). DMARC nie obejmuje domen łudząco podobnych, tylko domenę, która publikuje rekord.

Czym zarządza Shopify, a co kontrolujesz w WooCommerce?

Shopify utrzymuje serwery obsługujące jego sklepy, a w samodzielnie hostowanym sklepie WooCommerce ustawienia serwera należą do Ciebie i Twojego dostawcy hostingu.

KontrolaShopifyWooCommerce (własny hosting)
Certyfikat TLSBezpłatny dla wszystkich domen dodanych do Shopify (otwiera się w nowej karcie); w przypadku domen zewnętrznych może to potrwać do 48 godzinTwój hosting lub Twoja własna konfiguracja
Przekierowanie z HTTP na HTTPSPlatformaSerwer WWW, CDN lub ustawienia hostingu
Nagłówki bezpieczeństwaWysyłane przez serwery ShopifySerwer WWW, CDN lub wtyczka
Flagi plików cookieWłasne pliki cookie Shopify ustawia platforma; za pliki cookie aplikacji i motywu odpowiadasz TyRdzeń WordPressa, wtyczki i serwer
Mieszana zawartość i biblioteki JSTwój motyw, treść i aplikacjeTwój motyw, treść i wtyczki
security.txt i DMARCTwoja domena i DNSTwoja domena i DNS

Gdy w październiku 2026 roku sprawdziliśmy kilka sklepów hostowanych przez Shopify, ich odpowiedzi zawierały HSTS z max-age wynoszącym około 91 dni, X-Content-Type-Options: nosniff oraz politykę CSP z upgrade-insecure-requests, natomiast frame-ancestors różniło się między sklepami. Shopify podaje, że ma certyfikat zgodności z PCI DSS na poziomie 1 (otwiera się w nowej karcie). Za motyw i zainstalowane aplikacje nadal odpowiadasz Ty.

W przypadku WooCommerce przewodnik po zabezpieczaniu WordPressa (otwiera się w nowej karcie) zaleca aktualizowanie WordPressa i wtyczek, usuwanie nieużywanych wtyczek i zapytanie dostawcy hostingu, jakie środki bezpieczeństwa stosuje.

Dlaczego to nie jest test penetracyjny?

Test penetracyjny aktywnie próbuje przeprowadzać ataki; testy pasywne jedynie obserwują.

NIST SP 800-115 definiuje testy penetracyjne jako testy bezpieczeństwa, w których oceniający naśladują rzeczywiste ataki, aby znaleźć sposoby obejścia zabezpieczeń systemu (słownik NIST (otwiera się w nowej karcie)). Testy pasywne nie widzą luk po stronie serwera we wtyczkach, słabych lub powtarzanych haseł administratorów, braku uwierzytelniania dwuskładnikowego, błędów kontroli dostępu ani podatnego kodu, który nigdy nie pojawia się w źródle strony. Traktuj je jako punkt odniesienia, który możesz powtórzyć w dowolnym momencie. Jeśli potrzebujesz głębszej pewności, zleć test penetracyjny z pisemnie określonym zakresem, na systemach, które należą do Ciebie lub do których testowania masz uprawnienia.

Bezpłatny skan przeprowadza pierwszą rundę kontroli Twojego sklepu. Raport bezpieczeństwa strony obejmuje pasywne testy opisane w tym artykule, od TLS i przekierowań po nagłówki, pliki cookie, mieszaną zawartość, przestarzałe biblioteki, security.txt i DMARC, wraz z poprawkami dla każdego wyniku. Jak każda pasywna analiza, nie może zagwarantować, że sklep jest bezpieczny.

Najczęściej zadawane pytania

Czy pasywne testy bezpieczeństwa narażają mój sklep na ryzyko?

Nie bardziej niż zwykła wizyta. Pobierają te same publiczne strony i rekordy DNS, które pobrałaby każda przeglądarka lub każdy serwer pocztowy, i nie próbują się logować ani wysyłać ładunków ataku.

Czy w Shopify można dodać nagłówki bezpieczeństwa?

Nagłówki odpowiedzi sklepu pochodzą z serwerów Shopify, więc jeśli brakuje nagłówka, którego potrzebujesz, skontaktuj się z pomocą techniczną Shopify. Tag CSP <meta> w motywie może dodać niektóre dyrektywy, ale MDN zaznacza, że frame-ancestors nie jest obsługiwane w <meta>.

Czy stara wersja jQuery oznacza, że mój sklep został zhakowany?

Nie. Oznacza, że ładowany jest kod ze znanymi podatnościami, co zwiększa ryzyko, jeśli strona przekazuje niezaufany kod HTML do podatnych metod. Zaktualizuj bibliotekę albo usuń motyw lub wtyczkę, które ją ładują.

Jak długo może być obecnie ważny certyfikat TLS?

Publicznie zaufane certyfikaty wydane od 15 marca 2026 roku mogą być ważne najwyżej 200 dni. Od 15 marca 2027 roku limit spada do 100 dni, a od 15 marca 2029 roku do 47 dni.

Czy plik security.txt jest obowiązkowy?

RFC 9116 to RFC informacyjne, więc w świetle tego standardu publikacja pliku jest dobrowolna. Opublikowanie go niewiele kosztuje, a badacze zyskują jasny sposób kontaktu z Tobą.

Czy czysty wynik pasywnego skanu oznacza, że mój sklep jest bezpieczny?

Nie. Pokazuje tylko, że publiczna konfiguracja wygląda poprawnie. Podatności po stronie serwera, bezpieczeństwo kont i błędy w logice biznesowej wymagają innych testów.

Źródła