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
- Veřejně důvěryhodné TLS certifikáty vydané od 15. března 2026 mohou být platné nejvýše 200 dní; v březnu 2027 se limit snižuje na 100 dní a v březnu 2029 na 47 dní (CA/Browser Forum (otevře se v nové kartě)).
- Prohlížeče hlavičku HSTS ignorují, pokud je odeslaná přes nešifrované HTTP (MDN (otevře se v nové kartě)).
- Direktiva CSP
frame-ancestorsv elementu<meta>nefunguje; musí být v hlavičce odpovědi (MDN (otevře se v nové kartě)). - Verze jQuery starší než 3.5.0 jsou zasaženy dvěma zranitelnostmi XSS a CISA jednu z nich, CVE-2020-11023, zařadila 23. ledna 2025 do svého katalogu Known Exploited Vulnerabilities (NVD (otevře se v nové kartě)).
- Soubor
security.txtmusí obsahovat poleContactaExpiresa být umístěn na/.well-known/security.txt(RFC 9116 (otevře se v nové kartě)).
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án | Maximální platnost |
|---|---|
| Před 15. březnem 2026 | 398 dní |
| 15. března 2026 až 14. března 2027 | 200 dní |
| 15. března 2027 až 14. března 2029 | 100 dní |
| Od 15. března 2029 | 47 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čka | Co dělá | Typická hodnota | Zdroj |
|---|---|---|---|
Strict-Transport-Security | Říká prohlížečům, aby používaly jen HTTPS, a brání uživatelům proklikat se přes chyby certifikátu | max-age=31536000; includeSubDomains | MDN (otevře se v nové kartě) |
Content-Security-Policy: frame-ancestors | Určuje, které weby smějí vaše stránky vkládat, což chrání před clickjackingem | frame-ancestors 'self' | MDN (otevře se v nové kartě) |
X-Frame-Options | Starší řízení vkládání do rámců; podle OWASP ho v podporovaných prohlížečích nahrazuje frame-ancestors | DENY nebo SAMEORIGIN | OWASP (otevře se v nové kartě) |
X-Content-Type-Options | Zastaví MIME sniffing a blokuje skripty a styly poskytované se špatným typem | nosniff | MDN (otevře se v nové kartě) |
Referrer-Policy | Omezuje, jak velká část vašich URL se posílá jiným webům | strict-origin-when-cross-origin | OWASP |
X-XSS-Protection | Hlavička filtru XSS v prohlížeči; podle OWASP může vytvořit zranitelnosti XSS i na jinak bezpečných webech | Nenastavovat, nebo 0 | OWASP |
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ý |
|---|---|---|
Secure | Posílá se jen přes HTTPS; weby na nešifrovaném HTTP ho nastavit nemohou | Každá cookie v obchodě na HTTPS |
HttpOnly | JavaScript ji nemůže přečíst přes document.cookie, což pomáhá proti XSS | Přihlašovací relace a košíky |
SameSite=Lax nebo Strict | Omezuje, kdy se cookie posílá u požadavků mezi weby | Relace; Strict se hodí pro autentizační cookies a cookies košíku |
SameSite=None | Posílá se u požadavků mezi weby; musí být kombinována se Secure | Jen 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:
| CVE | Zasažené verze | Problém | Skóre NVD (v3.1) |
|---|---|---|---|
| CVE-2020-11022 (otevře se v nové kartě) | Od 1.12.0 do verze nižší než 3.5.0 | Předání nedůvěryhodného HTML metodám jako .html() nebo .append() může spustit kód | 6,1 střední (Medium) |
| CVE-2020-11023 (otevře se v nové kartě) | Od 1.0.3 do verze nižší než 3.5.0 | Totéž pro HTML obsahující prvky <option>; v katalogu KEV agentury CISA od 23. ledna 2025 | 6,1 střední (Medium) |
| CVE-2019-11358 (otevře se v nové kartě) | Nižší než 3.4.0 | Prototype 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.
| Kontrola | Shopify | WooCommerce (vlastní hosting) |
|---|---|---|
| TLS certifikát | Zdarma 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 hodin | Váš hosting nebo vlastní nastavení |
| Přesměrování z HTTP na HTTPS | Platforma | Webový server, CDN nebo nastavení hostingu |
| Bezpečnostní hlavičky | Posílají je servery Shopify | Webový server, CDN nebo plugin |
| Atributy cookies | Vlastní cookies Shopify nastavuje platforma; cookies aplikací a šablony jsou vaše | Jádro WordPressu, pluginy a server |
| Smíšený obsah a JS knihovny | Vaše šablona, obsah a aplikace | Vaše šablona, obsah a pluginy |
| security.txt a DMARC | Vaše doména a DNS | Vaš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
- Baseline Requirements for the Issuance and Management of Publicly-Trusted TLS Server Certificates, version 2.3.1 (otevře se v nové kartě), CA/Browser Forum, 4. října 2026
- Ballot SC-081v3: Introduce Schedule of Reducing Validity and Data Reuse Periods (otevře se v nové kartě), CA/Browser Forum, 11. dubna 2025
- Strict-Transport-Security (otevře se v nové kartě), MDN Web Docs, naposledy upraveno 11. září 2026
- CSP: frame-ancestors (otevře se v nové kartě), MDN Web Docs, naposledy upraveno 27. srpna 2026
- X-Content-Type-Options (otevře se v nové kartě), MDN Web Docs, naposledy upraveno 17. března 2026
- Using HTTP cookies (otevře se v nové kartě), MDN Web Docs, naposledy upraveno 17. září 2026
- Mixed content (otevře se v nové kartě), MDN Web Docs, naposledy upraveno 15. srpna 2026
- HTTP Security Response Headers Cheat Sheet (otevře se v nové kartě), OWASP Cheat Sheet Series, navštíveno 22. října 2026
- CVE-2020-11022 (otevře se v nové kartě), NIST National Vulnerability Database, zveřejněno 29. dubna 2020
- CVE-2020-11023 (otevře se v nové kartě), NIST National Vulnerability Database, zveřejněno 29. dubna 2020
- CVE-2019-11358 (otevře se v nové kartě), NIST National Vulnerability Database, zveřejněno 20. dubna 2019
- .jquery (otevře se v nové kartě), dokumentace jQuery API, navštíveno 22. října 2026
- Updating core jQuery to version 3, part 2 (otevře se v nové kartě), Make WordPress Core, 5. listopadu 2020
- RFC 9116: A File Format to Aid in Security Vulnerability Disclosure (otevře se v nové kartě), IETF, duben 2022
- RFC 9989: Domain-Based Message Authentication, Reporting, and Conformance (DMARC) (otevře se v nové kartě), IETF, květen 2026
- Enabling secure connections to your Shopify store (otevře se v nové kartě), Shopify Help Center, navštíveno 22. října 2026
- Security (otevře se v nové kartě), Shopify, navštíveno 22. října 2026
- Hardening WordPress (otevře se v nové kartě), WordPress Developer Resources, navštíveno 22. října 2026
- Penetration testing (glossary) (otevře se v nové kartě), NIST Computer Security Resource Center, s odkazem na NIST SP 800-115 (září 2008), navštíveno 22. října 2026
Všichni průvodci
- Akt o přístupnosti (EAA) a e-shopy: co platí od června 2025Od 28. června 2025 se EAA vztahuje na e-shopy prodávající spotřebitelům v EU. Koho se týká, výjimka pro mikropodniky, EN 301 549, WCAG a povinné informace.
- Core Web Vitals pro e-shopy: vysvětlení LCP, INP a CLSCo měří LCP, INP a CLS, hranice dobrých a špatných hodnot na 75. percentilu, laboratorní a terénní data a běžné opravy e-shopů na Shopify a WooCommerce.
- Přišla vám předžalobní výzva kvůli ADA? Co ověřit nejdřívCo tvrdí předžalobní výzvy kvůli webu podle ADA, role WCAG, co shromáždit, proč overlay neopraví kód a kdy volat advokáta. Nejde o právní radu.