Crimson auth php. HTTP Instalarea protecției pe o pagină folosind MySQL și PHP. Acum să creăm scripturile principale pentru lucrări ulterioare

Chiar ieri am decis să încep să dezvolt un cont personal pentru un site web fără nume. Am avut o întrebare despre aspectul formularului de autorizare; sincer, nu am vrut să creez formularul, să creez sfaturi și, în general, să acord multă atenție formularului. M-am grăbit prostește să caut soluții gata făcute și am văzut destule forme fără gust. M-am gândit să găsesc o componentă gata făcută, o extensie gata făcută, dar în cea mai mare parte m-au dezamăgit. Rătăcind pe forumuri, mi s-a părut interesant să joc cardul HTTP Authentication: Basic. M-am dus să citesc manualul; înainte, nu eram suficient de conștient de această metodă. Atunci au început problemele.

Nu era încotro, așa că am căutat pe web site-uri care să genereze forme, cod și stiluri. Încercările mele de a-mi ușura sarcina au fost în zadar. Soluția este mică, am început să rezolv problema. La un moment dat am încercat să pun împreună o soluție folosind .htaccess și am găsit asta.

RewriteCond %(HTTP:Authorization) ^Basic.* RewriteRule (.*) index.php?authorization=%(HTTP:Authorization)

Din păcate, am probleme cu Joomla, totul este bine în .htaccess, dar aici sunt cu codul meu. După ce mi-am făcut timp pentru a încerca diverse combinații, am fost de acord că nu voi rescrie .htaccess. De la început, codul a fost foarte grosolan, atât de grosolan încât l-am copiat și lipit.

Funcționează grozav, dar scopul meu a fost să implementez autorizarea utilizând cuvinte de cod deja existente care se află în tabel.

Funcționează, se schimbă valorile, se creează sesiunea. Grozav, dar în cazul clicului anulați, valorile Nu le-a păsat că ați anulat, după ce au reîmprospătat pagina, se întorc la locul lor. Am decis că ar trebui să mă ocup de asta prin dezactivare. Am adăugat o linie.

If($res = $db->setQuery($query)->loadAssoc()) ( $session->set("utilizator", $res); ) else ( unset($_SERVER["PHP_AUTH_USER"], $_SERVER ["PHP_AUTH_PW"]); header("WWW-Authenticate: Basic realm="My Realm""); header("HTTP/1.0 401 Neautorizat"); )

Am încercat să fac față acestor variabile, dar mergeam din ce în ce mai adânc în nicăieri. Am încercat și eu să verific existența ședinței, dar în zadar. În plus, aveam nevoie să închei sesiunea, ceea ce, conform membrilor forumului, nu este posibil. Am ajuns la fundul adevărului despre utilizarea unei adrese precum login :pass@locahost/. Grozav, variabilele s-au schimbat $_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"]. Din păcate, aceasta nu a devenit decizia mea finală, pentru că după terminarea sesiunii de timp $_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"] a continuat să performeze. La fel ca după forțarea $session->set(„utilizator”, null). Eram în afara mea de furie, dar știam că nu mă voi ierta dacă îmi permiteam să dau înapoi. Am scris o condiție separată pentru a verifica deconectarea.

If($_SERVER["PHP_AUTH_USER"]=="logout")( $session->set("utilizator", null); antet("Reîmprospătare: 0;URL="); ) if(!isset($_SERVER[ "PHP_AUTH_PW"])) ( header ("WWW-Authenticate: Basic realm="My Realm""); header ("HTTP/1.0 401 Neautorizat"); ) else ( //Dacă este găsit un cuvânt de cod adecvat, creați o sesiune if ($session->get("utilizator") === null) ($db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select("*") ; $query->from("#__beda_users"); $query->where("codeword = ".$query->quote($_SERVER["PHP_AUTH_PW"])); if($res = $db->setQuery ( $interogare)->loadAssoc()) ( $session->set("utilizator", $res); ) else ( unset($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"]); antet(" WWW -Authenticate: Basic realm="My Realm""); header("HTTP/1.0 401 Neautorizat"); ) ) else ( //Am dori să venim aici ) )

Condiția a funcționat, însă, după reîncărcarea paginii, când apare o fereastră care îți cere să intri Nume de utilizatorȘi parola, le-a acceptat, dar după reîmprospătarea paginii, mi-a cerut să introduc din nou parola, să dau clic pe „Anulare”, $_SERVER["PHP_AUTH_USER"] se va deconecta. Voi actualiza valorile și el le va atribui. Și dacă dau clic pe anulare, va returna valorile anterioare. Probleme.

Până la urmă, soluția finală arată așa.

$session = JFactory::getSession(); funcția http_auth($session)( $session->set("utilizator", null); unset($_SERVER["PHP_AUTH_PW"], $_SERVER["PHP_AUTH_USER"]); header("WWW-Authenticate: Basic realm=" Auth""); header("HTTP/1.0 401 Neautorizat"); ) if($_SERVER["PHP_AUTH_USER"]=="logout")( $session->set("utilizator", null); antet("Actualizează : 0;URL="); ) if($session->get("user") === null)( if(!isset($_SERVER["PHP_AUTH_PW"]))( http_auth($session); ) else ( $pw = $_SERVER["PHP_AUTH_PW"]; $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select("*"); $query->din ("#__beda_users"); $query->where("codeword = ".$query->quote($pw)); if($res = $db->setQuery($query)->loadAssoc())( $session->set("utilizator", $res); ) else ( http_auth($session); ) ) ) else ( if(!isset($_SERVER["PHP_AUTH_PW"]))( http_auth($session); ) )

Este posibil să folosiți funcția header() pentru a trimite un mesaj "Autentificare necesara" browser, forțându-l să arate o fereastră pentru introducerea numelui de utilizator și a parolei. Odată ce utilizatorul completează datele de conectare și parola, linkul care conține scriptul PHP va fi apelat din nou cu variabilele predefinite PHP_AUTH_USER , PHP_AUTH_PW și AUTH_TYPE setate la login, parola și, respectiv, tipul de autentificare. Aceste variabile predefinite sunt stocate în matricele $_SERVER și $HTTP_SERVER_VARS. Sunt acceptate ambele tipuri: „Basic” și „Digest” (din PHP 5.1.0). Consultați funcția header() pentru mai multe detalii.

Un exemplu de fragment de script care forțează clientul să se conecteze pentru a vedea pagina:

Exemplul #1 Exemplu de autentificare HTTP de bază

Exemplul #2 Exemplu de autentificare HTTP Digest

Acesta este un exemplu de implementare a unui script simplu de autentificare HTTP Digest. Pentru detalii, consultați » RFC 2617.