Zaheslování stránek

různé způsoby

Možnosti zaheslování - Kryptovaný soubor - Tajná adresa - Přístup k tajné adrese JavaScriptem - Zaheslování serverovým skriptem (PHP) - Serverová autentifikace - Bezpečná komunikace - Logika utajování

Možnosti zaheslování

Hodně lidí se mě ptá, jak si dát na svůj web informace, které může číst jen ten, kdo zná heslo. Jsou různé možnosti, žádná ale není úplně primitivní:

Všechny možnosti mají výhody a nevýhody. Následující text vám umožní vybrat si vyhovující řešení podle vašich potřeb a technických možností. Začínám tím nejsnazším.

Kryptovaný soubor

Na web se prostě umístí soubor ve formátu, který umožňuje zaheslování. To je například formát *.zip (zip archiv) nebo *.doc (Microsoft Word), jsou i jiné. Uživatel si soubor stáhne, ale otevře jej pouze v případě, že zná heslo.

Je to podobné jako když schováte knížku v kované truhlici: truhlici lze ukrást (soubor stáhnout), ale nelze se pak dostat ke knize. 

Autor souboru heslo zadává při ukládání. V každém formátu a programu se to dělá jinak. Např. WinZip na to má tlačítko Password. Ve Wordu se to nastavuje v Možnosti > Ukládání. 

Osobně nemohu doporučit používat heslované *.zipy ani *.docy pro velmi tajné informace. Kryptování v souborech MS Office (*.doc, *.xls a spol.) se prý dá rozlousknout a také v každé verzi office funguje jinak. Také zip prý jde rozlousknout. Naštěstí to ale mnoho lidí neumí (já třeba ne), takže rozumná míra utajení zůstane zachována.

Tato kryptovací metoda je extrémně nevhodná pro soubory, které se často mění, protože je s tím moc práce. Pro svoji jednoduchost je ale velmi oblíbená. 

Tajná adresa

Nejprimitivnější způsob utajení stránky spočívá v tom, že nikdo neví, kde stránka je. Pokud prostě nikomu neřeknu adresu a na stránku nenamířím žádný odkaz, tak skoro není šance, že by si jí někdo mohl přečíst. 

Je to podobné, jako když schováte knížku "někde na Brdech". 

Přístupovým heslem je potom adresa stránky. Lidem, kteří si budou smět stránku přečíst, prostě pošlete adresu. 

Nutné podmínky bezpečnosti takového způsobu:

Tento způsob utajení informací je rychlý, jednoduchý, ale vcelku nepohodlný. Heslo se nešikovně předává a ještě hůře pamatuje, prakticky se musí posílat celé URL. To je velmi nepohodlné. Tyto problémy se dají vyřešit JavaScriptem (popsáno dále). Ale ani JavaScript neumožňuje použití uživatelských jmen ani rozdílných hesel (leda bych měl pro každého uživatele sólo soubor).

Přístup k tajné adrese JavaScriptem

Jedná se pouze o pohodlnější variantu předchozí metody. Ideální představa pro uživatelův přístup k utajeným stránkám je ta, že uživatel klikne na odkaz a bude vyzván, aby zadal heslo. Heslo by přitom mělo být relativně jednoduché (ne desítky znaků).

Budu mít dvě stránky

  1. Na první stránce (veřejné a běžně známé) bude formulář na zadání hesla. Formulář bude vyhodnocován skriptem.
  2. Druhá stránka (s tajnými informacemi) bude mít normálně utajenou adresu (jako v předchozí kapitole); jméno toho souboru bude heslem.

Stránka s formulářem bude mít tento kód: 

<form name="formular" onsubmit="return false">
Heslo: <input type="password" size="10" name="heslo">
<input type="submit" value="Pokračovat" onclick="window.location.href = 'priklady/' + document.formular.heslo.value + '.html' ">
</form>

Což ve stránce vypadá jako obyčejná políčka:

Heslo:

Zadáte-li nyní heslo "tajna-stranka", dostanete se na stránku, která má relativní adresu priklady/tajna-stranka.html. Zadá-li se špatné heslo, stránku nelze zobrazit (musí se zpět). 

Funkci skriptu zkuste prosím pochopit sami (trochu jsem pro přehlednost obarvil věci, které souvisejí). Můžete si jej upravit podle sebe:

