Většina crawlerů (včetně Googlebotu) HTTP autentikaci (Basic Auth) respektuje a když narazí na webovou adresu s HTTP autentizací a nemá platné přihlašovací údaje, dostane odpověď 401 a jednoduše danou stránku neindexují. Nezkouší hesla hádat ani autentikaci obcházet. To znamená, že váš vývojový web zůstane mimo vyhledávače, i kdyby na něj náhodou někdo odkázal nebo kdyby byla URL veřejně dostupná.
Basic Auth probíhá na úrovni serveru (Apache / Nginx), nikoli aplikace (Drupal, WordPress apod.) takže pokud crawler, cizí uživatel apd. nemá hesla, k aplikaci se vůbec nedostane.
Důležité je ještě poznamenat že Google bot stránky se stavovým kodem 401 úplně vyřadí z indexu takže je potřeba při přesunu webu ze stage na produkci Basic Auth odstranit, protože v opačném případě to může být pro organickou návštěvnost dost velký problém.
Drobnou nevýhodou je že přihlašovací formulář nedá ostylovat pomocí Css, takže může působit dost stroze. Jde ale o vývojovou verzi a tam by to neměl být zas takový problém, je pouze potřeba upozornit na to zákazníka.
K použití HTTP autentizace je nutné vytvořit dva soubory:
- .htaccess kde definujeme samotnou autentizacia a cestu k souboru a soubor
- .htpasswd s uživatelským jménem a heslem.
.htaccess
V souboru .htaccess definujeme samotnou metodu kterou pro autentizaci použijeme, v případě té nejjednodušší varianty Basic Auth, to může vypadat takto:
AuthType Basic
AuthName "Chráněný přístup"
AuthUserFile /cesta/k/vasemu/.htpasswd
Require valid-userSoubor .htpasswd by se nikdy neměl nacházet ve veřejně přístupné složce webu (public_html, www apd.). Pokud byste ho umístili do veřejné dostupné složky, někdo by mohl uhodnout jeho název, soubor stáhnout a pokusit se hesla "prolomit" například brute-force útokem. Správné umístění je o úroveň výše, než je kořenová složka webu.
.htpasswd
Soubor .htpasswd už slouží k samotné definici uživatelského jména a hesla, což může vypadat takto:
admin:$apr1$yL9.f/..$6G9R1fG3M3A9zX.pIq8O1
honza:$2y$10$n8.V5v6w6B.j4p5VzVzVzeX.R.6G9Soubor .htpasswd můžeme vytvořit buď ručně v nějakém textovém editoru a nebo ho můžeme vygenerovat pomocí htpasswd utility včetně uživatelského jména a hesla.
# Vytvoření nového souboru a přidání prvního uživatele (přepínač -c vytvoří soubor)
htpasswd -c /cesta/k/.htpasswd uzivatel1
# Přidání dalšího uživatele do existujícího souboru
htpasswd /cesta/k/.htpasswd uzivatel2HTTP Basic autentikace posílá hesla v base64 kódování, takže byste ji měli vždy používat pouze přes HTTPS. Pro API requesty nebo automatizované testy musíte autentikaci zahrnout do konfigurace. A pokud někdo sdílí odkaz s údaji v URL (ve formátu https://user:pass@domain.com), může dojít k úniku přístupu (platí to pouze pro staré verze prohlížečů, moderní prohlížeče už si s tím dokážou poradit).
Usnadnění při vývoji
Pro vývojáře a nebo zbytek týmu je vhodné nastavit pracovní IP adresy na kterých není potřeba zadávat heslo, takže není nutné neustále vyplňovat přihlašovací údaje. Dá se to udělat nějak takto:
AuthType Basic
AuthName "Chráněný přístup"
AuthUserFile /cesta/k/vasemu/.htpasswd
# Povolit přístup buď s heslem, nebo z konkrétní IP
<RequireAny>
Require ip 1.2.3.4 # Tvoje IP adresa
Require valid-user
</RequireAny>Hashovací algoritmy v .htpasswd
Pro šifrování hesel může být použito různých šifrovacích algoritmů, O jaký algoritmus jde se dá poznat z úvodních znaků, určují, jakým algoritmem bylo heslo zašifrováno. Mezi nejčastější patří:
MD5 (prefix $apr1$)
Dlouhou dobu šlo o standard pro Apache (Apache MD5) a proto funguje prakticky všude. V současnosti se ale nepoužívá protože je příliš "rychlý" a dá se prolomit hrubou silou (brute force).
# Varianta pro staré verze Apache
htpasswd -m -c .htpasswd uzivatelBCrypt (prefix 2y$ nebo $2a$)
Jde o v současné době o standar a je mnohem bezpečnější než MD5 vyžaduje Apache 2.4 nebo novější (s modulem apr-util 1.5+). Starší servery (Apache 2.2) tomuto hashi nerozumí a uživatele nepřihlásí. Algoritmus je záměrně výpočetně náročný, což extrémně ztěžuje pokusy o prolomení hesla.
# Varianta s BCryptem.
htpasswd -B -c .htpasswd uzivatelDalší možnosti autentizace
Http autentizace může mít různé varianty které se liší různou mírou zabezpečení:
- Basic - nejjednodušší varianta, posílá jméno a heslo zakódované v Base64. Je nutné používat https.
- Digest - heslo se neposílá přímo. Server pošle náhodný kód (nonce) a prohlížeč z něj a hesla vytvoří hash.
- Bearer - neposílá se heslo, ale speciální token (např. JWT). Časté u moderních API.
- Negotiate - používá se ve firemních sítích (propojení s Windows/Active Directory).
- Pro vkládání komentářů se musíte přihlásit