Bezpečnost webu: kontroly, které zvládnete bez hackování

Pasivní bezpečnostní kontroly e-shopu: platnost TLS certifikátu, HSTS, CSP, nosniff, atributy cookies, smíšený obsah, staré jQuery, security.txt a DMARC.

Redakce FixReports10 min čtení

Velkou část zabezpečení e-shopu můžete zkontrolovat zvenčí tak, že si přečtete, co web už teď posílá každému návštěvníkovi: jeho TLS certifikát, přesměrování, hlavičky odpovědí HTTP, cookies, načítané skripty a veřejné záznamy DNS. Tyto pasivní kontroly neposílají žádný útočný provoz a nevyžadují přihlášení, takže obchod nezatíží víc než běžná návštěva. Odhalí mezery v konfiguraci, například certifikát, kterému končí platnost, chybějící HSTS, nezabezpečené cookies, smíšený obsah nebo verzi jQuery se známými chybami. Nejde o penetrační test a nemohou prokázat, že je obchod bezpečný.

Hlavní body

Co se počítá jako pasivní bezpečnostní kontrola?

Pasivní kontrola pouze čte, co web nebo jeho DNS vrátí na běžný požadavek.

To znamená načítat veřejné stránky, číst certifikát a hlavičky odpovědí, vypsat cookies a skripty, které stránka nastavuje, a dotazovat se na veřejné záznamy DNS. Pasivní kontrola nehádá hesla, neposílá injekční payloady, nezkouší adresy administrace a neskenuje porty. Vše níže zvládnete s prohlížečem, curl, openssl a dig.

Jak zkontrolovat TLS certifikát a jeho platnost?

Přečtěte si data platnosti a názvy v certifikátu přímo a ujistěte se, že obnova probíhá automaticky.

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

Zkontrolujte, že notAfter je dostatečně daleko v budoucnosti, že certifikát pokrývá example.com i www.example.com, pokud používáte obě (názvy uvidíte v zobrazení certifikátu v prohlížeči), a že prohlížeč nezobrazuje žádná varování. Doba platnosti certifikátů se zkracuje podle Baseline Requirements fóra CA/Browser Forum (oddíl 6.3.2, verze 2.3.1 k říjnu 2026) na základě hlasování SC-081v3 (otevře se v nové kartě), přijatého 11. dubna 2025:

Certifikát vydánMaximální platnost
Před 15. březnem 2026398 dní
15. března 2026 až 14. března 2027200 dní
15. března 2027 až 14. března 2029100 dní
Od 15. března 202947 dní

Při krátké platnosti je ruční obnova riskantní, proto si ověřte, že váš hosting nebo nástroj pro certifikáty obnovuje automaticky. Ověřte také, že nešifrované HTTP přesměrovává na HTTPS:

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

Měli byste vidět odpověď 301 (nebo 308) s hlavičkou location, která začíná na https://.

Které bezpečnostní hlavičky by měl e-shop posílat?

Malá sada hlaviček odpovědi téměř bez nákladů blokuje běžné útoky na straně prohlížeče.

HlavičkaCo děláTypická hodnotaZdroj
Strict-Transport-SecurityŘíká prohlížečům, aby používaly jen HTTPS, a brání uživatelům proklikat se přes chyby certifikátumax-age=31536000; includeSubDomainsMDN (otevře se v nové kartě)
Content-Security-Policy: frame-ancestorsUrčuje, které weby smějí vaše stránky vkládat, což chrání před clickjackingemframe-ancestors 'self'MDN (otevře se v nové kartě)
X-Frame-OptionsStarší řízení vkládání do rámců; podle OWASP ho v podporovaných prohlížečích nahrazuje frame-ancestorsDENY nebo SAMEORIGINOWASP (otevře se v nové kartě)
X-Content-Type-OptionsZastaví MIME sniffing a blokuje skripty a styly poskytované se špatným typemnosniffMDN (otevře se v nové kartě)
Referrer-PolicyOmezuje, jak velká část vašich URL se posílá jiným webůmstrict-origin-when-cross-originOWASP
X-XSS-ProtectionHlavička filtru XSS v prohlížeči; podle OWASP může vytvořit zranitelnosti XSS i na jinak bezpečných webechNenastavovat, nebo 0OWASP

