Pokud nepotřebujete registraci, zapomenuté hesla a další funkce, opravdu stačí jen zabezpečit přístupu proti náhodným a nežádoucím přístupům, můžete vytvořit velmi jednoduše toto chování pomocí HTTP Basic Auth.
Řešení pomocí souboru .htaccess je v novém článku
Jméno a heslo se předává v každém requestu, a při navštívení stránky vám prohlížeč zobrazí okno, pro zadání údajů. Ty si poté zapamatuje a automaticky je při prohlížení webu vždy posílá. Tuto techniku samozřejmě můžete využít s jakýmkoli jazykem, my si ale ukážeme řešení v PHP.
Následující kód jednoduše vložte do index.php nebo souboru, který chcete zabezpečit, a to úplně nahoru.
if (empty($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_USER'] != "login" || $_SERVER['PHP_AUTH_PW'] != "pass") { header('WWW-Authenticate: Basic realm="My Realm"'); header('HTTP/1.0 401 Unauthorized'); echo 'Zde nemáte přístup bez jména a hesla'; exit; }
Vyplnění jména a hesla
Možnosti jak vyplnit jméno a heslo jsou hned tři, první je závislá na prohlížeči, další 2 doplňují údaje do URL nebo hlavičky requestu.
Možnost 1: Při navštívení prohlížeč zobrazí při přístupu na stránku dialogové okno, případně text Zde nemáte přístup... pokud uživatel klikne na Storno.
Možnost 2: Jména a heslo lze doplnit přímo do URL ve formátu:
http://jmeno:heslo@domain.com/
Možnost 3: Doplnění přímo do hlaviček požadavku. Toto řešení již je závislé na použité technologii. Viz článek o wget, který na to má přímo parametry.
Wedos a FastCGI
Pokud chcete využít HTTP autentizace a používáte hosting Wedos nebo FastCGI, tyto hlavičky v PHP nepřečtete. Řešení je ale jednoduché, stačí vložit do souboru .htaccess:
RewriteEngine on RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
a před první použití proměnných také tento PHP kód:
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)), 2);
Chování a bezpečnost
Protože jméno i heslo se posílá v hlavičce s každým requestem, odposlechnout tyto údaje je ještě jednodušší. Navíc nejsou nijak šifrovány, pouze zakódovány pomocí Base64. Tomu se dá zamezit použitím certifikátu a HTTPS protokolu.
Druhé omezení spočívá v nemožnosti vložit do jména znak :, protože ten slouží jako oddělovat mezi jménem a heslem. Přesto pro jednoduché zamezení přístupu může tato metoda dostačovat.
Úvodní fotka převzata z Freepik
K tomuto článku již není možné přidávat další komentáře