(Další vysvětlivky: onclick je událost, která se spouští při kliknutí na tlačítko; window.location.href je adresa stránky v aktuálním okně; document.formular.heslo.value v sobě obsahuje hodnotu zadanou do políčka s heslem; Type=password nedělá vůbec nic kromě toho, že zadávaný text hvězdičkuje; Onsubmit="return false" zabraňuje odeslání formuláře standardní cestou (nechává se to vyhodnotit skriptu). )

Samozřejmě je nutné zachovat klasická opatření pro utajení adresy: zakázat indexování a neodkazovat. Další nevýhodou je hláška "stránku nelze zobrazit", pokud někdo zadá špatné heslo.

Zaheslování serverovým skriptem

Serverové skripty jsou např. PHP, ASP nebo obecně libovolný CGI skript. Nabízejí mnohem větší možnosti zaheslování, zejména ve spolupráci s databází (není podmínkou). Abyste mohli serverové skripty použít, musíte je mít povolené a nainstalované na serveru. V příkladu budu uvažovat použití PHP. 

Tajná stránka má nyní veřejnou adresu. Je to soubor tajna_stranka.php. Server ji před odesláním ale parsuje a odesílá jen výsledky. (Představte si to jako knihu, která je čitelná jenom přes polarizační brýle:-)

Jednoduchý příklad heslování stránky v PHP: 

<body>
<?php if($_GET["heslo"] != "mellon"): ?>
    <!--přihlaąovací formulář -->
    <form>
        Zadej heslo: <input type="password" name="heslo">
        <input type="submit">
    </form>
<? else: ?>
    <h1>Vítejte v Morii!</h1>
    ... další tajný text
<? endif ?>
</body>

Zobrazte si příklad (nefunguje ve stažené verzi) a zkuste zadat "mellon".

Popis funkce: jestliže neexistuje proměnná $heslo nebo není rovna (!= je nerovnost) řetězci mellon, zobrazí se pouze přihlašovací formulář s žádostí o heslo.

Jinak (else) se vypíše tajný text stránky. 

Zmíněný příklad je v praxi nutno trochu zdokonalit nějakou konverzí hesla, aby se zabránilo průniku hackerů, kteří zkoušejí místo hesel zadávat programové kódy. 

Další možnosti

Heslo je chráněno před čtenáři, protože se jim neodesílá kód, ale jenom výsledky. V praxi se ale hesla nepíší do PHP zdrojáků, spíše se ukládají ve zvláštních souborech nebo v databázi zakódované pomocí MD5. 

Serverové skripty mohou spolupracovat s databází, která si ukládá uživatelská jména a hesla. Potom může mít každý uživatel jiné heslo. Databáze společně s PHP umožňuje třeba i založení "účtu", kdy se po registraci do tabulky uloží heslo a uživatelské jméno, které jsou potřeba pro další přístupy ke stránkám. 

V některých případech přebírají serverové skripty trik neznámé adresy: vygenerují dlouhatananánský řetězec, který by nikdo neuhodl, a používají jej interně mezi různými svými soubory jako heslo. Tomuto způsobu přístupu podle uživatele se říká session [čti sešn nebo sešna]. Pro úplnost: session se někdy píšou do URL, někdy se jen předávají přes cookies.

Serverové skripty mají tu zásadní nevýhodu, že se musejí na serveru instalovat, programovat a málokdo má možnost používat je zdarma. Nabízejí sice mnohem lepší ochranu údajů než mechanismus tajné adresy (popsaný výše), přesto není ochrana absolutní, protože je teoreticky možný útok (pokud je server špatně vyladěn) ze strany nějakého jiného uživatele serveru nebo databáze. Heslo také může být odchyceno cestou (aby nebylo, musí se použí SSL).

Serverové skripty jsou dnes nejrozšířenější metodou ochrany údajů na velkých serverech. Např. všechny velké poštovní servery s webovým rozhraním (Seznam, Post, Email apod.) je používají pro autentifikaci uživatelů webu. 

Serverová autentifikace

Nejlepší systém ochrany údajů je autentifikace přímo na serveru. Jedná se o širší problematiku, než aby se dala popsat stručně (což mám v úmyslu). Aby se dala serverová autentifikace použít, je třeba mít možnost konfigurovat server -- buďto přímo httpd.conf, .htaccess nebo, je-li to dovoleno, soubory hesel. Protože dnes (narozdíl od minulosti) má možnost konfigurovat server (procentuálně) naprosté minimum autorů webu, přejdu tuto možnost pouze s poukazem na to, že existuje. 

