Relace (informatika): Porovnání verzí

Smazaný obsah Přidaný obsah
JagRoBot (diskuse | příspěvky)
m Robot ujednotil nadpis sekce souvisejících článků
rozčlenění a doplnění
Řádek 1:
Jako '''sessionSession''' (v překladu ''sezení'' nebo ''relace'') se v [[informatika|informatice]] rozumípředstavuje trvajícípermanentní [[Počítačová síť|síťové]] spojení mezi [[Klient (počítače)|klientem]] a [[server]]em, zahrnující výměnu většího množství [[paket]]ů.
 
==Session v různých komunikačních protokolech==
U protokolů jako je [[telnet]] nebo [[File Transfer Protocol|FTP]] session odpovídá spojení na úrovní nižšího protokolu [[TCP]]. V případě použití protokolů které žádnou podporu pro sessions nemají ([[UDP]]), nebo kde spojení typicky trvají velmi krátkou dobu ([[HTTP]]), jsou session udržovány přímo aplikačním programem, a k tomu nutné informace jsou vkládány do přenášených dat.
 
==Session v HTTP==
Typickým příkladem je použití [[HTTP cookie]] k uložení jednoznačného identifikátoru (zvaným '''SESSIONID''', '''SESSID''', '''SID''' apod.), podle něhož pak server ve své paměti najde potřebné informace o přihlášeném uživateli, jeho úrovni přístupu a podobně. Pokud se klient může připojit k libovolnému serveru z [[Výpočetní cluster|clusteru]], je třeba mezi jednotlivými servery informace o sessions buď sdílet, nebo zajistit, že se stejný klient vždy připojí ke stejnému uzlu. V opačném případě by se klient mohl spojit se serverem, který o zahájené session neví, a tak přijít o přihlášení, stav nákupního košíku a podobně.
Session v protokolu [[HTTP]] dává webovému serveru možnost uložit si libovolné (většinou však ne příliš obsáhlé) informace o uživatelích, kteří k němu přistupují, a to o každém zvlášť. Protokol HTTP ze svého principu (požadavek - odpověď) postrádá kontext o jednotlivých klientech, a právě session jej webovým aplikacím dokáží dát.
 
Typickým příkladem je použití [[HTTP cookie]] k uložení jednoznačného identifikátoru (pojmenovaného '''SESSIONID''', '''SESSID''', '''SID''' apod., jehož hodnota je při startu session náhodně vygenerována). Podle takto uloženého HTTP cookie pak server ve své paměti najde potřebné informace, například o přihlášeném uživateli, jeho úrovni přístupu a podobně. Podstatné je, že samotná data se již nepřenášejí (ani v [[URL]], ani v samotném požadavku).
 
Typickým příkladem je použití [[HTTP cookie]] k uložení jednoznačného identifikátoru (zvaným '''SESSIONID''', '''SESSID''', '''SID''' apod.), podle něhož pak server ve své paměti najde potřebné informace o přihlášeném uživateli, jeho úrovni přístupu a podobně. Pokud se klient může připojit k libovolnému serveru z [[Výpočetní cluster|clusteru]], je třeba mezi jednotlivými servery informace o sessions buď sdílet, nebo zajistit, že se stejný klient vždy připojí ke stejnému uzlu. V opačném případě by se klient mohl spojit se serverem, který o zahájené session neví, a tak přijít o přihlášení, stav nákupního košíku a podobně.
 
==Session pro skriptovací jazyky==
Z hlediska [[skriptovací jazyk|skriptovacích jazyků]] pro programování [[intranet]]ových/[[internet]]ových aplikací, session představuje množinu proměnných (někde přístupnou přes sadu funkcí, jinde přes globální proměnnou), které dovolují uchovávat hodnoty, které jim byly nastaveny, po dobu připojení (tj. se znovunačtením stránky se neztratí).
 
