Tagasivõtmatu kasutajateave php. Lihtne RESTful teenus kohalikus PHP-s. Mida ta teeb

Oma veebiarenduse praktikas puutusin väga sageli kokku olukordadega, kus kliendid seavad kindla eesmärgi, nimelt administraatori paneeli osade jaotuse teatud kasutajate ligipääsetavuse osas. Veelgi enam, selle mooduli väljatöötamine viidi läbi laiendatava süsteemi kontekstis, see tähendab fikseerimata arvu moodulitega, millele juurdepääs on korraldatud, ja vastavalt piiramatu arvu süsteemikasutajatega.

Noh, see teema ise on üsna raske ja nõuab natuke aega probleemi analüüsimiseks ja sõnastamiseks.

Selle artikli kontekstis töötame välja mõne abstraktse infosüsteemi kontekstis, millel on oma infrastruktuur ja arhitektuur, samas kui see süsteem annab kasutajale võimaluse laiendada funktsionaalsust, st installida uusi mooduleid ja vastavalt sellele seadistada juurdepääsu. õigused neile sellele või teisele süsteemiadministraatorina registreeritud kasutajale.

Arutleme moodulsüsteemi arhitektuuri üle meie valitud pseudosüsteemil algusest peale.

Kõik moodulid on esitatud põhidokumendiga (indeksifailiga) ühendatud lisade kujul. Pistikprogrammi taotlus pärineb päringustringist QUERY_STRING ja pistikprogrammi nimi edastatakse akti argumendina. Mingil hetkel failiindeksis see parameeter hangitakse ja töödeldakse. Pärast seda, kui kasutajal on lugemiskontekstis moodulile ligipääsuks piisavad õigused, kontrollitakse päringureal määratud mooduli olemasolu ja kui see on olemas, siis ühendatakse see registrifailiga.

Mainisin "lugemiskonteksti" põhjusega, kuna meie süsteem eeldab süsteemiga töötamiseks kahe konteksti olemasolu, nimelt lugemist ja kirjutamist. Sel juhul tähendab lugemine otsest juurdepääsu moodulile ja selle nendele osadele, mis ei hõlma muudatusi andmebaasi andmestruktuuris. Salvestamise all peame silmas otsest muudatuste tegemist andmebaasis salvestatud teabes.

Selle mehhanismi rakendamiseks kontrollime päringustringi muutuja "do" väärtust, mida töödeldakse moodulis endas ja mis kannab teavet selle kohta, millisele mooduli jaotisele tuleb kasutajale juurdepääs anda.

Do väärtus fikseeritakse, see muutuja võtab järgmised väärtused:

  • peamine – mooduli põhiosa (saadaval lugemiskontekstis)
  • config - mooduli konfiguratsiooni sektsioon (saadaval salvestamise kontekstis)
  • loo - tehke mõned toimingud teabe lisamiseks andmebaasi (saadaval kirje kontekstis)
  • Kustuta - juurdepääs jaotisele, mis annab võimaluse teatud mooduli kontekstis teatud teavet kustutada (saadaval kirje kontekstis)
  • redigeerimine – juurdepääs teabe muutmiseks mooduli kontekstis (saadaval postituse kontekstis)

Üldiselt saab seda loendit suurendada, kuid kõik sõltub ainult projekti ulatusest ja selle funktsionaalsetest vajadustest.

Nüüd otse moodulitest. Lisaks teatud mooduli füüsilisele olemasolule projekti failisüsteemi kontekstis tuleb moodul lisada ka spetsiaalsesse andmebaasitabelisse, mis hakkab sisaldama infot kõigi süsteemis olemasolevate moodulite kohta. Andmete lisamine ja muutmine selles tabelis toimub tavaliselt otse moodulite kontekstis, st nende süsteemi installimise ajal. See on aga juba süvenemine laiendatavate süsteemide vaatamise põhimõtetesse, millest räägime mõni teine ​​kord ning seetõttu piirdume käsitsi uuendamise ja moodulite andmete lisamisega.

Seega sisaldab süsteemimooduli kirje järgmist teavet: mooduli nime ingliskeelne identifikaator, mis on identne keskkonnamuutuja GET väärtusega - act (moodulit küsitakse selle kohta otse), Mooduli venekeelne identifikaator, mida kasutatakse moodulite loendis.

Lisaks moodulitele on meil veel kaks tabelit, nimelt tabel, kuhu salvestatakse juurdepääsuõiguste profiilide andmed ja tabel, mis sisaldab teavet otse kasutajate kohta.

Turvaprofiilitabel koosneb ainult kolmest väljast - profiili identifikaator (kirje identifikaatori numbriline väärtus), tekstimooduli identifikaator (kasutajatele) ning spetsiaalselt loodud tekstisildist, mis sisaldab teavet kasutajaõiguste kohta kontekstis. iga mooduli kohta.

Noh, vaatame seda konkreetset struktuuri. See on järgmine: [module_indefier: + \: + \;] *