Můžete si to představit jako knížku v knihovně, kterou knihovnice půjčí pouze registrovaným čtenářům. 

Jedna idea je taková, že na serveru v operačním systému definovaní uživatelé a skupiny uživatelů. Normálně k webovým dokumentům přistupuje virtuální uživatel jako nějaký host, který má omezená práva. Pokud se nějakému adresáři nebo souboru na serveru omezí práva ještě víc, bude webový uživatel vyzván promptem k zadání jména a hesla. To se mu podaří zadat pouze pokud je na serveru nějak registrovaným uživatelem.

Autentifikace přes server se nejčastěji provádí na Apache (nebo na IIS, tam to neumím). Nejčastěji se používá soubor httpd.conf nebo .htacess, který definuje uživatele, způsob autentifikace a místo, kde má najít seznam hesel v souboru .htpasswd. Apache musí mít v configu direktivy AuthType, AuthName, Limit, Require a cestu k souboru s hesly AuthUserFile nebo AuthGroupFile. Ten se tvoří aplikací htpasswd. Nic pro smrtelníky odkojené operačním systémem Windows. :-) Zájemce musím odkázat na jiné zdroje, třeba na knihu Apache, správa webového serveru, ComputerPress 1997, kapitola 5. Pošlete mi prosím odkazy na případné srozumitelné on-line zdroje, díky. 

Jiný způsob práce se serverovou autentifikací představuje její zkombinování s jednoduchým PHP skriptem. Popisuje Jakub Vrána v článku Přihlašování uživatelů.

Serverová autentifikace se hodnotí jako jediná opravdu bezpečná metoda ochrany a distribuce dat. Používá se pro ostré špičkové aplikace, např. internetové banky, exkluzivní pornoservery a obecně všechno, v čem je hodně peněz. Chcete-li výhledově zbohatnout, staňte se odborníky na serverové zabezpečení a bezpečnou komunikaci :-).

Bezpečná komunikace

Předem hlásím, že o tom nic nevím. Snad jen to, že teoreticky lze všechnu běžnou komunikaci na Internetu při troše štěstí odchytit a monitorovat. V praxi to nikdo moc nedělá, protože těch dat je neuvěřitelná spousta a nikdo se v tom nechce hrabat. Jakmile ale jde o velké peníze, tak už by se vyplácelo ta hesla odchytávat. 

Proto existuje protokol https://, který umožňuje data předávat kódovaně, tedy bezpečně. Protokol musí používat jak klient (nastavuje se v možnostech novějšího prohlížeče), tak server (to záleží na instalaci a konfiguraci serveru). Myslím, že přenosové metodě kryptovaných stránek se říká SSL, jde vlastně o síťovou vrstvu. Kromě https existují i další metody kryptování informací (např. PGP), ty se ale nepoužívají pro přenosy stránek.

Napište mi prosím odkazy na on-line zdroje, které o https a podobných věcech pojednávají, díky.

Logika utajování

Vždycky mě uchvátí, když přijdu na stránku, kde na počitadle svítí dvouciferné číslo, ale je tam vstupní formulář pro vstup do utajené sekce. K čemu to je???

Je potřeba si uvědomit, že stránek existuje tolik miliard, že uživatele vlastně nezajímá ani normální text stránky. Natož nějaké utajené nesmysly! Pokud budu uživateli do cesty klást různé překážky typu registrace nebo zadávání hesla, tak se otráví a zkusí jinou stránku z miliónu možných. 

Když už tedy máte něco tajného, nemusíte se moc úzkostlivě snažit vymyslet dokonalé utajení, protože normálně nikoho nebude bavit tím systémem pronikat.

Pravidlo dne tedy zní: co není nutně tajné, nechť je veřejné! Jinak řečeno nejlépe udělá ten, kdo z této stránky nic nepoužije.

 

Reklama

www.webhosting-c4.cz, extra rychlý SSD webhosting s doménou v ceně
o tvorbě, údržbě a zlepšování internetových stránek

Návody HTML CSS JavaScript Články Ostatní

Základy Prvky stránek Tvorba webu

Jak psát web píše Yuhů, Dušan Janovský. Kontakt.