Bezmocný auth php. Jak mohu použít HTTP Basic Authentication v PHP

Odeslání zprávy „Vyžadováno ověření“ do klientského prohlížeče, což zase způsobí zobrazení dialogového okna pro zadání uživatelského jména a hesla. Poté, co klient zadá své jméno a heslo, bude skript volán znovu, ale s předdefinovanými proměnnými PHP_AUTH_USER, PHP_AUTH_PW a AUTH_TYPE, které obsahují uživatelské jméno, heslo a typ autentizace. Tyto proměnné lze nalézt v poli $_SERVER a $HTTP_SERVER_VARS. V současné době je podporována pouze autentizace „Basic“. Můžete se také podívat na více podrobný popis funkcí záhlaví() .

Příklad fragmentu skriptu, který nutí klienta, aby se přihlásil k zobrazení stránky:

Příklad ověření HTTP

if (!isset($_SERVER [ "PHP_AUTH_USER" ])) (
záhlaví( "WWW-Authenticate: Basic realm="My Realm"");

echo "Text odeslán, když
pokud uživatel klikl na tlačítko Zrušit"
;
výstup;
) jinak (
echo
"

Dobrý den ($_SERVER["PHP_AUTH_USER"]).

" ;
echo "

Zadali jste své heslo ($_SERVER["PHP_AUTH_PW"]).

"
;
}
?>

Poznámka ke kompatibilitě: Buďte obzvláště opatrní při zadávání HTTP hlaviček. Pro zajištění maximální kompatibility s největší počet různé klienty, slovo "Základní" musí být napsáno s velká písmena"B", oblast (říše) musí být uzavřena ve dvojitých (nikoli jednoduchých!) uvozovkách a před kódem musí být právě jedna mezera 401 v názvu HTTP/1.0 401 .

Místo prostého zobrazení proměnných PHP_AUTH_USER a PHP_AUTH_PW na obrazovce možná budete muset zkontrolovat, zda jsou správné. Chcete-li to provést, použijte žádost o databáze nebo hledání uživatele v souboru dbm.

Můžete pozorovat rysy díla Internetový prohlížeč Badatel. Na parametry přenášených hlaviček je velmi vybíravý. Zadání názvu WWW-ověření před odesláním stavu HTTP/1.0 401 je malý trik.

Od PHP 4.3.0 se proměnné PHP_AUTH nenastavují, aby někdo nemohl napsat skript, který odhalí heslo pro stránku, která používá externí ověřování. tuto stránku používá externí ověřování a je nastaven na zabezpečený režim. Proměnnou REMOTE_USER však lze použít k ověření externě ověřeného uživatele. Vždy tedy můžete použít proměnnou $_SERVER["REMOTE_USER"].

Poznámka: PHP používá direktivu AuthType k označení, zda se používá externí autentizace nebo ne.

Je třeba poznamenat, že vše výše uvedené nezabrání krádeži hesel ke stránkám, které vyžadují autorizaci od někoho, kdo neoprávněně ovládá stránky umístěné na stejném serveru.

Jak Netscape Navigator, tak Internet Explorer po přijetí ze serveru vymažte mezipaměť ověřování aktuálního okna pro danou oblast (sféru). To lze použít k implementaci nucený odchod uživatele a znovu zobrazí dialogové okno pro zadání uživatelského jména a hesla. Někteří vývojáři to používají k časovému omezení přihlášení nebo k poskytnutí tlačítka pro odhlášení.

Příklad HTTP autentizace s vynuceným vstupem nový pár přihlašovací jméno/heslo

function authenticate() (
záhlaví( "WWW-Authenticate: Basic realm="Test Authentication System"");
header("HTTP/1.0 401 Unauthorized");
echo "Abyste získali přístup ke zdroji, musíte zadat správné uživatelské jméno a heslo \n";
výstup;
}

If (!isset($_SERVER [ "PHP_AUTH_USER" ]) ||
($_POST [ "SeenBefore" ] == 1 && $_POST [ "OldAuth" ] == $_SERVER [ "PHP_AUTH_USER" ])) (
ověřit ();
}
jiný(
echo
"

Vítejte: ($_SERVER["PHP_AUTH_USER"])
" ;
echo "Předchozí přihlášení: ($_REQUEST["OldAuth"])";
echo "

\n";
echo "\n";
echo "\n";
echo "\n";
echo"

\n" ;
}
?>

