Možná jste si udělali test vlastních stránek na rychlost pomocí https://www.webpagetest.org/ a ve výsledcích se, trochu překvapivě, objevilo Security score a obrovské červené F. Důvodem, proč se tak stalo, mohou být chybějící CSP (Content Security Policy) hlavičky.
CSP hlavičky nejsou žádnou novinkou. Jsou tu s námi někdy od roku 2016. Proč jsou tedy teď pro nás tak zajímavé? Asi proto, že jsou plně podporovány ve všech moderních prohlížečích.
Co to vlastně jsou ty hlavičky a proč ztrácet čas jejich nastavováním? Jak praví klasik prostřednictvím Murphyho počítačových zákonů: “Každý netriviální program obsahuje alespoň jednu chybu”. Nemusíte s tím souhlasit, ale chyb a tím pádem děr, kterými se dají napadnout právě vaše stránky, je prostě plno. Obzvlášť pokud použitý kód není váš, ale i kdyby byl tak nikdy nemáte 100% jistotu, že něco, co používáte, nejde zneužít.
Takže pojďme spolu snížit pravděpodobnost, že do vaší prezentace někdo zanese nějaký nechtěný obsah.
V následující tabulce jsou (v době psaní článku) aktuální hlavičky, které lze nastavit.
CSP hlavičky:
Direktiva | Popis |
base-uri | Definuje výchozí URI pro relativní URI. |
default-src | Definuje zásady načítání pro všechny typy zdrojů v případě, že není definována direktiva pro určitý typ zdroje (fallback). |
script-src | Definuje, které skripty může chráněný prostředek spouštět. |
object-src | Definuje, odkud chráněný prostředek může načítat pluginy. |
style-src | Definuje, které styly (CSS) uživatel použije na chráněný prostředek. |
img-src | Definuje, odkud může chráněný prostředek načítat obrázky. |
media-src | Definuje, odkud může chráněný prostředek načítat video a zvuk. |
frame-src | Zastaralé a nahrazené child-src. Definuje, odkud může chráněný prostředek vkládat rámce (frames). |
child-src | Definuje, odkud může chráněný prostředek vkládat rámce. |
frame-ancestors | Definuje, odkud lze chráněný prostředek vložit do rámců. |
font-src | Definuje, odkud může chráněný prostředek načítat písma. |
connect-src | Definuje, které identifikátory URI může chráněný prostředek načíst pomocí interface skriptu. |
manifest-src | Definuje, odkud může chráněný prostředek načíst manifest. |
form-action | Definuje, které URI lze použít jako akci prvků formuláře HTML. |
sandbox | Určuje zásadu sandboxu HTML, kterou klient použije na chráněný prostředek. |
plugin-types | Zastaralé. Definuje sadu pluginů, které lze vyvolat chráněným prostředkem, omezením typů prostředků, které lze vložit. |
block-all-mixed-content | Zastaralé. Zabraňuje tomu, aby klient načítal smíšený obsah. |
upgrade-insecure-requests | Vynutí si, aby klient stahoval nezabezpečené prostředky pomocí HTTPS. |
referrer | Zastaralé. Definuje informace, které musí klient odeslat v záhlaví referrer. |
report-uri | Zastaralé. Určuje identifikátor URI, na který klient odesílá zprávy o porušení zásad. |
report-to | Určuje skupinu (definovanou v záhlaví Report-To), kam klient odesílá zprávy o porušení zásad. |
Pojďme se podívat, na webové nástroje, kterými lze snadno otestovat SCP hlavičky.
Jedním z nejpoužívanějších je securityheaders.com. Je to pěkný nástroj, ale testuje opravdu pouze CSP hlavičky.
K mým oblíbeným patří observatory.mozilla.org, který je poněkud upovídanější a občas i přetížený, ale poskytuje širší pohled na celý web.
Další pěkný nástroj je od snyk.io, ale konec konců, ten je součástí již zmiňovaného webpagetestu.
Tak si zkuste otestovat svůj web, nebo třeba nějaké zpravodajské weby. V době psaní článku na tom byl nejhůře web České noviny.
Předpokládám, že v tuhle chvíli už máte otevřené desítky panelů s různými weby a nestačíte se divit. Tak asi nastal čas na trošku praxe.
Syntaxe CSP hlaviček je následující:
Content-Security-Policy "direktiva zdroj zdroj zdroj; direktiva zdroj zdroj; direktiva zdroj zdroj"
(direktivy jsou odděleny středníkem, jednotlivé zdroje mezerou a celé je to v uvozovkách – tedy až na IIS – viz níže).
Pokud máme na serveru Apache, tak stačí např. do souboru .htaccess přidat řádek:
Header set Content-Security-Policy "script-src 'self' https://cernalistina.eu https://www.cernalistina.eu; object-src 'self'"
Pro Nginx se stejný efekt dosáhne přidáním add_header do bloku server {}, např.
add_header Content-Security-Policy "script-src 'self' https://cernalistina.eu https://www.cernalistina.eu; object-src 'self'"
Pro IIS můžete přidat do souboru web.config
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Content-Security-Policy" value="script-src 'self' https://cernalistina.eu https://www.cernalistina.eu; object-src 'self" />
</customHeaders>
</httpProtocol>
</system.webServer>
V případě tohoto webu, pak není problém velmi snadno dosáhnout A+ (nenačítají se tam žádné cizí zdroje, jako např. fonty, reklamy, skripty pro analýzu návštěvnosti).
Doporučené zdroje k prostudování:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
https://owasp.org/www-project-secure-headers/
Pokud přidáváme nějaké cizí zdroje, doporučuji vždy zkontrolovat přes konzoli prohlížeče funkčnost. V konzoli se objeví např. něco takového:
Content Security Policy: Nastavení stránky zablokovalo načítání zdroje na https://www.googletagmanager.com/a?id=GTM-KSZKRZX&cv=3&v=3&t=t&pid=723&rv=ar0&e=gtm.dom&eid=7&u=C&ut=C&tc=2&tr=5gclidw.5lcl.5lcl.5cl.1html.5html&ti=1gclidw.1lcl.1lcl.1cl.1html.1html&z=0 („img-src“).
Takže je jasné, že musíme přidat pro img-src kromě ‘self’ ještě i https://www.googletagmanager.com.
Další možností je použít hlavičku, která zavolá skript s reportem, co a kde neprošlo. Příklad je najdete zde (ano, je to deprecated, ale za to je to aktuálně podporované ve všech prohlížečích)
Přeji hodně A+
Mohlo by vás také zajímat
-
Jak zabezpečit váš chytrý telefon před kybernetickými hrozbami
30. listopadu 2023 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024 -
Vlastní web pomocí AI už může vytvořit opravdu každý
8. srpna 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024