Soubor na heslo
Když tohle píšu, zbývá nám do dne zaheslovaných
blogů jedna jediná hodinka. Až to dopíšu, bude to už pravděpodobně
pouhopouhá minutka a právě proto je nejvyšší čas povědět si něco
o ochraně stránek heslem. A protože nemáme času na zbyt, uděláme to
tím nejjednodušším způsobem – přímo na straně webového serveru
v souboru .htaccess. Pokud nemáte na svém
serveru soubor .htacces k dispozici, můžete jít spát. Pokud si naopak
myslíte, že informace, které se zde dočtete by se mohly být pro někoho
užitečné, zkuste mě v komentářích donutit, ať to přepíšu na
rozumnější formou na rozumnější místo.
Konec keců, jdeme na to:
Zaheslování celého adresáře
Zaheslování přístupu k celému adresáři se udělá velmi lehce:
Do souboru .htacces v adresáři, který má být na heslo,
přidejte řádky
AuthType Basic AuthName "Zaheslovaná sekce" AuthUserFile /cesta/k/souboru/.htpasswd Require valid-user
Text u položky AuthName se bude zobrazovat někde v tom
okýnku, co bude chtít po uživateli heslo. Cesta u AuthUserFile
musí být zadána absolutně, protože relativní cesta se bude počítat od
ServerRoot, který se zpravidla nachází někde v
/etc/apache2 a tam si asi soubor nazapíšete. Jinak žádné
dramatické nastavování, takže jedeme dál.
Nastavení hesla
Soubor se jmény a příslušnými zašifrovanými hesly vykouzíme zcela jednoduše příkazem
htpasswd -c soubor jmeno
Bude to po nás chtít dvakrát opsat heslo pro příslušného uživatele a hotovo.
Jako soubor zadáme jméno souboru, kde budou hesla uložená.
(Přesně ten, co jsme zadávali do AuthUserFile. Nejčastěji se
soubor pojmenovává .htpasswd. Pro takto pojmenovaný soubor je
totiž většinou už implicitně nastaveno, že nesmí být zobrazen. Když si
soubor pojmenujete například hesla, tak si jej pak může
kdokoliv, kdo na jeho jméno přijde, zobrazit.
Samozřejmě získat ze zašifrovaného hesla heslo původní není taky úplně
jednoduché, ale o tom si povíme někdy jindy.
Když chceme do souboru přidat ještě nějaké další jméno a heslo, uděláme to příkazem
htpasswd soubor dalsijmeno
Pokud chceme zaheslovat blog se vším všudy, jsme v této chvíli hotovi. Všechny soubory a adresáře daného adresáře teď máme zaheslované a můžeme si užívat.
Zaheslování jednotlivých souborů
Pokud chceme něco více, nastupuje právě teď ta vyšší dívčí škola
úprav .htaccess
Já například nechci mít ani 1.6. na heslo rss kanál, starší články
atd… Jak to udělat? Můžeme specifikovat konkrétní soubor, který chceme
chránit heslem tak, že obklíčíme v souboru .htaccess sekci
věnovanou heslování speciálními značkami <Files> a
</Files>.
Takže když si budu chtít zaheslovat jeden jediný článek, udělám to takhle:
<Files 2007-06-01-den-zaheslovanych-blogu>
AuthType Basic
AuthName "Den zaheslovanych blogu"
AuthUserFile /home/zirafka/blog.zirafka.cz/.htpasswd
Require valid-user
</Files>
za cestou /home/zirafka/blog.zirafka.cz/ nehledejte nic
záhadnějšího, než absolutní cestu k adresáři, kde je uložen
celý web.
V této chvíli už mnozí tuší, že
soubor 2007-06-01-den-zaheslovanych-blogu není skutečným
souborem. A to je na tom právě to krásné. Jako parametr Files
dáváte cestu, kterou se k dané stránce dostává uživatel, nikoliv adresu
realného skriptu, tak jak si ji přeloži mod_rewrite.
Při definování souborů v sekci <Files> můžeme použít i regulární výrazy. Když chci zaheslovat nejen ten jeden clanek, ale třeba i úvodní stránku, udělám to takhle:
<Files ~ "2007-06-01-den-zaheslovanych-blogu|^$">
AuthType Basic
AuthName "Den zaheslovanych blogu"
AuthUserFile /home/zirafka/blog.zirafka.cz/.htpasswd
Require valid-user
</Files>
Vysvětlení: vlnovka znamená, že se bude porovnávat s regulárním
výrazem. Svislou čarou se oddělí jednotlivé podvýrazy, ^$ je
výraz, který pasuje na začátak následovaný koncem. To znamená prázdný
řetězec. Jediný způsob, jak říct, že chcete, aby pravidlo platilo
i v případě, že prostě žádná cesta k souboru zadaná nebude.
Samozřejmě pravidlo, tak, jak je napsané teď, se dá obejít. Kdo vymyslí, jak se dostat k článku bez znalosti heslo, získává uznalé pokývání hlavou.
Největší chyták konfigurace pro vybrané stránky je v tom, že
pokud jste zvyklí nastavovat Apache pomocí <Location>, tak to tady
nebude fungovat, ani kdybyste se na hlavu stavěli. Maximálně najdete error
logu hlášku končící: .htaccess: <Location not allowed here.
Dokumentace je totiž v tomhle fakt vtipná. Zatímco v popisu položek
<Location> a <Directory> se nic nepíše,
u popisu <Files>
se konečně dočtete, že Narozdíl od sekcí <Directory> a
<Location>, sekce <Files> může být použita v souboru
.htaccess. Nalezení této nenápadné větičky do hodině
přemýšlění, jak to udělat jinak, je důvod k otevření
šampaňského.
Chybová stránka
Tak a máme zaheslováno. Funguje to, je to krásné, ale ještě se
podíváme na jednu vychytávku. A tou je chybová stránka, který se objeví,
když návštěvník zadá špatně heslo, nebo dá na přihlašovacím
formuláři „Cancel“. Implicitně je nastavena napříliš přátelsky
psaná stránka v angličtině. I tu si ale můžeme změnit dle svého
přání v souboru .htaccess. Možností je hned několik:
ErrorDocument 401 "Dnes je den zaheslovaných stránek. Pokud se chcete dostat dovnitř, musíte zadat jméno a heslo \"ann\""
vám vypíše místo anglické hlášky tu vaši. Protože je celý text uzavřen u uvozovkách, musela jsem napsat zpětná lomítka před uvozovky, které jsou uvnitř něj, abych zrušila jejich speciální význam.
Další možnost je přesměrovat chybu na konktrétní stránku
ErrorDocument 401 /e401
Takhle to mám udělané zde. Zadaná stránka bude znovu pčechroustané přepisovacími pravidly mod_rewrite. Při přesměrování na stránku taky nesmíme zapomenout, že se bude znovu zjišťovat, jestli není stránka chráněna heslem. Takže pokud si zablokujeme na heslo celý web, nepovede se nám zobrazit chyba ani když se rozkrájíme. Pozor na to!
V předchozích příkladech je „401“ kód chyby, který se generuje, když selže přihlášení. Podobně se dají nahrazovat i jiné chyby. Můžete si to vyzkoušet přímo zde: 404 pro neexistující stránky, 403 pro stránky, kam je zakázán přístup.
Na konec ještě pro úplnost: Všechy ostatní chybové stránky se dají
přesměrovávat na jiný server, dá se tedy zadat jako druhý parametr
ErrorDocument celé URL. Bohužel při tomhle přesměrování se
určitým způsobem čachruje i s chybovými kódy. Výsledkem tedy je, že
přesměrovat chybu 401 se nám nikdy nepovede na vzdálený
server, vždy musí být zadána lokální adresa, tedy musíme si to
zařídít tak, abychom se alespoň k jedné stránce lokálně
dostali.
Ufff… tak to je vše. Planovaný termín vydání článku jsem sice prošvihla o tři hodiny, ale zato jsem se mezitím dozvěděla spoustu zajímavých informací a tak… Takze hurá do heslování a Enjoy nebo tak něco…
Komentáře k článku:
Díky za špičkový návod, bez něj bych se DZB vůbec nemohl zúčastnit. Leda jako čtenář. Znám totiž heslo!
Tak díky za vyčerpávající návod, ale mám pocit že ho vůbec nevyužiju :D Krom toho hesla tedy :)
„Kdo vymyslí, jak se dostat k článku bez znalosti heslo, získává uznalé pokývání hlavou.“
Pokud slovy dostat se k článku myslíš dostat se na úvodní stránku, tak jsem na to přišel… Dokonce to šlo hned prvním způsobem který mě napadl :-)
Teda, teď, když chci vložit komentář, opět mě to heslem obtěžuje, ale náhled je zatím v poho i bez hesla… takže jsem na to snad přišel.
2Lot> Prisel, gratuluju (-:
Ten automaticky vkládaný avatar je kouzelný :-)
super navod, libi:)
Paráda, dík za informace, ještě dneska je využiju, zatím prdím na sessions, zahesluju to takto a do určité doby to bude stačit ..
Ha konečně důvod proč nezaplatit hosting a přejít někam jinam. .htaccess totiž upravovat nemůžu :(
2007–06–01 15:21 Lokutus
http://lokutus.bloguje.cz Já mám bloguje.cz a jsem v pohodě. :-)
2ALL> diky za reakce vsem, komu navod poslouzil. aspon k necemu ten za*** den byl dobrej. (-:
Ahoj, udelal jsem si zabezpeceni pomoci .htaccess a .htpasswd. Vsechno mi funguje dobre, ale kompletni fotogalerii mam v adresari admin. tzn. ze se nahledy nezobrazuji…resp. to po me chce vzdy heslo a jmeno.
Chtel jsem se zeptat, jestli existuji v techto souborech taky nejake vyjimky…
Napr. kdyz nahraju do rootu web robots.txt, tak si presne muzu ridit jake adresare aby to neindexovalo, jake roboti maji zakaz indexovat…a co nemaji indexovat…apod.
Existuje prosim vas taky neco tady v te problematice??
Abych nahral do adresare „admin“ soubory .htaccess a .htpasswd. a nekde nastavil, aby se tyto pravidla treba neaplikovala na podadresar fotogalerie??…(admin/fotogalerie)
proste ne aby jsem urcoval jake soubory/adresare chci zaheslovat, ale abych zahesloval cely obsahly adresar a jen nekde urcil ze treba jeden podadresar bude nadale povoleny pro vsechny
jde to?? diky
Váš komentář: