Relace (informatika)

Relace(anglicky a slangověsession, méně častosezeníneboseance) vinformaticepředstavuje permanentnísíťovéspojení meziklientemaserveremnebo úsek práce na počítači zahájený přihlášením a ukončený odhlášením bez ohledu na to, zda se s počítačem komunikuje po síti nebo ne. Relaci je možné chápat jako logické spojení, které může zahrnovat několik fyzických spojení.
ProgramGNU Screenumožňuje udržet relaci otevřenou i v případě, že dojde k přerušení spojení; po obnovení spojení je možné se k relaci opět připojit a pokračovat v činnosti. Také je možné se odpojit, otevřít další relace, přepínat se mezi otevřenými relacemi a přenášet mezi nimi text jako při použitíschránky (clipboard).
U protokolů jako jetelnetneboFTPrelace odpovídá spojení na úrovní nižšího protokoluTCP. V případě použití protokolů, které žádnou podporu pro relace nemají (UDP), nebo kde spojení typicky trvají velmi krátkou dobu (HTTP), jsou relace udržovány přímo aplikačním programem, a k tomu nutné informace jsou vkládány do přenášených dat.
Relace v protokoluHTTPdá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 (a způsobu komunikace stylem požadavek–odpověď) postrádá kontext o jednotlivých klientech, a právě relace ho webovým aplikacím dokáže dát.
Relace (přesněji odkaz na data relace) je v HTTP předávána dvěma nejrozšířenějšími způsoby:
To, jakým způsobem se relace bude přenášet a pod jakým názvem, nastavujewebový server(například uApachese název session ukládá v konfiguraci pod proměnnou nastavenísession.name; použití cookies pak nastavují proměnnésession.use_cookiesasession.use_only_cookiespopř.session.cookie_httponly, maximální délka platnosti se nastaví v proměnnésession.gc_maxlifetime, která je implicitně 1440 sekund – tzn. pokud uživatel k webovému místu nepřistoupí do 24 minut od posledního požadavku, session ztrácí).
Nevýhodou přenosu přes cookies je to, že některé archaické internetové prohlížeče je nepodporují (těch je ovšem mizivé procento) a ty soudobé dovolují cookies vypnout (opět, podíl uživatelů s vypnutými cookies je zanedbatelný). Jinou potenciální nevýhodou může být to, že pokud by potenciální útočník získal přístup k adresáři na serveru, do kterého se cookies ukládají, dostal by se i k session. Výhodou je to, že se přenáší v těle požadavku, nikolik jeho URL.
Naopak, session v URL danou adresu znepřehledňují, činí ji příliš dlouhou, nezapamatovatelnou a působí proti principůmSEO(mohou dokonce „rozmělňovat“ odkazovatelnost toho kterého odkazu). Při práci s aplikací s tímto způsobem předávání se jednotlivá session navíc ukládají i do historie prohlížeče a záložek. Je-li například (proti bezpečnostním zásadám) hodnota session generovaná na základě přístupových údajů uživatele, může se k nim útočník dostat snadněji než v případě ukládání do cookies. Některéwebové aplikace(např.phpMyAdmin) proto při přihlašování vyžadují možnost ukládat cookies.
Typickým příkladem je použitíHTTP cookiek uložení jednoznačného identifikátoru (pojmenovanéhoSESSIONID,SESSID,SIDapod., 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 vURL, ani v samotném požadavku).
Pokud se klient může připojit k libovolnému serveru zclusteru, je třeba mezi jednotlivými servery informace o relacích 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é relaci neví, a tak přijít o přihlášení, stav nákupního košíku a podobně.
Vinterakci člověk-počítačse správou relací rozumí proces sledování aktivity uživatele napříč relacemi v interakci s počítačem. Typické úlohy na správu relací vdesktopovém prostředíobsahují informace o tom, které aplikace jsou spuštěny a které dokumenty jimi byly využity tak, že stejný stav může být obnoven, když se uživatel odhlásí a později přihlásí. Pro webové stránky může správa relací zahrnovat potřebu se znovu přihlásit pokud vyprší platnost relace (tj. uplynula určitá lhůta bez aktivity uživatele). Používá se také k ukládání informací na straně serveru meziHTTPpožadavky.
Desktop session manager je program, který umožňuje uložit a obnovit relaci plochy. Relací plochy se rozumí všechna spuštěná okna a jejich aktuální obsah. Správa relací vLinuxsystémech se zajišťuje pomocí X session manageru. V systémechMicrosoft Windowsnení zahrnutý žádný správce relací přímo do systému, ale správa může být poskytována pomocí aplikací třetích stran jako je twinsplay.
Správa relací je užitečná zejména vewebovém prohlížeči, kde je uživateli umožněno uložit veškeré otevřené stránky a nastavení, které může později obnovit. Pokud dojde k pádu systému nebo aplikace, stránky a nastavení mohou být obnoveny při dalším spuštění, což pomáhá při zotavení.Google Chrome, OmniWeb aOperajsou příklady webových prohlížečů, které podporují správu relací. Další moderní prohlížeče jako jeMozilla Firefoxpodporují správu relací pomocí pluginů třetích stran nebo rozšíření. Správa relací je často řízena prostřednictvímcookies.
HTTPje statický: uživatelský počítač, na kterém je spuštěn webový prohlížeč, musí navázat nové síťovéTCPpřipojení kwebovému serverus každým novým HTTPGETneboPOSTpožadavkem. Webový server proto nemůže udržovat TCP síťové připojení déle, než je doba jedné HTTP GET nebo POST operace. Správa relací je technika používaná webovými vývojáři k vytvoření statického HTTP protokolu podporující stav relace. Například jakmile je uživatel ověřen na webovém serveru, další uživatelův HTTP požadavek nepožádá znovu uživatele o přihlašovací jméno a heslo.
Informace obsažená v relaci je uložena na webovém serveru pomocí ID relace, které je generované jako výsledek prvního požadavku uživatele (webového prohlížeče). Uchovávání údajů v ID relace (uživatelské jméno, číslo účtu, atd.) na webovém serveru se provádí pomocí různých technik včetně využití lokální paměti aprostých databázových souborů.
V situacích, kde více webových serverů zároveň musí znát stav relace (jak je typické v prostředíclusteru), musí být informace o relaci sdíleny mezi uzly clusteru, které využívají software webového serveru. Mezi metody pro sdílení stavu relace mezi uzly clusteru patří:
Z hlediskaskriptovacích jazykůpro programováníintranetových/internetovýchaplikací, 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í).
Například, v jazycíchASPaASP.NETjsou přístupné automaticky jako jednotlivé prvky poleSession("klíč"), vPHPpak pod tzv. superglobálním polem$_SESSION["klíč"]. V obou příkladech lze do session ukládat „jednoduché“ typy (celá čísla, racionální čísla, řetězce,null) i z nich složená pole (teoreticky libovolné složitosti). Hodnoty se ukládají tzv. serializované (převedené na řetězec podle formátu, ze kterého jej lze zpětně načíst (přibližně jako třebaJSON)).
Zabezpečení relace 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ě (nebo aspoň pseudonáhodně) generovaného, a tedy neuhádnutelného klíče. Druhé specifikum je to, že relace má poměrně krátkou dobu platnosti (implicitně [v PHP] bývá 24 minut, není-li nastaveno jinak). Samotné použití relace 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 relace využívají – by současně s ním měly zavést konkrétní principy, které riziko zneužití relace minimalizují.
Následující metody umožňují útočníkovi získat přístup k relaci své oběti. Některé z nich využívají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.
V tomto článku byly použitypřekladytextů z článkůSession hijackingna anglické Wikipedii aSession (computer science)na anglické Wikipedii.