Toto chování není řízeno základními autentizačními standardy HTTP, takže byste na něm neměli záviset. Testy ukázaly, že prohlížeč Lynx nevymaže autorizační mezipaměť při příjmu stavu 401 ze serveru a postupným kliknutím na „Zpět“ a poté na „Vpřed“ je možné takovou stránku otevřít za předpokladu, že požadovaná autorizace atributy se nezměnily. Uživatel však může stisknutím klávesy "_" vymazat mezipaměť ověřování.

Je třeba také poznamenat, že dříve verze PHP 4.3.3, HTTP autentizace nefungovala na běžících serverech spravované společností Microsoft IIS, pokud byl PHP nainstalován jako modul CGI kvůli některým omezením IIS. Aby bylo dosaženo správné fungování v PHP 4.3.3+ byste měli upravit nastavení konfigurace Služba IIS se nazývá „Zabezpečení adresáře“. Klikněte na nápis „Upravit“ a nastavte možnost „Anonymní přístup“, všechna ostatní pole by měla zůstat nezaškrtnutá.

Další omezení, pokud používáte IIS přes ISAPI: proměnné PHP_AUTH_* nejsou definovány, ale zároveň je k dispozici proměnná HTTP_AUTHORIZATION. Příklad kódu, který můžete použít: list($user, $pw) = explode(":", base64_decode(substr($_SERVER["HTTP_AUTHORIZATION"], 6)));

Poznámka k IIS:: Aby ověřování HTTP fungovalo správně ve službě IIS, v Konfigurace PHP Volba cgi.rfc2616_headers musí být nastavena na 0 (výchozí hodnota).

Pozor: V případě použití chráněného režimu bude UID aktuálního skriptu přidáno do sféry části hlavičky WWW-Authenticate.



<<< Назад Obsah Vpřed >>>
Pokud máte nějaké další otázky nebo vám něco není jasné - vítejte u nás

Někdy je potřeba zavřít neoprávněný přístup PHP stránku, pokud vytváříte uzavřenou oblast webu. Může to být nějaký druh skryté informace pro vaše klienty nebo návštěvníky webu nějaké administrační rozhraní pro vás atd. Můžete přijít na stovky různé úkoly vyžadující omezení přístupu.

Takovou stránku můžete zavřít několika doplňkovými způsoby:

  1. Ochrana heslem (login/heslo) pomocí proměnných $_SERVER["PHP_AUTH_USER"] A $_SERVER["PHP_AUTH_PW"].
  2. Ochrana od IP adresa klienta pomocí proměnné $_SERVER["REMOTE_ADDR"].
  3. Ochrana od MAC adresy v lokálních sítích (kromě ochrany pomocí IP).

Podívejme se nejprve na první metodu, která je hlavní. Umožňuje zablokovat přístup na stránku pomocí přihlašovacího jména a hesla, takže přístup mohou získat pouze lidé kteří znají přihlášení a heslo. Kromě toho mohou být rozděleny podle tohoto kritéria a podle toho vydávány různé informace pro všechny. Implementováno vydáním speciálních polí v záhlaví protokolu HTTP. Vytvořme funkci auth_send():

" ,"

Chyba ověření

" ,"

Chcete-li získat přihlašovací jméno a heslo, kontaktujte správce.

" ","; ukončení; ); ?>

Tato funkce informuje prohlížeč, že přístup vyžaduje autorizaci pomocí přihlašovacího jména a hesla. A také zobrazí stránku v HTML pro uživatele.

" ,"

Vítejte!

" ,"

Jste přihlášeni pomocí přihlašovacího jména ",$auth_user," a hesla ",$auth_pass,".

" ,"

"; ?>

Kód pro ověření přihlašovacího jména a hesla není příliš složitý v tomto případě, protože je realizován pro jednu osobu. Provozní logika je jednoduchá, pokud neexistuje žádná proměnná $_SERVER["PHP_AUTH_USER"] A $_SERVER["PHP_AUTH_PW"] nebo jejich hodnoty neodpovídají požadovaným, pak zavolejte funkci auth_send(). Nezapomeňte, že na konci zavolá výstup, takže provádění programu se zastaví.

Další úroveň ochrany je realizována filtrováním IP adresy připojujícího se klienta. Samozřejmě, na internetu, mnoho poskytovatelů problém IP dočasné adresy a tato ochrana je k ničemu, ale kdyby mluvíme o tom o podnikových lokálních sítích tuto kontrolu poskytne dodatečnou ochranu.

