1. Úvod do webových aplikací Současný web je postaven na třech standardech. Prvním je systém Internetových adres nazvaný URL , druhým je síťový protokol HTTP určený pro přenos dat mezi klientem a serverem, a posledním je jazyk HTML pro popis obsahu webových stránek.
1.1 URL adresa Jednoduchou variantu URL adresy zná každý uživatel webu, protože se s ní běžně setkává. URL adresou je například řetězec www.seznam.cz, který po zadání do webového prohlížeče způsobí zobrazení úvodní stránky z webu Seznamu. Obecný tvar URL adresy je ale trochu složitější. Adresa se může skládat z několika částí, z nichž některé jsou ale nepovinné. První částí je název schématu, který nejčastěji odpovídá použitému přenosovému protokolu, za schématem následuje dvojtečka, a dvě lomítka pak identifikují tzv. hierarchickou URL adresu. V části zvané autorita mohou být zadané přihlašovací údaje, které jsou zavináčem oddělené od adresy serveru a čísla portu. Pokud číslo portu není uvedeno a jako schéma byl použit protokol http, automaticky se předpokládá, že bude použit port číslo 80.
Typická schémata jsou http:, https: a ftp:. Kromě nich různé prohlížeče podporují další schémata se speciálním významem. Schéma mailto: se například používá k vyvolání tvorby nové zprávy v poštovním klientovi. Schéma javascript: zase umožňuje předat prohlížeči k vykonání část programového kódu v JavaScriptu. Protože některé znaky mají v URL adrese pevně daný význam, například jde o zmíněnou dvojtečku a lomítko, nesmí se v ní vyskytnout v jiném významu, protože by nebylo možné URL adresu správně vyhodnotit. V části URL adresy věnované dotazu se ale může vyskytovat prakticky libovolný znak a v takovém případě je třeba ho zvláštním způsobem zakódovat.
URL kódování používá takový způsob zápisu znaku, kdy za znakem procento následuje hexadecimální hodnota kódovaného znaku v ASCII. Znak lomítko je tak kódován jako %2F, mezera jako %20, a pokud by se v dotazu vyskytovalo i samotné procento, muselo by být také zakódované, v tomto případě jako %25.
1.2 HTTP protokol
Protokol HTTP je určen k efektivnímu přenosu informace mezi webovým klientem a webovým serverem. Data, která putují od klienta, se nazývají HTTP požadavek, data, která obdrží klient od serveru se nazývají HTTP odpověď. HTTP protokol je takzvaně bezestavový, což znamená, že poté, co server klientovi zašle požadovaná data, na veškerou komunikaci mezi nimi zapomene. Pokud bude mít tedy uživatel další dotaz na stejný server (například proto, že v dokumentu kliknul na odkaz), bude se jednat o zcela nezávislý dotaz a odpověď. Webový server nebude vědět, zda tento druhý dotaz nějak souvisí s předchozím. Existuje celá řada HTTP požadavků zvaných také metody, ale nejčastěji se vyskytují požadavky typu GET a POST. Kliknutí na odkaz na webové stránce typicky znamená, že se na adresu serveru odešle požadavek typu GET. Pro odeslání dat zadaných do webového formuláře se obvykle použije metoda POST. Příklad HTTP požadavku
Nyní se podívejme na příklad požadavku typu GET. Za názvem použité metody je uvedena relativní URL adresa k požadovanému dokumentu a verze protokolu HTTP. Za řádkem požadavku následují další samostatné řádky obsahující záhlaví požadavku. Záhlaví Host identifikuje webový server, záhlaví User-Agent obsahuje informaci o webovém prohlížeči, který požadavek zasílá. 2
V dalších polích je například uvedena informace o preferovaném formátu dat a o stránce, ze které byl požadavek odeslán. Tato informace se nachází v poli Referer. Příklad HTTP odpovědi
Jako odpověď na předchozí požadavek server klientovi pošle informaci o verzi protokolu, stavový kód požadavku, a několik dalších polí záhlaví, v závislosti na použitém webovém serveru. V poli Content-Length je uvedeno množství odeslaných dat v bajtech, v poli Content-Type pak formát těchto dat. Webový server je IIS 6.0, z čehož se dá odhadnou použitá verze MS Windows. Záhlaví odpovědi jsou ukončena prázdným řádkem, za kterým následují zaslaná data. Těmito daty je typicky HTML kód webové stránky.
1.3 Jazyk HTML
Jazyk HTML - v překladu hypertextový značkovací jazyk - je určen k vytváření webových stránek. Mezi těmito stránkami je možné vytvářet vazby v podobě odkazů. Kliknutí na odkaz v prohlížeči vyvolá HTTP požadavek na zaslání odpovídající stránky, která se následně zobrazí v prohlížeči. Při přecházení mezi stránkami klikáním na odkazy mluvíme o nelineárním textu, tzv. hypertextu. Naproti tomu běžná kniha je příkladem textu lineárního, protože je napsána tak, aby se četla postupně od začátku do konce. Webová stránka zapsaná prostřednictvím tohoto jazyka je obyčejným textovým souborem, obsahujícím navíc speciální příkazy nazývané značky. Značky jsou v textu vymezeny lomenýni závorkami. Většina značek tvoří dvojici, jedná se o počáteční a koncovou značku. Koncová značka se od počáteční liší tím, že má za levou lomenou závorkou uveden znak lomítko. Základním prvkem webové stránky je element, který se skládá z počáteční a koncové značky, a ze všeho, co se mezi nimi nachází. 3
Jednotlivé značky určují strukturu stránky - označují např. název dokumentu, nadpisy různých úrovní, odstavce, různé typy seznamů, umístění obrázků, ale zejména umožňují vytvářet vazby mezi několika různými stránkami. Ve starších verzích jazyka HTML některé značky kromě struktury stránky definovaly i vzhled příslušného elementu, ale s příchodem tzv. kaskádových stylů je tento přístup postupně opouštěn. U webové stránky je třeba rozlišovat dvě její podoby. Jednak je to takzvaný zdrojový kód, vytvořený v jazyce HTML. Druhou podobu představuje její zobrazení v prohlížeči. Příklad jednoduché webové stránky ve zdrojovém tvaru začíná deklarací typu dokumentu. Celá stránka je ohraničena značkou , značky a definují její záhlaví a tělo. Značka
definuje název stránky, značka nadpis první úrovně, značka
jeden odstavec textu, a značka <strong> zvýrazňuje část textu v odstavci. Zdrojový tvar webové stránky
Zobrazení HTML kódu v prohlížeči
Záhlaví obsahuje informace o stránce, které se v prohlížeči obvykle nezobrazují, např. název dokumentu a doplňkové informace pro prohlížeč. Vlastní obsah stránky je tvořen jejím tělem. Značky a jejich atributy
4
Význam některých značek upřesňují atributy a jejich hodnoty. Atributem align mohu například určit zarovnání textu v odstavci do bloku. Nebo zarovnat odstavec do prava a v jeho textu definovat odkaz pomocí značky . Obrázek se do dokumentu vkládá pomocí prázdné značky img. Její nejdůležitější atribut je src, jehož hodnotou je název souboru obsahujícího obrázek. Atributy width a height obsahují velikost obrázku v pixelech. V současnosti obsahují webové dokumenty velmi často kromě vlastního HTML kódu i definice vzhledu jednotlivých částí dokumentu pomocí kaskádových stylů (CSS) a skripty vykonávané na straně klienta zpravidla napsané v jazyce JavaScript. Pro analýzu útoků na webové aplikace nebo na webový prohlížeč je třeba mít alespoň základní přehled o všech těchto prvcích.
1.4 Úkoly
Identifikujte části URL adresy. Objasněte význam URL kódování. Uveďte metody protokolu HTTP. Uveďte strukturu HTTP požadavku a odpovědi. Co je to zdrojový tvar webové stránky a jak vypadá.
5
2. Základy jazyka HTML Nadpisy a odstavce
Relativní URL adresa
Absolutní URL adresa
Obrázek jako odkaz
Nečíslovaný seznam
Číslovaný seznam
6
Seznam definic
Vnořování seznamů
Element br vynutí konec řádky a přechod na novou:
Element br je příkladem tzv. prázdného elementu - nemá obsah a nevyžaduje koncovou značku.
2.1 Entity Webový prohlížeč ignoruje tzv. bílé znaky (whitespaces, mezery, tabelátory, konce odstavců) a je-li jich někde více za sebou, ponechá typicky jen jeden. Proto se k formátování textu nemůže použít vícenásobná mezera. V některých případech lze vícenásobnou mezeru vynutit použitím tzv. pevné mezery, která se do dokumentu vkládá jako entita .
7
Entity mají obecnou syntaxi: &nazev_entity; nebo číslo_znaku; Slova spojená pevnou mezerou také nebudou v prohlížeči rozděleny na dva řádky. Jako entity se do HTML dokumentu mohou vkládat také následující znaky:
Odkaz na pojmenované místo v dokumentu K tomuto účelu se použije značka a s atributem name.
Na takto pojmenované místo se pak lze odkázat následujícím způsobem:
Před jménem tzv. vnitřního odkazu musí být uveden znak #.
Předformátovaný text Pro zobrazení většího množství textu, ve kterém je třeba zachovat i vícenásobné bílé znaky. lze použít element pre. 8
Předformátovaný text se standardně zobrazí pomocí nějakého neproporcionálního písma. Jiný vzhled je možné vynutit pomocí kaskádových stylů.
Obtékání textu okolo obrázků Obrázek na stránce se chová jako znak vložený na pozici, kde se umístila značka img. Pokud chce autor obrázek z toku textu vyjmout a nechat ho textem obtékat, může použít atribut align, který může nabývat hodnoty např. left a right.
Pokud má text pokračovat až pod obrázkem, je to možné vynutit následujícím kouskem kódu:
.
9
Tabulky Pokud chci následujcí tabulku zobrazit v dokumentu:
Použiji k tomu tento kód:
Element table obsahuje celou tabulku, řádky definují elementy tr, buňky tabulky pak elementy td. Atribut border elementu table specifikuje šířku okrajů tabulky v pixelech. Odsazení textu v buňce od jejích okrajů definuje atribut cellpadding, vzdálenost mezi buňkami atribut cellspacing.
Šířku tabulky ovlivňuje především obsah v buňkách a prohlížeč ji určuje právě podle něho. Pokud chci ale šířku ovlivnit přímo, použiji k tomu atribut width. Hodnotu šířky mohu zadat v pixelech nebo v procentech šířky okna.
10
Prohlížeč standardně vycentruje záhlaví tabulky (element th) a obsah buněk zarovnává doleva (element td). Jiný způsob zarovnání lze vynutit pomocí atributu align:
Vertikální zarovnání obsahu buněk provede atribut valign, jehož hodnotou může být "top", "middle" nebo "bottom". Standardní zobrazení tabulky v prohlížeči má problém se zobrazením prázných buněk, proto je vhodné do nich vložit nedělitelnou mezeru.
Pokud má buňka v tabulce přesáhnout více sloupců nebo řádků, použijí se atributy colspan a rowspan. Viz následující příklad:
11
Dříve se tabulky používali nejen pro zobrazení dat ve formátu tabulky, ale také k designu stránky. Takovým tabulkám se vypínalo zobrazení okrajů pomocí vhodné kombinace hodnot atributů border="0" a cellspacing="0". Hezčí vzhled tabulky se dnes dosahuje pomocí kaskádových stylů:
2.1 Úkoly
Vyjádření základních struktur pomocí jazyka HTML: nadpisy a odstavce, odkazy, seznamy, tabulky. Uveďte příklad vnořeného seznamu. Realizujte obtékání obrázku zleva. Vytvořte v jazyce HTML čtvercovou tabulku o rozměrech 3x3. Co je to prázdný element, uveďte příklad. Co je to entita a jak se vkládá do dokumentu. K čemu je předformátový text.
12
3. Kaskádové styly (CSS, Cascading Style Sheets) V současnosti se vzhled objektů na webové stránce definuje zpravidla pomocí kaskádových stylů. Obecný zápis stylu a deklarace stylu vypadá takto:
Styly lze k objektu na stránce přidat třemi způsoby:
přímo u elementu pomocí atributu style, uvnitř dokumentu pomocí elementu style, odkazem na externí soubor se styly.
Atribut style Pomocí atributu style můžeme předefinovat vzhled jednoho elementu.
Element <style Pomocí elementu style typicky definujeme vzhled mnoha elementů na stránce. Kterých se to bude týkat určujeme pomocí selektorů.
Konkrétně to může vypadat třeba takto:
Chceme-li potom selektor třídy nebo identifikátoru použít, uděláme to pomocí atributu class, případně id:
13
Selektory můžeme shlukovat, v takovém případě slouží čárka jako oddělovač.
Externí soubor se styly Pokud chceme několik stránek formátovat stejným způsobem, použije se zpravidla odkaz na stejný soubor se styly . Soubor se styly je čistě textový, má příponu .css a odvolat se na něj můžeme v záhlaví stránky pomocí značky link.
Obsahem souboru jsou standardní deklarace stylů.
14
4. JavaScript Programovací jazyk JavaScript vytvořila koncem minulého století společnost Netscape. Zpočátku tento jazyk nazývala LiveScript, ale když nastal ve světě boom okolo programovacího jazyka Java, usoudili, že z marketingového hlediska bude lepší, když se nový programovací jazyk přejmenuje a bude se nazývat JavaScript (přesto, že s Javou nemá téměř nic společného). Postupem času společnost Netscape přinášela na trh nové verze svého prohlížeče stránek Netscape Navigator a současně s nimi se rodily i nové verze JavaScriptu, které samozřejmě tvořily součást tohoto prohlížeče. Zlom ve vývoji JavaScriptu nastal v období, kdy se Microsoft rozhodl, že vstoupí na pole internetových prohlížečů, na kterém v té době zaujímal dominantní pozici Netscape Navigator. První verze prohlížeče stránek od Microsoftu nezažily velký úspěch. Důvodem jejich počátečního neúspěchu byla nedostatečná podpora HTML a absence podpory JavaScriptu. Microsoft se však nevzdával a intenzivně pracoval na nových verzích, které by netrpěly těmito nedostatky a současně obsahovaly i nové progresivní funkce, které jejich konkurenční prohlížeč neobsahoval. Microsoft z licenčních důvodů vytvořil vlastní "odrůdu JavaScriptu” a nazval ji JScript. Jak vznikaly jednotlivé verze prohlížečů od obou společností, vznikaly na obou frontách i nekompatibilní implementace tohoto jazyka. Aby tento stav nekompatibility nedorostl do nezvládnutelných rozměrů, zasáhla do celého procesu mezinárodní průmyslová asociace pro standardizaci European Computer Manufacturers Association (ECMA) a začala vydávat specifikace jazyka ECMA-262, které skloubily implementace jazyka JavaScript v obou internetových prohlížečích (s výjimkou podpory objektového modelu DOM). Jednou z nejdůležitějších vlastností JavaScriptu, od kterých se odvíjí i další řada vlastností, je fakt, že jde o programovací jazyk, jehož činnost zabezpečuje prohlížeč webových stránek a ne server, na kterém jsou stránky uložené. K provádění javascriptového kódu dochází na počítači návštěvníka stránky až po jejím načtení. Kvůli zachování bezpečnosti je pochopitelné, že autoři programovacího jazyka JavaScript do něj nezabudovali funkce, které by mu umožňovaly zapisovat a načítat údaje ze souborů. Uživatel webu se tedy nemusí obávat toho, že by mu někdo pomocí tohoto jazyka dokázal smazat obsah disku nebo zneužil informace, které se na něm nachází. Vložení JavaScriptu do stránky Pokud jsme se rozhodli vložit do stávající HTML stránky JavaScript, je potřeba, abychom prohlížeči nějakým způsobem ve stránce vyznačili, který úsek z jejího obsahu představuje skript. Pokud bychom tento úsek ve stránce nevyznačili a vložili do stránky jen samotný skript, prohlížeč by ho interpretoval jen jako text a zobrazil ho na obrazovce. Pro označení začátku a konce skriptu v rámci stránky se používá párová HTML značka <script> . Pomocí ní dokáže prohlížeč jednoznačně určit, že to, co se nachází v úseku, který tato značka ohraničuje, je skript a nemá se zobrazit na obrazovce, ale provést.
15
Vypsání textu do HTML dokumentu pomocí JavaScriptu
Skript nemusí nevyhnutelně tvořit součást stránky - stačí, když se na něj stránka odvolává. Pro tyto účely se používá stejná HTML značka jako v předchozím případě, ale tentokrát je doplněná o parametr src udávající cestu k souboru obsahujícímu skript. Vypsání textu do HTML dokumentu pomocí externího souboru s JavaScriptem:
Hlavní výhody umístění skriptu do samostatného souboru:
zvýšení rychlosti načítání stránek - pokud používáme na více stránkách stejné skripty, můžeme jejich umístěním do samostatného souboru snížit velikost HTML stránek. Navíc ke zvýšení rychlosti přispěje i fakt, že soubory s příponou .js prohlížeč ukládá do své vyrovnávací paměti (cache) a při požadavku na jejich stažení je nemusí opětovně načítat z webového serveru;
16
šetření času při aktualizacích stránek - v případě, že se rozhodneme modifikovat stránky využívající JavaScript, není v tomto případě potřeba editovat každou stránku zvlášť, stačí upravit pouze soubor se skriptem.
Obsluha události Následující ukázka obsahuje definici funkce, její přiřazení jako obsluhy události stisku tlačítka, a přepsání obsahu odstavce identifikovaného jménem "demo". Vypsání aktuálního datumu po stisku tlačítka:
Validace formuláře
17
Výpis cookies
18
5. Útoky na webové aplikace 5.1 Architektura webových aplikací
Při tvorbě webových aplikací se využívá vícevrstvá architektura. Počet vrstev je sice v závislosti na použité platformě proměnný, ale nejčastěji se uvádí vrstvy tři: prezentační, aplikační a datová. Prezentační vrstva je tvořena webovými stránkami zobrazovanými v prohlížeči. Aplikační vrstva je zpravidla realizována jako program, který běží na webovém nebo aplikačním serveru. Datová vrstva umožňuje ukládat data do databáze, zpracovávat je tam, vytvářet nad nimi dotazy, a výsledky dotazů poskytovat klientům v podobě dynamicky generovaných webových stránek.
5.2 Typy útoků na webové aplikace Za webovou aplikaci je nejčastěji považována aplikace typu klient-server využívající protokol HTTP. Klientem bývá nejčastěji webový prohlížeč. Existují v zásadě tři hlavní typy útoků na webovou aplikaci: buď se jedná o manipulaci s aplikací prostřednictvím rozhraní vytvořeného HTML kódem, nebo může útočník manipulovat s URL adresou nebo přímo s HTTP protokolem.
Některé vlastnosti webových aplikací je činí obzvlášť přitažlivým cílem útoku. Například to, že jsou dnes webové aplikace téměř všudypřítomné, zajišťuje, že vždy existuje dostatek atraktivních cílů na které je možné zaútočit, a nezkušených uživatelů, které je možné zneužít. Díky anonymitě je snadné spustit útok beze strachu, že bude útočník vystopován a pohnán k odpovědnosti. Vlastnosti webových aplikací, které je činí atraktivní pro útok Ve srovnání s jinými typy útoků, například s útokem na operační systém nebo počítačovou síť, jsou útoky na webové aplikace velmi jednoduché. Útočník si pro provedení útoku často vystačí jen s webovým prohlížečem a nepotřebuje žádné vyspělé nástroje.
19
Další velkou výhodou je fakt, že je HTTP provoz typicky propouštěn firewallem, takže ochrana, kterou jinak firewall poskytuje, je vyřazena ze hry. Nezralý model bezpečnosti je způsoben několika různými faktory. Protože je HTTP bezestavový protokol, tak ani standardně neumožňuje oddělit od sebe jednotlivé uživatele. Protože existuje ohromné množství různých vývojářských nástrojů a platforem, vede to často k tomu, že si vývojáři vytvářejí bezpečný kód dle svých představ.
5.3 Útok typu XSS Velmi rozšířený je typ útoku nazývaný Cross Site Scripting (XSS). Dochází k němu v případě, kdy v důsledku nedostatečně kontrolovaných vstupních dat, které webová aplikace převezme od klienta, jsou data opět bez úprav odeslána zpět klientovi v podobě dynamicky generované webové stránky. Jenže tato vstupní data mohou obsahovat speciálně připravený škodlivý obsah v podobě HTML kódu nebo skriptu.
Při zobrazování vstupů od uživatele je tedy nutné zajistit, aby veškerý výstup nebyl do HTML stránky zapsán přímo, ale jen jako text. Možným řešením je používat takové systémy, které při výpisu textu na obrazovku rovnou vše správně převedou na vyjádření pomocí HTML znakových entit. Celý proces kontroly lze tedy rozdělit na několik částí: oprava HTML kódu, kontrola a případné odstranění nepovolených značek.
5.4 Útok typu SQL Injection Tento typ útoku využívá špatného ošetření vstupu od uživatele při sestavování dotazů do databáze.
20
Pokud se dotaz vytváří přímým složením s daty zaslanými pomocí formuláře, může útočník zadáním vhodných vstupních dat, například jako v ukázce do formulářového pole param, vytvořit dotaz, který se vždy úspěšně provede. V tomto případě by došlo k výpisu informací uložených v tabulce users. Tento problém má naštěstí snadné řešení – nesestavovat SQL dotaz pomocí jednoduchého skládání řetězců.
5.5 Útok typu krádež relace. Protože je HTTP bezestavový protokol, ale všichni potřebují alespoň určitou formu stavu přenášet, používá se mechanizmus sezení (anglicky session). Uživateli je při prvním přístupu na web vytvořeno sezení a je mu přidělen nějaký identifikační kód, který se buď uloží do cookie nebo postupně předává v URL adrese nebo skrytém poli formuláře. Mechanizmus sezení je ale možné zneužít. Stačí získat identifikátor sezení a následně může útočník předstírat korektně přihlášeného uživatele. Proto je nutné identifikátory sezení generovat náhodně a ještě lépe kontrolovat i IP adresu uživatele. Mechanismus útoku:
Pokud se pro ukládaní relace použije cookie, je nutné nastavit správné omezení cookie na doménu a nastavit také dobu platnosti cookie. Také lze použít vlastnost cookie nazvanou HttpOnly. Cookie s touto vlastností nebude možné přečíst pomocí JavaScriptu.
5.6 Zásada stejného původu
21
Zásada stejného původu (dále jen SOP z anglického názvu Same Origin Policy) je koncept zavedený firmou Netscape v roce 1995 spolu s JavaScriptem a objektovým modelem dokumentu (DOM). Tato zásada definuje poměrně přímočaré pravidlo, které určuje podmínky, kdy může JavaScript v jednom načteném dokumentu přistupovat k DOM druhého načteného dokumentu. Může to udělat jen tehdy, pokud mají oba dokumenty stejný původ, přičemž stejným původem se rozumí trojice údajů: schéma, DNS jméno serveru, a číslo portu. Internet Explorer se zde poněkud liší a do stejného původu nezahrnuje číslo portu. Navíc pokud jsou oba dokumenty ze zóny Důvěryhodné weby, tak se ani žádné kontroly nebudou provádět. SOP využívá DNS jména a nikoli odpovídající IP adresy, což může být využito k útoku zvanému DNS rebinding. Webový prohlížeč se proti tomuto útoku může bránit tím, že si bude po určitou dobu pamatovat DNS jména i s odpovídající IP adresou. SOP byla původně určena jen k omezení pro přístup k metodám a vlastnostem zobrazeného HTML dokumentu, ale postupně byla rozšířena tak, aby chránila i další citlivé oblasti, ale bohužel ne všechny. Například skript, který SOP nesplňuje, může obvykle bez problému zavolat metody location.assign a location.replace pro libovolné okno nebo rám zobrazené v prohlížeči. Pro lepší představu o vyhodnocování stejného původu jsou v tabulce uvedeny výsledky porovnání původu dokumentu s URL adresou http://example.com/a/:
Pouze dokument na adrese uvedené v prvním řádku bude moci přistupovat k objektům výchozího dokumentu, protože test porovnávající stejný původ skončí úspěchem. Všechny následující řádky nesplňují některou z podmínek, to znamená, že se liší buď v použitém schématu, nebo jméně serveru či portu. Mechanismus SOP je poměrně jednoduchý a snadno se implementuje, ale pro webové vývojáře je někdy příliš široký a jindy příliš svazující. V prvním případě například neumožňuje izolovat domovské stránky uživatelů, pokud sdílí stejnou doménu. V druhém případě neumožňuje legitimní spolupráci webů jako například login.example.com a payments.example.com. Existuje ale několik různých způsobů, jak pojem stejný původ rozšířit tak, aby tato spolupráce byla možná.
22
5.7 Rozšíření SOP
První způsob využívá nastavení vlastnosti document.domain na stejnou hodnotu pro všechny dokumenty, které spolu mají spolupracovat. Nastavení této hodnoty pak má při vyhodnocování přístupu přednost před obvyklou kontrolou definovanou pomocí SOP. Protokol a číslo portu si ale musí stále odpovídat. Druhý způsob byl představen jako rozšíření jazyka HTML5. Jedná se o rozhraní nazvané postMessage, které umožňuje zaslat textovou zprávu libovolné délky do vybraného okna nebo rámu. V následující tabulce jsou uvedeny výsledky kontroly přístupu k cílovému dokumentu při použití vlastnosti document.domain.
Obě strany musí vlastnost document.domain explicitně deklarovat, pokud to jedna z nich neudělá, tak bude přístup odmítnut. To je případ posledních dvou řádků tabulky, kdy je vidět, že použití vlastnosti document.domain nelze kombinovat se zásadou stejného původu. Slabinou tohoto řešení je to, že nevítaný návštěvník se může bez problémů přidat. Zjistí jaká je hodnota vlastnosti document.domain a na svých stránkách ji nastaví stejně. Pro ilustraci vhodného použití rozhraní postMessage předpokládejme, že dokument na adrese payments.example.com potřebuje získat přihlašovací informaci ze stránky login.example.com. Nejprve tedy definuje rám odkazující se na login.example.com. V tomto rámu provede akci uvedenou na řádku číslo jedna, kterým označí nadřazené okno jako důvěryhodné.
23
Aby mohl výchozí dokument obdržená data zpracovat, musí definovat obsluhu události na řádku číslo 4. Řádky 6 až 10 ukazují zpracování takto obdržených dat. I když použití rozhraní postMessage představuje vyspělejší řešení než použití vlastnosti document.domain, může být ale špatně použito. Na posledním řádku je ukázka takového špatného použití, kdy si programátor snažil usnadnit práci, ale výraz, kterým provádí porovnání, je příliš obecný.
5.8 Cookies
Cookies představují velmi důležitý prvek současných webových aplikací, ale jejich použití je určeno jinou bezpečnostní politikou než je zásada stejného původu. Jako cookie se v protokolu HTTP označuje malé množství dat zaslané WWW serverem prohlížeči, který je uloží na počítači uživatele. Při každé další návštěvě téhož serveru pak prohlížeč tato data posílá serveru zpět. Cookies běžně slouží k rozlišování jednotlivých uživatelů, ukládají se do nich uživatelské předvolby apod. Cookies lze ale také zneužít pro sledování navštívených stránek. Práce s cookies je omezena jen na konkrétní web, pro který slouží, a lze nastavit různé časy vypršení platnosti cookie. Bezpečnost Cookies Cookie webový server vytvoří použitím vhodného záhlaví v HTTP odpovědi. Jedná se o záhlaví nazvané příznačně Set-Cookie, ve kterém se specifikuje následující informace: název cookie, data cookie, doba platnosti, doména a adresář na serveru, pro které cookie platí.
24
V tabulce jsou uvedeny různé varianty hodnoty parametru doména při odeslání stránky na adrese www.example.com, s výsledky uvedenými v pravé části tabulky.
Cookies neznamenají žádné nebezpečí pro počítač jako takový. Přesto mohou být nebezpečné pro ochranu soukromí. Navštívený web si totiž může ukládat do cookies jakékoliv informace, které o návštěvníkovi zjistí a může tak postupně zjišťovat zájmy konkrétního návštěvníka. Které stránky navštěvuje, jaké informace vyhledává, jak často daný web navštěvuje apod. Těchto informací se dá posléze i bez vědomí návštěvníka využívat pro cílenou reklamu, statistické vyhodnocování chování návštěvníků, apod. Tyto informace však lze získávat i bez cookies, proto toto jejich využití nemůže být považováno za zvlášť nebezpečné. Cookies lze zneužít zejména tehdy, pokud získá útočník přístup k počítači uživatele, neboť cookies na počítači nejsou nijak chráněny. Pak lze předstírat např. cizí identitu.
25