==Session a bezpečnost==
== Související články ==
Zabezpečení session funguje na tom, principu, že přístup k proměnným konkrétního uživatele je možný přes jeho identifikátor v podobě dostatečně dlouhého, náhodně generovaného, a tedy neuhádnutelného klíče. Druhé specifikum je to, že session má poměrně krátkou dobu platnosti (implicitně bývá 24 minut, není-li nastaveno jinak). Samotné použití session ovšem automaticky nezaručuje, že se k datům pomocí nich uložených dostane pouze uživatel, jemuž jsou určeny. Webové aplikace – pokud session využívají – by současně s ním měly zavést konkrétní principy, které rizko zneužití session minimalizují.
 
===Zneužití session===
Následující metody umožňují útočníkovi získat přístup k session své oběti. Některé z nich využívají [[Sociální inženýrství (bezpečnost)|sociální inženýrství]]. Všechny jsou možné, pokud je cílová webová aplikace proti těmto metodám nezabezpečená. Obecně se nazývají '''session hijacking'''.
 
===Session hijacking===
* '''Session fixation''' – útočník na internetu uloží stránku s odkazem na zamýšlenou aplikaci a svou oběť/oběti – např. přes ICQ, e-mail, … – aby na tento odkaz klikly a přihlásily se do aplikace. Daný odkaz v cílové URL adrese již obsahuje (konstantní) HTTP cookie, která se (pokud aplikace není zabezpečena proti tomuto útoku) použije. Útočník poté použije stejný odkaz a získá stejná oprávnění jako před tím přihlášený uživatel.
* '''Session sidejacking''' – pokud se SESSIONID přenáší spolu s URL adresou, může útočník využít [[packet sniffing]] (sledování packetů), ze kterých hodnotu SESSIONID přečte a (dokud se původní uživatel neodhlásil a jeho relace nevypršela) může se pokusit přihlásit s touto SESSION.
* Pokud se session ukládají v [[cookie]]s, data z nich jsou uloženy na serverovém pevném disku. Dostane-li se tedy útočník k nim, může je (ty z nich, jejichž platnost ještě nevypršela) zneužít.
* Útočník může pro získání session zkombinovat sociální inženýring s útokem typu [[cross-site scripting]], kdy přiměje uživatele již přihlášeného do aplikace spustit odkaz se záškodným kódem, jenž získá SESSIONID oběti a odešle ho útočníkovi.
 
===Prevence===
* Nejstarší webové aplikace využívající session si jejich identifikátor často stanovovaly samy. V některých případech jako zašifrované údaje související s údaji daného uživatele. Tento přístup je považován jako bezpečnostní chyba – SESSIONID by vždy měly být zcela nahodilá a dostatečně dlouhá, aby odolaly [[Brute force|útokům hrubou silou]]. Současné skriptovací jazyky toto automaticky nabízejí.
* Dodatečné ověřování – po přihlášení uživatele sledovat též [[IP adresa|IP adresu]] klientského počítače a řetězec identifikující [[webový prohlížeč]] (označovaný jako '''''User-agent''''') a v případě, že přijde další požadavek z jiné IP adresy nebo z jiného prohlížeče, session ukončit a její proměnné vymazat. Tato metoda se doporučuje implementovat, přestože nemusí být 100% účinná (v případě, že útočník a oběť mají sdílenou IP adresu (např. ve stejné firmě), a používají stejný typ prohlížeče). Nicméně řeší více metod ukradení a následného použití SESSIONID a dokáže útočníka zastavit v poslední fázi, ať už se k cizímu session dostal jakkoli.
* Proti session fixation se doporučuje regenerovat po přihlášení hodnotu SESSIONID (např. v [[PHP]] funkcí <code>session_regenerate_id</code>).
* Alternativně k tomu některé služby regenerují SESSIONID s každým požadavkem na server. To výrazně redukuje dobu, po kterou má útočník příležitost nabytou hodnotu SESSIONID využít.
* Šifrování dat přenášených mezi jednotlivými stranám, zejména pak SESSIONID – toto je v praxi využíváno v [[internetové bankovnictví|internetovém bankovnictví]] a jiných [[e-commerce]] aplikacích.
 
==Odkazy==
=== Zdroje ===
{{překlad|en|Session hijacking|360241235}}
 
=== Související články ===
*[[HTTP cookie]]
*[[HTTP]]