Vaše IP nebyla nalezena!!!"; exit; ); ?>

Tady v řadě $allowed_ips označeny oddělenými mezerami IP adresy, na které je povolen přístup. Dále získáme pole pomocí explodovat() a vyhledejte adresu klienta z $_SERVER["REMOTE_ADDR"]. Použil jsem funkci k vyhledávání array_search(), protože je nepravděpodobné, že jeho kód implementovaný v C bude fungovat poněkud rychleji, než do kterého můžeme zapisovat PHP pomocí smyček pro nebo foreach. Ale rychlost není to hlavní :)

A posledním krokem ochrany je ověření MAC adresy. Je klasifikován jako paranoidní a měl by být použit, pokud přistupujete z místní síť a data, která chráníte, jsou opravdu velmi důležitá. Tuto kontrolu jsem zatím implementoval pouze na systému Linux, kvůli relativní jednoduchosti implementace. Ale můžete to zkusit implementovat pro jakoukoli jinou platformu. Napíšeme funkci:

Jak již uživatelé Linuxu pochopili, je založen na ARP systémovou tabulku, ke které lze přistupovat pomocí souboru /proc/net/arp. Funkce hledá požadované řetězce IP adresu a vrátí ji MAC adresa:

Vaše IP=192.168.10.15 a MAC=00:04:31:E4:F8:37

V systému Windows Možná existuje také několik způsobů, jak se dostat MAC jednodušší, ale z těch, které skutečně fungují, je tento závěr ARP systémové tabulky s příkazem:

C:\WINDOWS\>arp -a Rozhraní: 192.168.10.15 na rozhraní 0x1000003 IP adresa Fyzická adresa Typ 192.168.10.1 00-50-22-b0-6a-aa dynamický 192.168.10.2 00-0f-38-68-e9-e8 dynamický 192.168.10.3 00-04-61-9e-150609 dynamický -0f-38-6a-b1-18 dynamický

Ochranu založenou na této adrese si můžete implementovat sami, pokud ji opravdu potřebujete :) Ale pamatujte si, že pokud máte v síti nespravované zařízení bez možnosti vazby MAC adresy na port, tato ochrana nemusí fungovat, protože všechny vaše identifikační údaje používané k ochraně (login, heslo, IP a MAC adresa) mohou být zfalšovány.



5 odpovědí

Jak PHP funguje? Pokud se to stane přes Apache mod_cgi, obávám se, že nebudete moci získat autentizační informace. Apache jej nepředá aplikacím CGI, pokud jej nezkompilujete s příznakem SECURITY_HOLE_PASS_AUTHORIZATION. (Zda se skutečně jedná o bezpečnostní díru, nebo ne, závisí na tom, zda ostatní uživatelé na vašem serveru mají nižší nebo vyšší oprávnění než uživatelé na vašem webu.)

Pokud se jedná o IIS CGI, měli byste se ujistit, že konfigurujete pouze " Anonymní přístup do adresáře" nebo IIS se pokusí přihlásit a ověřit přihlašovací údaje.

Echo"

Dobrý den ($_SERVER["PHP_AUTH_USER"]).

";

Bezpečnostní díra ve vkládání HTML (no, pokud to fungovalo). Použijte htmlspecialchars() . Páni, toto je stránka PHP doc plná velmi pochybných rad a kódu.

Můžete se také podívat na $_SERVER["HTTP_AUTHORIZATION"] , i když mám podezření, že se jedná o problém s mod_cgi, v takovém případě nebude přítomna žádná z proměnných a budete se muset uchýlit k názvu založenému cookies. Nebo přejděte k hostiteli s více moderní přístup na PHP hosting, jako je FastCGI nebo mod_php.

v .htaccess přidejte toto:

RewriteEngine na RewriteRule .* -

a na začátek skriptu přidejte toto:

