3.1 Architektura, protokoly a SOP

Základem webové komunikace je model klient-server, kde webový prohlížeč (klient) komunikuje s webovým serverem. Během této komunikace se uplatňuje mnoho různých protokolů a technologií.

Základní protokoly a technologie

Pro zajištění webového provozu je klíčových několik protokolů:

Moderní webová architektura navíc využívá širokou škálu hardwarových a softwarových prvků:

URL (Uniform Resource Locator - RFC 3986)

URL definuje adresu konkrétního zdroje na webu. Formát typického URL je následující:

http://name:pwd@example.com:80/index.php?par1=val1&par2=val%202#home
  • Scheme: http
  • Authority: Skládá se z Userinfo (name:pwd), Host (example.com) a Port (80).
  • Path (Cesta): /index.php
  • Query (Dotaz): ?par1=val1... obsahuje páry klíč-hodnota oddělené znakem ampersand (&).
  • Fragment: #home (zpracovává se lokálně na straně klienta).

Rezervované znaky v URL se musí kódovat (např. mezera jako %20 nebo +).

HTTP metody: GET vs. POST

Základní HTTP metody
  • GET: Používá se pro požadavek na získání dat (neměla by měnit stav na serveru). Parametry jsou přímo součástí URL. Nevýhodou je, že URL je viditelné v server logu, historii prohlížeče, reverzní proxy apod. Nikdy by se neměla používat pro citlivá data!
  • POST: Používá se pro odesílání dat, vytvoření/úpravu záznamu. Parametry jsou uloženy v těle HTTP požadavku (Request body). Jsou zde vyžadovány dodatečné hlavičky Content-Type a Content-Length.

Důležité: I když využíváte metodu POST, technicky stále můžete poslat data i jako parametry v URI.

Hostname Encryption a SNI

Při navazování zabezpečeného spojení (TLS) zasílá klient zprávu ClientHello. Aby server věděl, jaký certifikát má vrátit (v případě, že hostuje více domén na jedné IP adrese), přidává klient do ClientHello parametr SNI (Server Name Indication).

V protokolech TLS 1.0 - 1.2, a ve výchozím stavu i v TLS 1.3, je SNI posíláno jako prostý text (plaintext). Kdokoliv na síti tedy vidí, k jaké doméně se připojujete, i když je následná komunikace šifrována.

ECH (Encrypted Client Hello)

Rozšíření pro TLS 1.3, které šifruje SNI. Klient zjistí veřejný klíč serveru skrze DNS (pomocí HTTPS/SVCB záznamů) a vytvoří "vnější" decoy ClientHello směřující například na obecný CDN název, do kterého vloží skutečné "vnitřní" šifrované ClientHello obsahující reálný název hostitele. Vyžaduje plnou podporu na serveru, v prohlížeči i využívání DNS-over-HTTPS k prevenci úniku názvu domény na DNS vrstvě.

SOP (Same-Origin Policy)

Same-Origin Policy

Jedná se o klíčový bezpečnostní mechanismus webových prohlížečů, který brání škodlivému skriptu na jedné stránce v získání přístupu k citlivým datům na jiné stránce. Prohlížeč izoluje jednotlivé původy (origins).

Původ (Origin) je definován trojicí: Protokol, Host (doména), Port.

Vyhodnocování shodnosti Origin

Pokud je náš výchozí origin http://store.company.com/dir/page.html:

  • http://store.company.com/dir2/other.html - STEJNÝ (stejný protokol, host i výchozí HTTP port 80).
  • https://store.company.com/page.html - JINÝ (jiný protokol HTTPS).
  • http://store.company.com:81/dir/page.html - JINÝ (jiný port).
  • http://news.company.com/dir/page.html - JINÝ (jiná doména).

SOP neblokuje odeslání požadavku, blokuje však přečtení odpovědi (Browser is the one who decides, not the server). Pokud chce server povolit jiným originům číst svá data, musí využít mechanismu CORS (Cross-Origin Resource Sharing) a nastavit HTTP hlavičku Access-Control-Allow-Origin.