HTTP autentizace

5. 1. 2026

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-user

Soubor .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.6G9

Soubor .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 uzivatel2

HTTP 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 uzivatel

BCrypt (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 uzivatel

Další 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).
Jiří Wolf - Php programátor, webdesign

Jiří Wolf

Jsem webový vývojář a programátor. Vytvářím webové stránky a aplikace a využívám k tomu převážně CMS Drupal pro jeho stabilitu a bezpečnost. Dělám weby které jsou snadno dostupné pro zákazníky a prodávají.

Pokud by jste chtěli nové webové stránky a nebo redesign současných, zavolejte mi na mobil: +420 608 23 33 34, nebo mi pošlete zprávu na email: jiri.wolf@jw.cz.

Můžete taky využít tento formulář