Zkontrolujte, co váš obchod posílá:

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

Dvě upozornění. includeSubDomains zablokuje každou subdoménu, která funguje jen přes HTTP, proto subdomény nejprve zkontrolujte. Preload HSTS vyžaduje max-age alespoň 31536000 a includeSubDomains, takže preload přidejte, až když je na HTTPS připravená každá subdoména. Úplná CSP, která omezuje skripty, se vyplatí, ale OWASP upozorňuje, že její nastavení a údržba jsou složité, a obchody s mnoha aplikacemi ji musí pečlivě otestovat.

Mají vaše cookies atributy Secure, HttpOnly a SameSite?

Cookies relace a košíku by měly mít všechny tři atributy a uvidíte je v hlavičkách odpovědi Set-Cookie.

AtributÚčinek (podle MDN (otevře se v nové kartě))Kde je důležitý
SecurePosílá se jen přes HTTPS; weby na nešifrovaném HTTP ho nastavit nemohouKaždá cookie v obchodě na HTTPS
HttpOnlyJavaScript ji nemůže přečíst přes document.cookie, což pomáhá proti XSSPřihlašovací relace a košíky
SameSite=Lax nebo StrictOmezuje, kdy se cookie posílá u požadavků mezi webyRelace; Strict se hodí pro autentizační cookies a cookies košíku
SameSite=NonePosílá se u požadavků mezi weby; musí být kombinována se SecureJen vložené funkce třetích stran, které to potřebují

Pokud atribut SameSite není nastavený, prohlížeče s cookie zacházejí jako s Lax. Cookies, které potřebují číst vaše vlastní skripty, nemohou být HttpOnly, proto se zaměřte na ty, které identifikují přihlášeného zákazníka nebo administrátora.

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

Stejné informace ukazují vývojářské nástroje prohlížeče, včetně cookies, které skripty nastaví až po načtení stránky.

Jak najít smíšený obsah?

Smíšený obsah (mixed content) je jakýkoli zdroj načtený přes HTTP na stránce poskytované přes HTTPS a konzole prohlížeče ho vypisuje.

MDN (otevře se v nové kartě) ho dělí do dvou skupin. Obrázky, zvuk a video jsou „povýšitelné“ (upgradable): prohlížeče je automaticky vyžádají přes HTTPS. Skripty, styly, prvky iframe, písma a požadavky fetch() jsou „blokovatelné“ (blockable): prohlížeče je zablokují, čímž se rozbije vše, co na nich záviselo. Blokovány jsou i povýšené požadavky na holou IP adresu.

Chcete-li ho najít, otevřete konzoli na svých klíčových šablonách (úvodní stránka, kolekce, produkt, košík) a v kódu šablony, obsahu stránek a nastavení aplikací vyhledejte http://. Centrum nápovědy Shopify uvádí, že každá stránka obchodu s prvkem, který není doručen přes HTTPS, je považována za nezabezpečenou (otevře se v nové kartě), a doporučuje hostovat prvky na Shopify nebo je poskytovat přes HTTPS. Na WooCommerce zkontrolujte starý obsah příspěvků a nastavení šablony, pokud web někdy běžel na http://.

Jak odhalit zastaralé JavaScriptové knihovny se známými CVE?

Vypište knihovny, které každá stránka načítá, zjistěte jejich verze a porovnejte je s National Vulnerability Database.

Začněte s jQuery. V konzoli prohlížeče vrátí $.fn.jquery načtenou verzi (jQuery API (otevře se v nové kartě)). Verze, které je třeba označit:

CVEZasažené verzeProblémSkóre NVD (v3.1)
CVE-2020-11022 (otevře se v nové kartě)Od 1.12.0 do verze nižší než 3.5.0Předání nedůvěryhodného HTML metodám jako .html() nebo .append() může spustit kód6,1 střední (Medium)
CVE-2020-11023 (otevře se v nové kartě)Od 1.0.3 do verze nižší než 3.5.0Totéž pro HTML obsahující prvky <option>; v katalogu KEV agentury CISA od 23. ledna 20256,1 střední (Medium)
CVE-2019-11358 (otevře se v nové kartě)Nižší než 3.4.0Prototype pollution přes jQuery.extend(true, ...)6,1 střední (Medium)

Obě chyby z roku 2020 jsou opravené v jQuery 3.5.0. Zranitelná verze znamená, že chybný kód je přítomen; zda jej lze zneužít, závisí na tom, jak mu web předává data. WordPress obsahuje jQuery 3.5.1 od verze 5.6 (otevře se v nové kartě), takže staré jQuery v obchodě na WooCommerce ukazuje na zastaralý WordPress nebo na šablonu či plugin, který načítá vlastní kopii. Na Shopify zkontrolujte soubory šablony a aplikace, které vkládají skripty.

Co je security.txt a potřebuje ho váš e-shop?

Je to prostý textový soubor, který bezpečnostním výzkumníkům říká, jak vám nahlásit zranitelnost.

RFC 9116 (otevře se v nové kartě) (duben 2022, informativní RFC, takže jeho dodržování je dobrovolné) uvádí, že soubor musí být poskytován přes HTTPS na /.well-known/security.txt jako text/plain. Pole Contact a Expires jsou povinná a RFC doporučuje datum Expires méně než rok dopředu.

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

Na WooCommerce můžete soubor umístit na svůj server. Na hostované platformě ověřte, zda můžete na této cestě zveřejnit soubor; pokud ne, pomůže i jasně označený bezpečnostní kontakt na vaší stránce s kontakty.

Jak DMARC chrání váš e-shop před podvržením e-mailů?

DMARC Vám umožňuje požádat poskytovatele e-mailových schránek, aby poštu, která používá vaši doménu v adrese From a neprojde zarovnaným SPF nebo DKIM, přesunuli do karantény nebo odmítli.

Záznam s p=none pouze sbírá reporty; podvržené e-maily nezastaví. Zákazníci očekávají potvrzení objednávek a obnovení hesla z vaší domény, takže phishingovou zprávu, která ukazuje přesně vaši doménu, se vyplatí blokovat. Svou politiku zkontrolujete pomocí dig +short TXT _dmarc.example.com a specifikaci najdete v RFC 9989 (otevře se v nové kartě). DMARC nepokrývá podobně vypadající domény, jen doménu, která záznam zveřejňuje.

Co spravuje Shopify a co máte na WooCommerce pod kontrolou Vy?

Shopify provozuje servery, na kterých běží jeho obchody, zatímco u WooCommerce na vlastním hostingu zůstává nastavení serveru na vás a vašem poskytovateli hostingu.

KontrolaShopifyWooCommerce (vlastní hosting)
TLS certifikátZdarma pro všechny domény přidané do Shopify (otevře se v nové kartě); u domén třetích stran to může trvat až 48 hodinVáš hosting nebo vlastní nastavení
Přesměrování z HTTP na HTTPSPlatformaWebový server, CDN nebo nastavení hostingu
Bezpečnostní hlavičkyPosílají je servery ShopifyWebový server, CDN nebo plugin
Atributy cookiesVlastní cookies Shopify nastavuje platforma; cookies aplikací a šablony jsou vašeJádro WordPressu, pluginy a server
Smíšený obsah a JS knihovnyVaše šablona, obsah a aplikaceVaše šablona, obsah a pluginy
security.txt a DMARCVaše doména a DNSVaše doména a DNS