List($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"]) = explode(":" , base64_decode(substr($_SERVER["HTTP_AUTHORIZATION"], 6)));

Zkuste toto:

\n"); print(" \n"); print(" Výpis 24-1\n"); print("\n"); print(" \n"); ) funkce endPage() ( print("

\n"); print("\n"); ) /* ** test na uživatelské jméno/heslo */ if((isset($_SERVER["PHP_AUTH_USER"]) && ($_SERVER["PHP_AUTH_USER"] == "leon")) AND (isset( $_SERVER["PHP_AUTH_PW"]) && ($_SERVER["PHP_AUTH_PW"] == "tajné"))) ( startPage(); print("Přihlásili jste se úspěšně!
\n"); endPage(); ) else ( //Odeslat hlavičky, aby prohlížeč požadoval //uživatelské jméno a heslo z hlavičky uživatele("WWW-Authenticate: " . "Basic realm=\"Leon Protected Area\"" ); header("HTTP/1.0 401 Unauthorized" //Zobrazí text selhání, který prohlížeče obvykle //zobrazí až po několika neúspěšných pokusech print("Tato stránka je chráněna HTTP " . "Autentizace.
\nPoužít leon" ." pro uživatelské jméno a tajný" ." pro heslo.
\n"); ) ?>

Ujistěte se, že jste přepsali proměnné $_SERVER['PHP_AUTH_USER'] a $_SERVER['PHP_AUTH_PW'] do bodu, kdy se pokoušíte získat přístup k oběma proměnným.

Pokud výše uvedené není tento případ, použijte chek, pokud používáte php jako cgi mod nebo ne. Pokud používáte php jako cgi mod, pak ve většině případů nezískáte $_SERVER['PHP_AUTH_USER'] a $_SERVER['PHP_AUTH_PW'], protože v obecný případ nebudeme kompilovat apache s možností SECURITY_HOLE_PASS_AUTHORIZATION Takže pokud chcete získat obě proměnné, překompilujte apache s možností SECURITY_HOLE_PASS_AUTHORIZATION nebo můžete použít přístup .htaccess popsaný v

Zavedení

Toto je výukový program, který by vám měl ukázat základy ochrany vašich stránek na internetu pomocí HTTP ověřování. Namísto tradiční metody .htaccess ( server Apache), které budeme používat k ukládání uživatelských dat a jejich hesel v MySQL. Pokusím se co nejvíce vysvětlit, co je podle mého názoru potřeba, aby se začátečník naučil MySQL a PHP. V zásadě na základě tohoto programu můžete použít jakýkoli DBMS (systém správy databáze). Proč je tato metoda zajímavá? No, třeba jen proto, že pokud používáte databázi, můžete klidně povolit jen určité skupině (osobě) mít určitá práva pro přístup k té či oné informaci. Pokud používáte tradiční metodu .htaccess Apache, musíte ručně přidat uživatele a heslo do souboru s hesly. A výhoda tato metoda, no....podívejte se sami.

Software což je nutné:

· *platforma nix (Linux, Unix, *BSD) · PHP 3.0.x nebo PHP 4.x · MySQL (jakákoli verze)

Krok číslo jedna

Pokračujte, první věc, kterou musíme zjistit, je, že chceme uživatelům, kteří jsou v naší databázi, umožnit přístup na zadanou stránku? A jak to uděláme? (mnoha lidem se to moc nelíbí, ale musíme si zvyknout, že si před programováním vezmeme papír a zapíšeme si všechny požadavky, které chceme z programu dostat, z dlouhodobého hlediska ušetříte hodiny nebo možná dny pro provádění změn v kódu (cca))

Zkontrolujte, zda je uživatel již ověřen.

Pokud ne, odešlete do prohlížeče zprávu se zprávou a přístupovým formulářem.

Pokud uživatel klikne na tlačítko zrušení, neumožněte mu přístup a přesměrujte ho na... 403: Přístup odepřen, nebo ukažte (cookie J) jednoduchou zprávu.

Pokud uživatel vyplnil kombinaci uživatelského jména a hesla, zkontrolujte je MySQL databáze data a ujistěte se, že jsou správné, pokud je výsledek pozitivní, povolte přístup.

Pokud všemu nerozumíte, nebojte se, později (nebo možná nikdy) se to vyjasní!

Krok 2 – Vytvořte naši databázi

Chceme, aby databáze ukládala přihlašovací jméno a heslo našich uživatelů. Požadovaná pole lze snadno přidat stávající základna data, ale budeme zatím předpokládat, že nepřidáváte do existující databáze, ale vytváříte novou. Následující kód je popis, jak to provést. Předpoklad: pokud máte na počítači Apache, můžete začít ihned :)

mysql> vytvořit členy databáze;
mysql> vytvořit tabulku uživatelé (
uživatelské jméno varchar(25) NOT NULL,
heslo varchar(15) NOT NULL,
primární klíč (uživatelské jméno),
jedinečné uživatelské jméno (uživatelské jméno)
);

Nyní máme databázi pro ukládání uživatelů, která předpokládá, že uživatelské jméno má až 25 znaků a hesla až 15 znaků. (pokud vám z nějakého důvodu nevyhovuje, nastavte si jej, jak uznáte za vhodné) Uživatelské jméno musí mít hodnotu " primární klíč“ a být „jedinečný“, protože nechceme 2 resp více lidí měl stejné uživatelské jméno.

Upozorňujeme, že uživatelská jména budou citlivá na další případ, uživatel "Vasya" bude identifikován jinak než uživatel "vasya", jinými slovy, rozlišují se malá a velká písmena. Nyní přidáme testovacího uživatele do MySQL, abychom mohli jeho data použít k testům, až budeme vytvářet PHP stránku.

mysql> grant select na members.users
na adresu httpuser@localhost
identifikované pomocí "Moje heslo";

Je to proto, že když chceme zkontrolovat uživatele a heslo osoby registrované v naší databázi, použijeme uživatele „httpuser“ s heslem „MyPassword“. Nakonec musíme přidat uživatelské jméno a heslo osoby, které chceme povolit přístup.

mysql> insert into users value("john_doe", "eod_nhoj");

Záměrně jsem data v programu nešifroval, abych je v případě ztráty hesla nemusel dešifrovat a zjednodušil na minimum :)) To je vše, s MySQL jsme skončili, teď se přesuneme na!

Krok tři – napište PHP kód

Než začneme, krátce popíšu, co bude paga dělat.

01 02
Když se dostanete na zabezpečenou stránku, server odešle požadavek a zobrazí stránku pro zadání vašeho jména a hesla. Pokud kliknete na tlačítko Storno nebo zadáte nesprávná data, server vám odešle (401 Neautorizovaná hlavička a odepře přístup.) - takto výzva obvykle přeloží řádek (401 Neautorizovaná hlavička a odepře přístup) I will' nevysvětluji, podle mého názoru neexistuje lepší způsob, jak to říct!!! V případě, že vše zadáte správně, ukáže se, že jednoduše získáte přístup (to je to, co je třeba dokázat, teď je ta zábavná část, toto je stejný kód). Píše se záměrně s čísly řádků, za kódem (níže) jsou uvedeny vysvětlivky k řádkům.
03 funkce access_denied() (
05 }
06
04 echo "401 Unauthorized: Zadaná kombinace uživatelského jména / hesla byla neplatná.n";
07 funkce auth_headers($title) (
08 Header("WWW-Authenticate: Basic realm="$title"");
10 }
11
09 Záhlaví("HTTP/1.0 401 neoprávněné");
12 if(!isset($PHP_AUTH_USER)) (
13 auth_headers("Moje chráněná webová stránka");
14 access_denied();
16 }
15 výjezd;
18
17 jinak (
19 $hostname = "localhost";
20 $username = "httpuživatel";
22 $database = "členové";
23
24 $query = "vyberte uživatelské jméno, heslo z uživatelů, kde username="$PHP_AUTH_USER" a heslo="$PHP_AUTH_PW"";
25 $link = mysql_connect($localhost, $username, $heslo) or die("Nelze se připojit k databázovému serveru");
26
27 if (mysql_num_rows(mysql_db_query($database, $query)) == 0) (
28 auth_headers("Moje chráněná webová stránka");
29 access_denied();
30 výjezd;
31 }
32
33 mysql_close($odkaz);
34 }
35 ?>

V tom je ten trik, funguje to, můžete to používat kde chcete, kdy chcete a jak chcete, měňte to, vylepšujte, pokud se vám podaří kód při ukládání zredukovat na dva řádky funkčnost program, tak mi ho určitě pošlete!!!

V této části rychle prozkoumáme každý řádek, abychom předešli prudkým výměnám otázek v komentářích k tomuto článku.

Řádek 3:
Tato funkce zobrazí zprávu, pokud „zlý uživatel“ trvale zadává nesprávná data. Udělal jsem z toho funkci, protože ji používáme dvakrát, a to jen pro zkrácení zdrojového kódu.

Řádek 7:
Protože tuto hlavičku používáme také dvakrát, udělal jsem z toho také funkci.

Řádek 8:
Předejte prohlížeči záhlaví, které donutí uživatele zadat své uživatelské jméno a heslo. Proměnná $title se zobrazí v přihlašovacím dialogu.

Řádek 9:
Při prvním požadavku se zobrazí záhlaví, při opětovném zrušení se zobrazí zpráva, že přístup je odepřen.

Řádek 12:
$PHP_AUTH_USER je smyčka, která zobrazuje zprávu, že stránka je chráněna a vypadněte!

Řádek 19–23:
To je něco, co nikdo kromě vás nezná, tedy prostředky pro připojení k databázi, název hostitele, názvy databází, uživatelské jméno a heslo. (pro připojení k MySQL)

Řádek 24:
Dotaz MySQL, který vrací uživatelská jména a hesla.

Řádek 25:
Navažte spojení s MySQL a zobrazte prokletí, pokud není spojení!!! (to znamená, že máte něco špatně na řádcích 19-23, nebo tam není MySQL vůbec)

Řádek 27:
Zpracovat $ dotaz. Pokud vrátí - 0, znamená to, že byla zadána neplatná kombinace.

Řádek 33:
Odpojte připojení k MySQL.

Doporučil bych uložit PHP kód do souboru s názvem user_auth.php, user_auth.php3, nebo... (zde je vaše představivost na toto téma) Předpokládejme, že jste tento kód uložili do souboru user_auth.php. Kdykoli náhle chceme chránit naši přísně tajnou stránku v síti, jednoduše tento soubor zahrneme. Jediná věc, na kterou bych vás chtěl upozornit, je, že jej logicky musíte připojit úplně nahoře na vaší chráněné PHP stránce, doporučuji vám napsat do řádku číslo 1 vašich stránek následující:

kde "user_auth.php" je název souboru, pod kterým jste kód uložili.

Vaše otázka - nepoužívám MySQL, co mám dělat?

Poraďte se s administrátorem vašeho serveru, pokud se ukáže být laskavý, pak vám pomůže, pro něj je to 5 minut práce, pokud ten zlý nepomůže, přejděte na fórum související s databází, kterou jste používat a volat o pomoc! Nebo pokud se považujete za normálního programátora, pak... tento kód nebudete vůbec potřebovat a budete vytvářet „relace“, šifrovat pomocí pomocí PGP obecně to překrucujte, jako byste vytvářeli ochranu pro amazon.com

Není neobvyklé najít ověření na webových stránkách implementovaných pomocí konfigurační soubor .htaccess. Jednoduchost nastavení a spolehlivost jsou hlavními výhodami tohoto typu autorizace.

Soubor direktiv. htaccess.

AuthName "Text je zobrazen v okně autorizace" AuthType Basic AuthUserFile Úplná cesta/.htpasswd vyžadují platného uživatele

AuthName- text obsažený v této direktivě se zobrazí v okně pro zadání hesla. Musí být napsán na jednom řádku a uzavřen do dvojitých uvozovek.

AuthType- typy autentizace: Základní nebo Strávit. Doporučuje se použít první, protože druhý není podporován všemi prohlížeči.

AuthUserFile- úplná cesta k souboru s přihlašovacími údaji a hesly pro ověření uživatele. Hesla jsou obsažena v zašifrované podobě. Doporučené skladování tento soubor ve složce, která není uživatelům přístupná, je to nutné, aby se zabránilo krádeži hesla.

vyžadovat platného uživatele- Direktiva určuje, že k URL mají přístup pouze uživatelé, kteří se úspěšně autentizovali.

Kde ji lze implementovat?

Autorizaci lze připojit k libovolnému adresáři vašeho webu, ať už je to kořenový adresář nebo složka v hierarchii. Velmi často můžete najít ochranu pomocí .htaccess, pro vstup do „Ovládacího panelu“ webu. Pomocí této technologie můžete také omezit přístup ke složkám, kde se nacházejí důvěrná data.

Vytvořme tedy adresář s názvem CMS(jméno si můžete vybrat libovolné). Bude obsahovat: konfigurační soubor.htaccess A soubor s hesly.htpasswd., stejně jako všechny ostatní soubory a složky, ke kterým chcete mít omezený přístup.

Nastavení souboru .htaccess

Vytvořte soubor pomocí běžného poznámkového bloku .htaccess(období před jménem je povinné), ve složce CMS jej vyplňte výše uvedenými směrnicemi. K vyplnění směrnice AuthUserFile musí být specifikováno plná cesta do souboru s hesly .htpasswd, který se nachází ve stejné složce.

Jak zjistit úplnou cestu k souboru?

Úplnou cestu k souboru lze najít pomocí funkce phpinfo(). Výsledkem jeho provedení bude podrobná tabulka nastavení webového serveru.

Vytvořte soubor info.php s obsahem, v adresáři CMS. Spusťte soubor prostřednictvím prohlížeče. Ve výsledné tabulce najděte proměnnou SCRIPT_FILENAME, který obsahuje úplnou cestu k souboru.

Po obdržení potřebných údajů nezapomeňte smazat soubor info.php, aby informace o nastavení webového serveru nebyly veřejně dostupné.

Obr 1. Úplná cesta k souboru. Výsledek spuštění funkce phpinfo().

Zkopírujte výslednou cestu, nahradit obsahuje název souboru, info.php na .htpasswd a vložte jej do směrnice AuthUserFile.

AuthUserFile Z:/home/localhost/www/scripts/CMS/.htpasswd

Tedy, hotový soubor .htaccess, bude obsahovat následující směrnice:

AuthName "Authentication" AuthType Basic AuthUserFile Z:/home/localhost/www/scripts/CMS/.htpasswd vyžadují platného uživatele

Vytvoření souboru. htpasswd

Pojďme k vytvoření souboru s hesly . htpasswd, k tomu použijeme utilitu htpasswd.exe. Musíte s tím pracovat příkazový řádek. Níže jsou uvedeny příklady práce s nástrojem:

. Vytvořit nový soubor s hesly, přiřaďte mu jméno.htpasswd, nastavte šifrování hesla pomocí algoritmu MD5 a přidejte k němu přihlašovací jméno správce:

Htpasswd -cm .htpasswd správce

-cm- obslužné klíče:

-S- označuje, že je třeba vytvořit nový soubor

-m-šifruje hesla pomocí algoritmu MD5

.htpasswd- název souboru s hesly

admin- přihlášení

Rýže. 2. Vytvořte nový soubor s hesly pomocí nástroje htpasswd.exe

. Přidat k již existující soubor s novými uživatelskými hesly. Chcete-li to provést, musíte v příkazu zadat jeden klíč -m, vynechat klíč -c.

Htpasswd -m Uživatel .htpasswd

Rýže. 3. Přidání nového uživatele do existujícího souboru s hesly pomocí nástroje htpasswd.exe.

. Chcete-li změnit heslo pro stávajícího uživatele, použijte stejný příkaz jako při přidávání.

Htpasswd -m Uživatel .htpasswd

Obr 4. Změna hesla pro stávajícího uživatele pomocí utility htpasswd.exe.

Po vytvoření souboru s hesly jej umístěte do adresáře, jehož cesta je uvedena v direktivě AuthUserFile soubor .htaccess. (v našem případě do složky CMS)

Přístup k autorizačním datům prostřednictvím proměnných pole $_SERVER

Po úspěšné autentizaci se přihlašovací jméno a heslo zadané uživatelem umístí do superglobálního pole $_SERVER, které lze zpracovat pomocí pomocí php skript.

  • $_SERVER["PHP_AUTH_USER"]- přihlášení;
  • $_SERVER["PHP_AUTH_PW"]- heslo;

Výsledek

Pokud nyní ve svém prohlížeči přejdete do složky, kde se nachází konfigurační soubor .htaccess, zobrazí se vyskakovací okno, do kterého musíte zadat své přihlašovací jméno a heslo. Pokud je autorizace úspěšná, otevře se přístup ke složce.

Rýže. 5. Okno ověřování.

Pojďme si to shrnout:

  • Pomocí konfiguračního souboru .htaccess, můžete omezit přístup k libovolnému adresáři na vašem webu;
  • Chcete-li vytvořit soubor .htaccess používejte běžný poznámkový blok;
  • Chcete-li zadat úplnou cestu k souboru s hesly .htpasswd, ve směrnici AuthUserFile soubor .htaccess, použijte funkci phpinfo();
  • Chcete-li vytvořit soubor s hesly. htpasswd, použijte nástroj htpasswd.exe;
  • Umístěte soubor s hesly .htpasswd, ve složce, do které žádný přístup pro uživatele zabránit krádeži hesla;
  • Přístup k autorizačním údajům provádí prostřednictvím proměnných superglobální pole$_SERVER: $_SERVER["PHP_AUTH_USER"] , $_SERVER["PHP_AUTH_PW"];



Nahoru