See tähendab, et seal on paaride loend: mooduli nimi ":" lugemisõigused "," kirjutamisõigused ";". Sel juhul värskendatakse seda silti, kui kasutaja süsteemi juurdepääsuõigusi muudetakse. Kui süsteemi ilmub teave mooduli kohta, mida see silt ei sisalda, peate lihtsalt läbi viima redigeerimisprotseduuri ja andmed salvestatakse automaatselt.

Nüüd tuleb vaid vaadata vaid ühe andmebaasitabeli ülesehitust ning asuda saabki realiseerima algoritmilise osa ehk süsteemi kasutajate infoga tabelit, sest neile juurdepääsuõiguste määramine on meie põhiülesanne.

Ma ei lisa sellele midagi ekstra, vaid ainult seda, mida selle artikli teema kontekstis kasutatakse. Kasutajate tabel sisaldab järgmisi välju: kasutajatunnus (numbriline loendur), sisselogimine, parool (algse parooli räsi), kasutaja turvaprofiil (kasutajarühma ID, süsteemis olevate õiguste suhtes) ja kõik. Mulle tundub, et see teave on teile ja mulle täiesti piisav ülesande täitmiseks ja ma annan võimaluse kõik muud lisandmoodulid ise teha.

Niisiis arutasime struktuuri ja loodan, et kõigil on juba ettekujutus sellest, kuidas me artikli teemas seatud ülesande ellu viime. Nüüd annan ülalkirjeldatud tabelitele SQL-i abikoodi, misjärel asun koheselt edasi kasutaja juurdepääsuõiguste kontrollimise algoritmi juurutamise, samuti juurdepääsuprofiilide loomise ja muutmise juurde. Pärast iga üksikut moodulit arutame üksikasjalikult kõiki lugejatel tekkida võivaid küsimusi.

moodulite tabel:

CREATE TABLE `moodulid` (`id` bigint(20) NOT NULL auto_increment, `indefier` teksti sortimine utf8_unicode_ci NOT NULL, `title` teksti sortimine utf8_unicode_ci NOT NULL, PRIMARY KEY (`id=C)yISAMENT=1 AUTOMAATNE_MÄÄR. CHARSET=utf8 COLLATE=utf8_unicode_ci;

tabel "turvalised_rühmad":

CREATE TABLE `secure_groups` (`id` bigint(20) NOT NULL auto_increment, `title` teksti sortimine utf8_unicode_ci EI NULL, `perms` teksti sortimine utf8_unicode_ci NOT NULL, PRIMARY KEY NOT NULL, PRIMARY KEY NOT NULL, PRIMARY KEY NOT NULL CHARSET=utf8 COLLATE=utf8_unicode_ci ;

Tabel "kasutajad".

CREATE TABLE `users` (`id` bigint(20) NOT NULL auto_increment, `login` teksti sortimine utf8_unicode_ci NOT NULL, `passwd` teksti sortimine utf8_unicode_ci NOT NULL, `groupId` int(1) NOT NULLIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;

temp=massiivi();

$see->temp["_tulemus"]=0;

$this->temp["_uid"]=explode("::",$_COOKIE["site_hash"]);

$this->temp["_uid"]=$this->temp["_uid"];

$this->temp["_gid"]=$this->getUserSecurityAccess($this->temp["_uid"]);

$this->temp["_conn_id"]=mysql_connect("host","kasutaja","passwd");

mysql_select_db("andmebaas");

$this->temp["_q1"]=mysql_query("SELECT perms" ."FROM `turvalistest_rühmadest`" ."KUS id=".$this->temp["_gid"]);

$this->temp["_access_stamp"]=mysql_fetch_assoc($this->temp["_q1"]);

Autoriseerimisprotseduur näeb välja selline, nagu sisestatakse kasutaja isikuandmed (sisselogimine ja parool) spetsiaalsele vormile, mille saatmise järel töödeldakse kasutaja poolt esitatud andmeid funktsiooni checkAuthData() meetodil ning andmete õigsuse korral kasutajaandmeid salvestatakse salvestusküpsistena kasutaja määratud perioodiks või määratud väärtuse puudumisel vaikeperioodiks.

Keskkonnamuutujas $_COOKIE salvestatud andmete autentsuse kontrollimiseks kasutame funktsiooni EatCookie(), mis kinnitab andmed, tagastades Boole'i ​​kontrollitulemuse (true - false).

Ma ei paku esitamiseks vormi, kuna see ei kuulu programmeerimise teooriasse, näidates ainult väljade identifikaatoreid.

  • `ulogin` – kasutaja sisselogimine
  • `upasswd` – kasutaja parool
  • "aeg" – kasutaja määratud seansi aeg (1 kuni 5 tundi)
  • "auth" – saatmisnupu nimi

See on kõik. Jääb üle vaid proovida, katsetada, teha vigu ja leida lahendus, mille jätan täielikult teie hooleks.

Loodan, et kohtume varsti ja neile, kellel on minu jaoks artikli kohta küsimusi ja mitte ainult - kirjutage [e-postiga kaitstud], või sisse [e-postiga kaitstud].

Lugupidamisega IAJ IT osakonna juhataja Kirill Karpenko.

Esiteks täiustame registreerimislehte, lisades avatari üleslaadimise võimaluse. Lähtepilt peab olema jpg-, gif- või png-vormingus. Samuti ei tohiks see olla suurem kui 2 MB. Ärge muretsege, pärast skripti poolt selle tihendamist on avatari suurus umbes 3 kb ja jpg-vormingus. Avage leht reg.php ja lisage see sildile < vormi> rida enctype="multipart/form-data", nagu näites:


Registreerimine










Nüüd hoiame kokku reg.php

2. Seejärel peate tabelisse looma teise välja kasutajad. Lähme juurde phpmyadmin, valige soovitud andmebaas ja tabel.


Seadsime kõik väärtused nagu joonisel:

Avatari tee salvestatakse sellele väljale ja see salvestatakse eraldi kausta, nimetagem seda "avatarideks". Kaust asub ülejäänud skriptifailidega samas kataloogis.

3. Minge faili juurde salvestada_ kasutaja. php ja lisage järgmine kood pärast sisselogimisnimest ja paroolist tühikute eemaldamist:

//eemaldage lisatühikud
$login = trimmi($login);

// lisa uus ************************************************

//lisage sisselogimise ja parooli pikkuse kontroll
if (strlen($login)< 3 or strlen($login) > 15) {
exit("Sisselogimine peab koosnema vähemalt 3 ja mitte rohkem kui 15 tähemärgist.");
}
if (strlen($parool)< 3 or strlen($password) > 15) {
exit("Parool peab olema vähemalt 3 tähemärki ja mitte rohkem kui 15.");
}

if (!empty($_POST["fuupload"])) //kontrolli, kas kasutaja on pildi saatnud
{
$fupload=$_POST["fuupload"]; $fuupload = trimmi($fuupload);
if ($fupload =="" või tühi($fupload)) (
unset($fupload);// kui muutuja $fupload on tühi, siis kustuta see
}
}
if (!isset($fupload) või tühi($fupload) või $fupload =="")
{
//kui muutujat ei ole (kasutaja ei saatnud pilti), siis määrake sellele eelnevalt ettevalmistatud pilt kirjaga "avatari pole"
$avatar = "avatars/net-avatara.jpg"; //saate joonistada net-avatara.jpg või võtta selle allikast
}
muidu
{
//muidu - laadige kasutaja pilt
$path_to_90_directory = "avatars/";//kaust, kuhu laaditakse esialgne pilt ja selle tihendatud koopia

If(preg_match("/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/",$_FILES["taaslaadimine"]["nimi"])) //lähtepildi vormingu kontrollimine
{
$failinimi = $_FILES["taaslaadimine"]["nimi"];
$allikas = $_FILES["fuupload"]["tmp_name"];
$sihtmärk = $tee_90_kataloogi . $failinimi;
move_uploaded_file($source, $target);//originaalfaili üleslaadimine kausta $tee_90_kataloogi
if(preg_match("/[.](GIF)|(gif)$/", $failinimi)) (
$im = imagecreatefromgif($tee_90_kataloogi.$failinimi) ; //kui originaal oli gif formaadis, siis loo samas formaadis pilt. Vajalik järgnevaks tihendamiseks
}
if(preg_match("/[.](PNG)|(png)$/", $failinimi)) (
$im = imagecreatefrompng($tee_90_kataloogi.$failinimi) ;//kui originaal oli png-vormingus, siis loo pilt samas vormingus. Vajalik järgnevaks tihendamiseks
}

If(preg_match("/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/", $failinimi)) (
$im = imagecreatefromjpeg($tee_90_kataloogi.$failinimi); //kui originaal oli jpg formaadis, siis loo samas formaadis pilt. Vajalik järgnevaks tihendamiseks
}
//SAIDILT www.codenet.ru Võetud ruutkujutise LOOMINE JA SELLE HILJEM KOMPRESSIOON
// Looge ruut suurusega 90x90
// dest – saadud pilt
// w - pildi laius
// suhe - proportsionaalsuskoefitsient
$w = 90; // ruut 90x90. Võimalik tarnida ka teistes suurustes.
// loob selle põhjal algse pildi
// lähtefail ja määrake selle suurus
$w_src = pildidx($im); //laiuse arvutamine
$h_src = imagesy($im); //arvuta pildi kõrgus
// looge tühi ruudukujuline pilt
// truecolor on oluline!, muidu saame 8-bitise tulemuse
$dest = imagecreatetruecolor($w,$w);
// lõigake ruudu keskpunkt piki x-i välja, kui foto on horisontaalne
kui ($w_src>$h_src)
imagecopyresampled($dest, $im, 0, 0,
round((max($w_src,$h_src)-min($w_src,$h_src))/2),
0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
// lõigake ruudukujuline ülaosa piki y-d välja,
// kui foto on vertikaalne (kuigi võite kasutada ka keskmist)
if ($w_src<$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
min($w_src,$h_src), min($w_src,$h_src));
// ruudukujulist pilti skaleeritakse ilma kärpimata
if ($w_src==$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
$kuupäev=kellaaeg(); //praegu kellaaja arvutamine.
imagejpeg($dest, $tee_90_kataloogi.$kuupäev..jpg");//salvestage pilt jpg-vormingus soovitud kausta, nimeks saab praegune kellaaeg. Loodud selleks, et avataridel ei oleks samad nimed.
//miks jpg? See võtab väga vähe ruumi + kasutaja tähelepanu hajutav GIF-pildi animatsioon hävib. Tema kommentaari pole eriti meeldiv lugeda, kui märkad silmanurgast liikumist.
$avatar = $tee_90_kataloogi.$kuupäev.".jpg";//pane avatari tee muutujasse.
$delfull = $tee_90_kataloogi.$failinimi;
unlink ($delfull);//kustutage algne üleslaaditud pilt, me ei vaja seda enam. Ülesandeks oli hankida miniatuur.
}
muidu
{
//vormingu mittevastavuse korral väljasta vastav teade
exit("Avatar peab olema vormingus JPG, GIF või PNG");
}
//laadimisprotsessi lõpp ja muutujale $avatar laaditud ava aadressi määramine
}



// lisas uus *************************************************** **
// Järgmiseks tuleb kõik artikli esimesest osast, kuid peate lisama andmebaasi päringusse muudatuse.
//ühendage andmebaasiga
// kontrollige sama sisselogimisega kasutaja olemasolu
$result = mysql_query("SELECT id FROM users WHERE login="$login"",$db);
if (!empty($myrow["id"])) (
exit("Vabandust, teie sisestatud sisselogimine on juba registreeritud. Palun sisesta teine ​​sisselogimine.");
}
// kui see nii ei ole, siis salvesta andmed
$result2 = mysql_query("INSERT INTO kasutajad (sisselogimine,parool,avatar) VALUES("$sisselogimine","$parool","$avatar")");
// Kontrollige, kas on vigu
kui ($tulemus2=="TRUE")
{
echo "Oled edukalt registreerunud! Nüüd saate saidile siseneda. Avaleht";
}
muu (
echo "Viga! Te pole registreerunud.";
}
?>

4. Peate samasse andmebaasi lisama ühe tabeli. See salvestab IP-aadressid, mis tegid sisselogimisel vigu. Nii saame piirata ligipääsu neile, kes eksisid rohkem kui kolm korda järjest, umbes 15 minuti jooksul.
Läheme phpmyadminisse ja loome uue 3 väljaga tabeli:


ip - IP-aadress.
kuupäev - selle ip-ga kasutaja ebaõnnestunud sisselogimise kuupäev viimase 15 minuti jooksul. col – selle ip-ga kasutaja vigade arv viimase 15 minuti jooksul.
Suurepärane! Valmis, nüüd muudame sisselogimise ja parooli kinnitusfaili, sest nüüd on meie parool krüptitud. Avage testreg.php ja kustutage kõik peale tühikute eemaldamise sisselogimisel ja paroolil. Järgmisena lisame järgmise koodi:

//eemaldage lisatühikud
$login = trimmi($login);
$parool = trimmi($parool);

// asendada uuega************************************************ *******
// ühenduge andmebaasiga
include("bd.php");// fail bd.php peab olema kõigi teistega samas kaustas, kui see pole, siis muuda lihtsalt teed
// parooli valimise minikontroll
$ip=getenv("HTTP_X_FORWARDED_FOR");
if (tühi($ip) || $ip=="tundmatu") ( $ip=getenv("REMOTE_ADDR"); )//extract ip
mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");//kustutage 15 minuti pärast sisselogimisel vea teinud kasutajate IP-aadressid.
$result = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db // toovad andmebaasist välja antud IP-ga kasutaja ebaõnnestunud sisselogimiskatsete arvu viimase 15 jooksul);
$myrow = mysql_fetch_array($tulemus);
if ($myrow["col"] > 2) (
//kui vigu on rohkem kui kaks, st kolm, siis väljastame teate.
exit("Sisestasite oma kasutajanime või parooli 3 korda valesti. Palun oodake 15 minutit enne uuesti proovimist.");
}
$parool = md5($password);//parool krüpteeritakse
$password = strrev($password);// usaldusväärsuse huvides lisage vastupidine
$parool = $parool."b3p6f";
//saate oma maitse järgi lisada paar oma tegelast, näiteks sisestades "b3p6f". Kui see parool on toore jõuga sisse häkitud samas md5 serveris, siis ilmselgelt ei tule sellest midagi head. Aga soovitan panna teised märgid, võib-olla rea ​​algusesse või keskele.
//Sellisel juhul on vaja andmebaasis paroolivälja pikkust suurendada. Krüpteeritud parool võib olla palju suurem.

$result = mysql_query("SELECT * FROM kasutajad WHERE login="$sisselogimine" JA parool="$parool"",$db); //võtab andmebaasist kõik andmed sisestatud sisselogimise ja parooliga kasutaja kohta
$myrow = mysql_fetch_array($tulemus);
if (tühi($myrow["id"]))
{
//kui sisestatud sisselogimise ja parooliga kasutajat pole olemas
//Teeme kirje, et see ip ei saanud sisse logida.
$select = mysql_query("SELECT ip FROM oshibka WHERE ip="$ip"");
$tmp = mysql_fetch_row($select);
if ($ip == $tmp) (//kontrolli, kas kasutaja on tabelis "oshibka"
$result52 = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db);
$myrow52 = mysql_fetch_array($tulemus52);
$col = $myrow52 + 1;//lisage veel üks ebaõnnestunud sisselogimiskatse
mysql_query("UPDATE error SET col=$col,date=NOW() WHERE ip="$ip"");
}
muu (
mysql_query("INSERT INTO oshibka (ip,date,col) VALUES ("$ip",NOW(),"1")");
//kui viimase 15 minuti jooksul vigu ei esinenud, siis sisesta tabelisse "oshibka" uus kirje
}

exit("Vabandust, teie sisestatud kasutajanimi või parool on vale.");
}
muu (
nbsp; //kui paroolid klapivad, siis käivitame kasutaja jaoks seansi! Võite teda õnnitleda, ta sai sisse!
$_SESSION["parool"]=$myrow["parool"];
$_SESSION["sisselogimine"]=$myrow["sisselogimine"];
$_SESSION["id"]=$myrow["id"];//neid andmeid kasutatakse väga sageli, nii et sisselogitud kasutaja kannab neid endaga kaasas

//Järgmisena salvestame andmed küpsistesse järgnevaks sisselogimiseks.
//TÄHELEPANU!!! TEGE SEDA OMA VÄLJA VALMISTAMISEL, KUNA ANDMED SALVESTATAKSE KÜPSISES ILMA krüptimiseta
if ($_POST["salvesta"] == 1) (
//Kui kasutaja soovib, et tema andmed salvestataks järgnevaks sisselogimiseks, siis salvestame need tema brauseri küpsistesse
setcookie("sisselogimine", $_POST["sisselogimine"], time()+9999999);
setcookie("parool", $_POST["parool"], time()+9999999);
}}
kaja" ";//suuname kasutaja avalehele, kus teavitame teda edukast sisselogimisest
?>

5. Muudame avalehe täielikult. Sellel on vaja kuvada kasutaja avatari, kuvada link kontolt väljalogimiseks ja lisada märkeruut, et sisselogimisel parool meeles pidada.
Indeks.php

// kogu protseduur toimib seanssidena. See on koht, kus kasutaja andmeid hoitakse saidil viibimise ajal. Väga oluline on need käivitada kohe lehe alguses!!!
session_start();
include("bd.php");// fail bd.php peab olema kõigi teistega samas kaustas, kui see pole, siis muuda lihtsalt teed
if (!empty($_SESSION["sisselogimine"]) ja !empty($_SESSION["parool"]))
{
//kui seanssides on sisselogimine ja parool, siis kontrolli need üle ja too avatari
$sisselogimine = $_SESSION["sisselogimine"];
$parool = $_SESSION["parool"];
$result = mysql_query("SELECT id,avatar FROM kasutajatest WHERE login="$sisselogimine" JA parool="$parool",$db);
$myrow = mysql_fetch_array($tulemus);
//võtab välja vajalikud kasutajaandmed
}
?>


Avaleht


Avaleht

if (!isset($myrow["avatar"]) või $myrow["avatar"]=="") (
//kontrollib, kas kasutajaandmed on andmebaasist välja võetud. Kui ei, siis pole ta sisse logitud või seansi parool on vale. Kuvame sisselogimisakna. Aga sissetulnutele me seda välja ei pane, neil pole seda enam vaja.
printida<<


SIIN;

If (isset($_COOKIE["login"])) //kas COOKIE-s on sisselogimisega muutuja. See peaks nii olema, kui kasutaja klõpsas eelmise sisselogimise ajal märkeruudul "Jäta mind meelde".
{
//kui jah, siis sisesta selle väärtus vormi. Sel juhul näidatakse kasutajale, et tema sisselogimine on juba vajalikku veergu sisestatud
echo " value="".$_COOKIE["sisselogimine"]."">";
}

printida<<




SIIN;

If (isset($_COOKIE["parool"]))//kas COOKIE-s on parooliga muutuja. See peaks nii olema, kui kasutaja klõpsas eelmise sisselogimise ajal märkeruudul "Jäta mind meelde".
{
//kui jah, siis sisesta selle väärtus vormi. Sel juhul näidatakse kasutajale, et tema parool on juba nõutavasse veergu sisestatud
echo " value="".$_COOKIE["parool"]."">";
}

Prindi<<



Pea mind meeles.






Registreeru



Olete külalisena sisse logitud

SIIN;
}
muidu
{
//kui sisselogimine õnnestub, antakse kasutajale kõik allpool tärnide vahel.

printida<<
Olete saidile sisse logitud kasutajana $_SESSION (välju)


See link on saadaval ainult registreeritud kasutajatele

Sinu avatar:




SIIN;

//************************************************************************************
//kui sisselogimine õnnestub, antakse kasutajale kõik, mis asub ÜLAL tärnide vahel.
}
?>



6. Vajalik on võimaldada sisseloginud kasutajatel välja logida. Avalehel oli juba link väljumiseks. Kuid seda faili pole veel olemas. Loome siis uue faili exit.php koodiga:

session_start();
if (tühi($_SESSION["sisselogimine"]) või tühi($_SESSION["parool"]))
{
//kui sisselogimise ja parooliga seanssi pole, siis pääses sellele failile ligi sisse logimata kasutaja. Ta ei kuulu siia. Saadame veateate ja peatame skripti
exit ("Juurdepääs sellele lehele on lubatud ainult registreeritud kasutajatele. Kui olete registreerunud, logige saidile sisse oma kasutajanime ja parooliga
Koduleht");
}

unset($_SESSION["parool"]);
unset($_SESSION["sisselogimine"]);
unset($_SESSION["id"]);// hävitada muutujad seanssides
exit (" ");
// saadab kasutaja avalehele.
?>

No see on kõik! Nautige seda oma tervise nimel! Palju õnne!

Võimalikud rünnakud

PHP kasutamine binaarse CGI-rakendusena on üks võimalustest, kui mingil põhjusel ei ole soovitav integreerida PHP-d veebiserverisse (nt Apache) moodulina või kavatsete kasutada utiliite nagu chroot ja setuid luua skriptide toimimise ajal turvaline keskkond. See installimine hõlmab tavaliselt PHP käivitatava faili kopeerimist veebiserveri cgi-bin kataloogi. CERT (turvaohtude jälgimise organisatsioon) CA-96.11 soovitab mitte paigutada tõlkeid cgi-bini kataloogi. Isegi kui PHP-d kasutatakse eraldiseisva tõlgina, on see loodud järgmiste rünnakute ärahoidmiseks:

    Juurdepääs süsteemifailidele: http://my.host/cgi-bin/php?/etc/passwd

    Pärast küsimärki päringustringi (URL) sisestatud andmed edastatakse interpretaatorile käsurea argumentidena vastavalt CGI protokollile. Tavaliselt avavad ja käivitavad tõlgid esimese argumendina antud faili.

    Kui PHP-d kasutatakse CGI-protokolli kaudu, ei tõlgenda see käsurea argumente.

    Juurdepääs suvalisele dokumendile serveris: http://my.host/cgi-bin/php/secret/doc.html

    Tavapäraselt kasutatakse seda osa taotletud lehel olevast teest, mis kuvatakse PHP täitmisfaili nime järel /secret/doc.html, et määrata faili, mida tõlgendatakse CGI-programmina. Tavaliselt kasutatakse mõnda veebiserveri konfiguratsioonisuvandit (nt Action for the server Apache) kasutatakse dokumendi ümbersuunamiseks, näiteks päringute (nt http://my.host/secret/script.php) ümbersuunamiseks PHP-tõlgile. Sel juhul kontrollib veebiserver esmalt juurdepääsuõigusi kataloogile /secret ja loob seejärel ümbersuunatud päringu aadressile http://my.host/cgi-bin/php/secret/script.php. Kahjuks, kui taotlus on algselt määratud täiskujul, siis faili /secret/script.php õiguste kontrolli ei teostata, see toimub ainult faili /cgi-bin/php puhul. Seega on kasutajal võimalus pääseda juurde /cgi-bin/php-le ja sellest tulenevalt mis tahes kaitstud dokumendile serveris.

    PHP-s suvandi täpsustamine kompileerimise ajal --enable-force-cgi-redirect, samuti valikud doc_root Ja kasutaja_kataloog skripti täitmise ajal saate piirata juurdepääsuga kataloogide puhul sarnaseid rünnakuid ära hoida. Täpsemalt antud valikuid ja nende kombinatsioone käsitletakse allpool.

1. valik: teenindatakse ainult avalikke faile

Kui teie serveris pole faile, mille juurdepääs on piiratud parooli või IP-aadressi filtriga, pole neid valikuid vaja kasutada. Kui teie veebiserver ei luba ümbersuunamisi või ei saa PHP käivitatava mooduliga nõutaval turbetasemel suhelda, saate kasutada valikut --enable-force-cgi-redirect PHP ehitamise ajal. Kuid samal ajal peate veenduma, et skripti kutsumiseks on alternatiivsed viisid, näiteks otse http://my.host/cgi-bin/php/dir/script.php või aadressi http://my.host ümbersuunamine. /dir/script .php pole saadaval.

Apache veebiserveris saab ümbersuunamist konfigureerida AddHandleri ja Action direktiivide abil (kirjeldatud allpool).

Valik 2: kasutage --enable-force-cgi-redirect

See PHP ehitusajal määratud suvand takistab skriptide otsekutsumist aadressil http://my.host/cgi-bin/php/secretdir/script.php . Selle asemel töötleb PHP sissetulevat päringut ainult siis, kui veebiserver on selle edasi saatnud.

Tavaliselt konfigureeritakse Apache veebiserveris ümbersuunamine järgmiste valikute abil.

Toiming php-script /cgi-bin/php AddHandler php-script .php

Seda suvandit testitakse ainult Apache veebiserveri jaoks ja see tugineb ümbersuunamise korral CGI keskkonnas leitud mittestandardsele muutujale REDIRECT_STATUS. Kui teie veebiserver ei võimalda selgelt tuvastada, kas antud päring on ümbersuunamine, ei saa te kasutada selles jaotises kirjeldatud valikut ja peate kasutama mõnda muud meetodit CGI-rakendustega töötamiseks.

Valik 3: suvandite doc_root ja user_dir kasutamine

Dünaamilise sisu, näiteks skriptide või muude käivitatavate failide paigutamine veebiserveri kataloogi muudab selle potentsiaalselt ohtlikuks. Kui serveri konfiguratsioonis tehakse viga, on võimalik, et skripte ei käivitata, vaid kuvatakse brauseris tavaliste HTML-dokumentidena, mis võib kaasa tuua konfidentsiaalse teabe (näiteks paroolide) või teabe, mis on intellektuaalomand. Nendest kaalutlustest lähtudes eelistavad paljud süsteemiadministraatorid kasutada skriptide salvestamiseks eraldi kataloogi, töötades kõigi selles asuvate failidega CGI-liidese abil.

Juhul, kui ei ole võimalik tagada, et päringuid ei suunata ümber, nagu on näidatud eelmises jaotises, on vaja määrata muutuja doc_root, mis erineb veebidokumendi juurkataloogist.

PHP-skriptide juurkataloogi saate määrata parameetri määramisega doc_root V konfiguratsioonifail või keskkonnamuutuja PHP_DOCUMENT_ROOT seadmisega. Kui PHP-d kasutatakse CGI kaudu, koostatakse avatava faili täielik tee muutuja doc_root väärtuse ja päringus määratud tee põhjal. Nii saate olla kindel, et skripte käivitatakse ainult teie määratud kataloogis (välja arvatud kataloog user_dir, mida kirjeldatakse allpool).

Teine turvalisuse seadistamisel kasutatav võimalus on kasutaja_kataloog. Kui muutuja user_dir ei ole määratud, luuakse avatava faili tee doc_root suhtes. Sellise päringu nagu http://my.host/~user/doc.php tulemuseks on skripti käivitamine, mis ei asu vastava kasutaja kodukataloogis, vaid asub skripti ~user/doc.php alamkataloogis doc_root (jah, kataloogi nimi algab sümboliga ~ ).

Aga kui muutuja public_php on seatud millekski nagu http://my.host/~user/doc.php , siis ülaltoodud näide käivitab skripti doc.php, mis asub kasutaja kodukataloogis avalikus_php kataloogis. Näiteks kui kasutaja kodukataloog on /home/user , käivitatakse fail /home/user/public_php/doc.php.

Suvandi user_dir seadistamine toimub sõltumatult doc_root seadistusest, nii et saate juhtida veebiserveri juurkataloogi ja kasutajakatalooge üksteisest sõltumatult.

Valik 4: PHP väljaspool veebidokumendipuud

Üks võimalus turvalisust oluliselt suurendada on PHP käivitatava faili paigutamine veebidokumendipuust väljapoole, näiteks kausta /usr/local/bin . Selle lähenemisviisi ainus negatiivne külg on see, et iga skripti esimene rida peab välja nägema järgmine:

#!/usr/local/bin/php

Samuti peate muutma kõik skriptifailid käivitatavaks. Seega käsitletakse skripti samamoodi nagu kõiki teisi CGI-rakendusi, mis on kirjutatud Perlis, sh-s või mis tahes muus skriptikeeles, mis kasutab #! faili algusesse, et ise käivitada.

Et saaksite skriptis muutujate PATH_INFO ja PATH_TRANSLATED õiged väärtused, peab PHP olema seadistatud valikuga --enable-discard-path.



<<< Назад Sisu Edasi >>>
Kui teil on muid küsimusi või midagi pole selge - tere tulemast meie juurde

Mõttetus on see, kui kirg takistab sul mõtlemast.

Naljakad aforismid

Läbimõtlematus isiksuse kvaliteedina – kalduvus mitte mõelda läbi oma tegude tagajärgi; käituma ebapiisavalt läbimõeldult, rumalalt, mõtlematult; võimetus sügavalt ja põhjalikult mõelda, millestki õigesti aru saada.

Ühel karmil talvel said perel küttepuud otsa. Isa läks välja äärelinna, leidis surnud puu ja lõikas selle maha. Kevadel nägi ta mahavõetud puu kännust võrseid väljumas. "Ma olin kindel," ütles isa, "et see puu on surnud." Siis oli nii külm, et pakane pani selle oksad lõhenema, murduma ja maapinnale kukkuma, nagu poleks juurtesse jäänud tilkagi elu. Nüüd näen, et elu selles pagasiruumis ikka veel virvendas.

Ja poja poole pöördudes ütles ta: "Pidage meeles seda õppetundi." Ärge kunagi langetage puud talvel. Ärge kunagi tehke otsuseid läbimõeldult, valel ajal või siis, kui olete halvas meeleolus. Oota. Ole kannatlik, halvad ajad lähevad mööda. Pidage meeles, et kevad tuleb tagasi.

Mõttetus on rumaluse ja rumaluse tütar. See on terve mõistuse olemasolu puudumine. Läbimõeldus räägib tähelepanematusest ja lugupidamatusest inimeste vastu. Keda armastame ja austame, kellest hoolime, muretseme ja muretseme, seega mõtleme kõikidele nüanssidele, kõikidele pisiasjadele, mis võiksid teda kahjustada või tema elu segada. Kellele me ei austa ega väärtusta, näitame üles mõtlematust.

Mõttetus on idiootsuse, rumaluse, rumaluse ja ajutuse liitlane.

Uudishimu teeskledes küsib tüüp kenalt stjuardessilt: - Tüdruk, mida tähendab TU-154-2B? - Kas sa ei suuda sellele ise mõelda? Noh, TLÜ tähendab, et lennuki tootis disainer Tupolev, 150 on istekohtade arv salongis ja 4 on meeskonnaliikmete arv. - Ja 2B? - Ilmselt on mõtlematus teie tugevaim külg! See oleme Marinka ja mina.

Läbimõtlematus on see, kui inimene elab, mõistmata, et ta peab iga teo eest vastutama. Talle ei tule pähe mõtet, et tema tegude tagajärjed nagu bumerang karmaseaduse järgi temani tagasi jõuavad. Nii hea kui halb naaseb kindlasti uuesti.

Läbimõtlematus on tõestatud viis ümbritsevatele ebamugavuste tekitamiseks.

V. Schlachter ütleb, et väga sageli tajume mõtlematust rumalusena. Või isegi loomalikkuse pärast. Näiteks sõitis juht tiheda liiklusega ristmikule. Ta blokeeris liikluse kõigile, kes seisid kõrvalteel ja ootasid foori roheliseks süttimist. Kuid ta tegi seda suure tõenäosusega mitte viha pärast ja mitte sellepärast, et ta oli rumal, alatu jõhkard. Ta lihtsalt ei viitsinud oma väikest vaest pead tagajärgedele mõelda. Nüüd hüüavad kõik talle (sagedamini temale!) ja nimetavad teda mitteametliku sõnavara kõige ebameelitavamateks epiteetideks.

"Jätke kassile palju vett, ma olen kolm päeva ära," ütleb ema. Ja mu poeg toob kassile paki pooleteiseliitriseid plastpudeleid. Joo, kass! See, et kass ei saa pudelit avada ja sellest juua, ei tule pojale pähegi. Nad küsisid vett juurde – ta tõi rohkem, milles probleem? Ta ei teinud seda rumalusest. Ja mitte vihast õnnetu kassi vastu. Mõtlematusest!

Mõttetus tuleb pähe palju varem kui terve mõistus. Sellega kaasnevad alati kiirustavad hinnangud.

Õpetaja hoiatas oma õpilasi alati mõtlematuse eest, see tähendab inimeste kohta kiirustavate hinnangute ja veelgi enam tormakate nõuannete eest. Ta ütles nii: "Kuni te ei tunne oma südames ja mõistuses, et olete tunginud probleemi olemuseni ja vähimgi kahtlus, et teete õiget asja, ei jäta teid maha, olgu teie parim tegevus tegevusetus ja kõige turvalisem sõna vaiki." Vastasel juhul sunnivad teie nõuanded inimesi mõtlematuse all kannatava talupoja saatust kordama.

Mis temaga juhtus? - küsisid õpilased. - Tema maja, mis seisis künkal, puhus igast küljest ägedate tuultega. Talupoeg uskus mõtlematuse tõttu naiivselt, et tuul tuleb seetõttu, et maja ümbritsevad kõrged puud kõiguvad küljelt küljele. Ühel päeval ta vihastas ja lõikas kõik puud maha. Selle tulemusena muutus viimase kaitse kaotanud maja veelgi külmemaks ja tuulisemaks.

Läbimõtlematus on nende inimeste nuhtlus, kes mõtlevad ainult oma huvidele.

Lipnik küsib sõdurilt: - Mida teha tuumaplahvatuse korral? "Lamage jalad välklambi poole ja katke end kätega," vastab ta. - Vale. Tuleb kuulipildujaga käed ette sirutada, et sulametall valitsuse poolt välja antud saabastele peale ei tilguks.

Mõtlematus tõukab inimese ebakindluse keskkonda. Kui inimene ei kujuta ette, mis mõne minuti pärast juhtub, tähendab see, et ta elab täielikus ebakindluses.

Mu abikaasa naasis tööreisilt. Kedagi pole kodus. Otsustasin end peita, et oma naist üllatada. Järsku näeb ta oma naist koos mingi mehega korterisse sisenemas. Nad lähevad magamistuppa. Uks sulgub, mees jookseb lukuaugu juurde. Ja ta näeb oma naist seda meest suudlemas, ta võtab kõik riided seljast, mõlemad viskuvad voodile, ta võtab riided seljast ja viskab oma aluspüksid välisukse poole, kus mees peidab end, ja nad ripuvad küljes. käepide, sulgege lukk mehele hästi ja kogu ülevaade. Ja siis mõtleb abikaasa nördinult: "Noh, see on päev raisatud, jälle on täielik ebakindlus!"

Peeter Kovaljov