Když jsme v říjnu 2026 zkontrolovali několik obchodů hostovaných na Shopify, jejich odpovědi obsahovaly HSTS s max-age přibližně 91 dní, X-Content-Type-Options: nosniff a CSP s upgrade-insecure-requests, zatímco frame-ancestors se mezi obchody lišilo. Shopify uvádí, že má certifikaci shody s PCI DSS úrovně 1 (otevře se v nové kartě). Vaše šablona a nainstalované aplikace zůstávají vaší odpovědností.

Pro WooCommerce příručka k zabezpečení WordPressu (otevře se v nové kartě) radí udržovat WordPress a pluginy aktualizované, mazat pluginy, které nepoužíváte, a zeptat se poskytovatele hostingu, jaká bezpečnostní opatření přijímá.

Proč to není penetrační test?

Penetrační test aktivně zkouší útoky; pasivní kontroly pouze pozorují.

NIST SP 800-115 definuje penetrační testování jako bezpečnostní testování, při kterém hodnotitelé napodobují skutečné útoky, aby našli způsoby, jak obejít bezpečnostní funkce systému (glosář NIST (otevře se v nové kartě)). Pasivní kontroly nevidí chyby na straně serveru v pluginech, slabá nebo opakovaně používaná hesla administrátorů, chybějící dvoufázové ověření, nefunkční řízení přístupu ani zranitelný kód, který se nikdy neobjeví ve zdrojovém kódu stránky. Používejte je jako základní úroveň, kterou můžete kdykoli zopakovat. Pro hlubší jistotu si objednejte penetrační test s písemně vymezeným rozsahem, na systémech, které vlastníte nebo k jejichž testování máte oprávnění.

Bezplatný sken provede první kontrolu vašeho obchodu. Report zabezpečení webu pokrývá pasivní kontroly z tohoto článku, od TLS a přesměrování přes hlavičky, cookies, smíšený obsah a zastaralé knihovny až po security.txt a DMARC, s opravou ke každému zjištění. Jako každá pasivní kontrola nemůže zaručit, že je obchod bezpečný.

Často kladené otázky

Ohrožují pasivní bezpečnostní kontroly můj e-shop?

Ne víc než běžná návštěva. Vyžadují stejné veřejné stránky a záznamy DNS jako kterýkoli prohlížeč nebo poštovní server a nepokoušejí se přihlásit ani posílat útočné payloady.

Mohu na Shopify přidat bezpečnostní hlavičky?

Hlavičky odpovědí obchodu pocházejí ze serverů Shopify, takže pokud vám některá potřebná chybí, kontaktujte podporu Shopify. Značka CSP <meta> ve vaší šabloně může přidat některé direktivy, ale MDN upozorňuje, že frame-ancestors není v <meta> podporována.

Znamená stará verze jQuery, že byl můj e-shop hacknut?

Ne. Znamená to, že je načtený kód se známými zranitelnostmi, což zvyšuje riziko, pokud web předává nedůvěryhodné HTML dotčeným metodám. Aktualizujte ho, nebo odstraňte šablonu či plugin, který ho načítá.

Jak dlouho může být TLS certifikát nyní platný?

Veřejně důvěryhodné certifikáty vydané od 15. března 2026 mohou být platné nejvýše 200 dní. Od 15. března 2027 se limit snižuje na 100 dní a od 15. března 2029 na 47 dní.

Je soubor security.txt povinný?

RFC 9116 je informativní RFC, takže zveřejnění souboru je podle standardu dobrovolné. Zveřejnit ho nic nestojí a výzkumníkům dává jasný způsob, jak vás kontaktovat.

Znamená čistý výsledek pasivního skenu, že je můj e-shop bezpečný?

Ne. Ukazuje, že veřejná konfigurace vypadá správně. Zranitelnosti na straně serveru, zabezpečení účtů a chyby v obchodní logice vyžadují jiné testování.

Zdroje