Mājas Programmas Mēs izveidojam neticami vienkāršu reģistrācijas sistēmu PHP un MySQL. Neticami vienkāršas reģistrācijas sistēmas izveide PHP un MySQL Izvairīšanās no dalībnieku reģistrācijas php

Mēs izveidojam neticami vienkāršu reģistrācijas sistēmu PHP un MySQL. Neticami vienkāršas reģistrācijas sistēmas izveide PHP un MySQL Izvairīšanās no dalībnieku reģistrācijas php

Uz dalību balstītas vietnes izveide sākotnēji šķiet biedējošs uzdevums. Ja kādreiz vēlējāties to izdarīt pats, tad vienkārši padevāties, kad sākāt domāt, kā to izveidot kopā, izmantojot savas PHP prasmes, tad šis raksts ir paredzēts jums. Mēs iepazīstināsim jūs ar katru dalības vietnes izveides aspektu ar drošu dalībnieku apgabalu, kas aizsargāts ar paroli.

Viss process sastāv no divām lielām daļām: lietotāja reģistrācijas un lietotāja autentifikācijas. Pirmajā daļā mēs apskatīsim reģistrācijas veidlapas izveidi un datu glabāšanu MySQL datu bāzē. Otrajā daļā mēs izveidosim pieteikšanās veidlapu un izmantosim to, lai ļautu lietotājiem piekļūt drošajā zonā.

Lejupielādējiet kodu

Visu reģistrācijas/pieteikšanās sistēmas avota kodu varat lejupielādēt no tālāk esošās saites:

Konfigurācija un augšupielāde
ReadMe failā ir ietverti detalizēti norādījumi.

Atveriet avots\include\membersite_config.php failu teksta redaktorā un atjauniniet konfigurāciju. (Pieteikšanās datu bāzē, jūsu vietnes nosaukums, jūsu e-pasta adrese utt.).

Augšupielādējiet visu direktorijas saturu. Pārbaudi register.php, iesniedzot veidlapu.

Reģistrācijas veidlapa

Lai izveidotu lietotāja kontu, mums ir jāievāc minimāls informācijas apjoms no lietotāja. Mums ir nepieciešams viņa vārds, e-pasta adrese un vēlamais lietotājvārds un parole. Protams, šajā brīdī mēs varam lūgt vairāk informācijas, taču garā forma vienmēr ir izslēgšana. Tāpēc aprobežosimies tikai ar šīm jomām.

Šeit ir reģistrācijas forma:

Reģistrēties

Tātad, mums ir teksta lauki vārdam, e-pastam un parolei. Ņemiet vērā, ka mēs izmantojam labākai lietojamībai.

Veidlapas apstiprināšana

Šajā brīdī ir ieteicams ievietot veidlapas validācijas kodu, tāpēc mēs pārliecināmies, ka mums ir visi lietotāja konta izveidei nepieciešamie dati. Mums ir jāpārbauda, ​​vai vārds, e-pasts un parole ir ievadīti un vai e-pasts ir pareizā formātā.

Veidlapas iesniegšanas apstrāde

Tagad mums ir jāapstrādā iesniegtie veidlapas dati.

Šeit ir norādīta secība (skatiet failu fg_membersite.php lejupielādētajā avotā):

function RegisterUser() ( if(!isset($_POST["iesniegts"])) (atgriež false; ) $formvars = array(); if(!$this->ValidateRegistrationSubmission()) (atgriež false; ) $this- >CollectRegistrationSubmission($formvars); if(!$this->SaveToDatabase($formvars)) ( return false; ) if(!$this->SendUserConfirmationEmail($formvars)) ( return false; ) $this->SendAdminIntimationEmail($ formvars); atgriezties true;)

Pirmkārt, mēs apstiprinām veidlapas iesniegšanu. Pēc tam mēs apkopojam un “dezinficējam” veidlapas iesniegšanas datus (vienmēr dariet to pirms e-pasta sūtīšanas, saglabāšanas datu bāzē utt.). Pēc tam veidlapas iesniegšana tiek saglabāta datu bāzes tabulā. Mēs nosūtām lietotājam e-pastu ar pieprasījumu apstiprinājumu. Pēc tam mēs paziņojam administratoram, ka lietotājs ir reģistrējies.

Datu saglabāšana datu bāzē

Tagad, kad esam apkopojuši visus datus, mums tie ir jāsaglabā datu bāzē.
Lūk, kā mēs saglabājam veidlapas iesniegšanu datu bāzē.

function SaveToDatabase(&$formvars) ( if(!$this->DBLogin()) ( $this->HandleError("Pieteikšanās datu bāzē neizdevās!"); return false; ) if(!$this->Nodrošināms()) ( return false; ) if(!$this->IsFieldUnique($formvars,"email")) ( $this->HandleError("Šis e-pasts jau ir reģistrēts"); return false; ) if(!$this->IsFieldUnique( $formvars,"lietotājvārds")) ( $this->HandleError("Šis lietotājvārds jau ir izmantots. Lūdzu, izmēģiniet citu lietotājvārdu"); return false; ) if(!$this->InsertIntoDB($formvars)) ( $this- >HandleError("Ievietošana datu bāzē neizdevās!"); return false; ) return true; )

Ņemiet vērā, ka esat konfigurējis datu bāzes pieteikšanās informāciju failā membersite_config.php. Vairumā gadījumu datu bāzes resursdatoram varat izmantot “localhost”.
Pēc pieteikšanās pārliecināmies, ka tabula eksistē.(Ja nē, skripts izveidos nepieciešamo tabulu).
Pēc tam mēs pārliecināmies, ka lietotājvārds un e-pasts ir unikāli. Ja tā nav unikāla, mēs atgriežam kļūdu lietotājam.

Datu bāzes tabulas struktūra

Šī ir tabulas struktūra. Funkcija CreateTable() failā fg_membersite.php izveido tabulu. Šeit ir kods:

function CreateTable() ( $qry = "Izveidot tabulu $this->tablename (". "id_user INT NOT NULL AUTO_INCREMENT ," "name VARCHAR(128) NOT NULL ," "email VARCHAR(64) NOT NULL ," " "phone_number VARCHAR(16) NOT NULL ," "lietotājvārds VARCHAR(16) NOT NULL ", "parole VARCHAR(32) NOT NULL ", "confirmcode VARCHAR(32) ", "PRIMARY KEY (id_user)." ")"; if( !mysql_query($qry,$this->connection)) ( $this->HandleDBERror("Kļūda veidojot tabulu \nquery was\n $qry"); return false; ) return true; )

Laukā id_user būs unikāls lietotāja ID, un tas ir arī tabulas primārā atslēga. Ņemiet vērā, ka paroles laukā ir atļauts izmantot 32 rakstzīmes. Mēs to darām, jo ​​kā papildu drošības pasākums mēs saglabāsim paroli datubāzē, kas šifrēta, izmantojot MD5. Lūdzu, ņemiet vērā: tā kā MD5 ir vienvirziena šifrēšanas metode, mēs nevarēsim atgūt paroli, ja lietotājs to aizmirsīs.

Reģistrācijas ievietošana tabulā

Šeit ir kods, ko izmantojam datu ievietošanai datu bāzē. Visi mūsu dati būs pieejami masīvā $formvars.

function InsertIntoDB(&$formvars) ( $confirmcode = $this->MakeConfirmationMd5($formvars["email"]); $insert_query = "ievietojiet ".$this->tablename."(vārds, e-pasts, lietotājvārds, parole, apstiprinājuma kods) vērtības ​​("" . $this->SanitizeForSQL($formvars["nosaukums"]) . "", "" . $this->SanitizeForSQL($formvars["e-pasts"]) . "", "" . $ this->SanitizeForSQL($formvars["lietotājvārds"]) . "", "" . md5($formvars["parole"]) . "", "" . $confirmcode . "")"; if(! mysql_query( $insert_query ,$this->connection)) ( $this->HandleDBError("Kļūda, ievietojot datus tabulā\nquery:$insert_query"); return false; ) return true; )

Ņemiet vērā, ka mēs izmantojam PHP funkciju md5(), lai šifrētu paroli pirms tās ievietošanas datu bāzē.
Mēs arī izveidojam unikālo apstiprinājuma kodu no lietotāja e-pasta adreses.

E-pastu sūtīšana

Tagad, kad esam reģistrējušies mūsu datubāzē, mēs lietotājam nosūtīsim apstiprinājuma e-pastu. Lai pabeigtu reģistrācijas procesu, lietotājam ir jānoklikšķina uz saites apstiprinājuma e-pastā.

function SendUserConfirmationEmail(&$formvars) ( $mailer = new PHPMailer(); $mailer->CharSet = "utf-8"; $mailer->AddAddress($formvars["email"],$formvars["nosaukums"]) $mailer->Subject = "Jūsu reģistrācija vietnē ".$this->sitename; $mailer->From = $this->GetFromAddress(); $confirmcode = urlencode($this->MakeConfirmationMd5($formvars["e-pasts") ])); $confirm_url = $this->GetAbsoluteURLFolder()."/confirmreg.php?code=".$confirmcode; $mailer->Body ="Labdien, ".$formvars["nosaukums"]."\r\ n\r\n". "Paldies, ka reģistrējāties vietnē ".$this->sitename."\r\n". "Lūdzu, noklikšķiniet uz tālāk esošās saites, lai apstiprinātu reģistrāciju.\r\n." "$confirm_url\r \n". "\r\n". "Ar cieņu\r\n". "Tīmekļa pārzinis\r\n". $this->sitename; if(!$mailer->Send()) ( $this-> HandleError("Neizdevās nosūtīt reģistrācijas apstiprinājuma e-pastu."); return false; ) return true; )

Atjauninājumi

2012. gada 9. janvāris
Ir pievienotas paroles atiestatīšanas/paroles maiņas funkcijas
Kods tagad tiek kopīgots vietnē GitHub.

Laipni lūdzam atpakaļUserFullName(); ?>!

Licence


Kods tiek koplietots saskaņā ar LGPL licenci. Varat to brīvi izmantot komerciālās vai nekomerciālās vietnēs.

Nav saistītu ziņu.

Komentāri par šo ierakstu ir slēgti.

Dažu pēdējo gadu laikā tīmekļa mitināšana ir piedzīvojusi dramatiskas izmaiņas. Tīmekļa mitināšanas pakalpojumi ir mainījuši vietņu darbību. Ir vairāki pakalpojumu veidi, taču šodien mēs runāsim par iespējām, kas ir pieejamas tālākpārdevēju mitināšanas pakalpojumu sniedzējiem. Tie ir Linux tālākpārdevēju mitināšana un Windows tālākpārdevēju mitināšana. Pirms mēs saprotam būtiskās atšķirības starp abiem, noskaidrosim, kas ir tālākpārdevēju mitināšana.

Tālākpārdevēju mitināšana

Vienkārši izsakoties, tālākpārdevēja mitināšana ir tīmekļa mitināšanas veids, kurā konta īpašnieks var izmantot savu atvēlēto vietu cietajā diskā un atvēlēto joslas platumu, lai pārdotu to tālāk trešo pušu vietnēs. Dažreiz tālākpārdevējs var paņemt īpašu serveri no mitināšanas uzņēmuma (Linux vai Windows) un tālāk nodot to trešajām pusēm.

Lielākā daļa vietņu lietotāju izmanto Linux vai Windows. Tas ir saistīts ar darbības laiku. Abas platformas nodrošina, ka jūsu vietne darbojas 99% laika.

1.Pielāgošana

Viena no galvenajām atšķirībām starp Linux tālākpārdevēja hostinga plānu un Windows nodrošināto ir pielāgošana. Lai gan ar abiem atskaņotājiem varat eksperimentēt vairākos veidos, Linux ir daudz pielāgojamāks nekā Windows. Pēdējam ir vairāk funkciju nekā līdziniekam, un tāpēc daudzi izstrādātāji un administratori uzskata, ka Linux ir ļoti klientiem draudzīgs.

2. Pieteikumi

Dažādiem tālākpārdevēju mitināšanas pakalpojumiem ir dažādas lietojumprogrammas. Gan Linux, gan Windows ir savs lietojumprogrammu klāsts, taču pēdējai ir priekšrocības attiecībā uz skaitļiem un daudzpusību. Tas ir saistīts ar Linux atvērtā koda būtību. Jebkurš izstrādātājs var augšupielādēt savu lietotni Linux platformā, un tas padara to par pievilcīgu mitināšanas pakalpojumu sniedzēju miljoniem vietņu īpašnieku.

Tomēr, lūdzu, ņemiet vērā, ka, ja tīmekļa mitināšanai izmantojat Linux, bet vienlaikus izmantojat operētājsistēmu Windows, dažas lietojumprogrammas var vienkārši nedarboties.

3.Stabilitāte

Lai gan abas platformas ir stabilas, Linux tālākpārdevēju mitināšana ir stabilāka no abām. Tā kā tā ir atvērtā koda platforma, tā var darboties vairākās vidēs. Šo platformu ik pa laikam var modificēt un attīstīt.

4. .NET saderība

Nav tā, ka Linux visos iespējamos veidos ir pārāks par Windows. Runājot par saderību ar .NET, Windows nozog uzmanības centrā. Tīmekļa lietojumprogrammas var viegli izstrādāt Windows mitināšanas platformā.

5. Izmaksu priekšrocības

Abas hostinga platformas ir pieejamas par pieņemamām cenām. Bet, ja jūtat naudas trūkumu, jums vajadzētu izvēlēties Linux. Tas ir bezmaksas, un tāpēc to izvēlas tik daudzi izstrādātāji un sistēmu administratori visā pasaulē.

6. Vienkārša uzstādīšana

Windows ir vieglāk iestatāms nekā tā līdzinieks. Viss pateikts un paveikts, Windows joprojām saglabā savu lietotājdraudzīgumu visus šos gadus.

7.Drošība

Izvēlieties Linux tālākpārdevēju mitināšanu, jo tas ir drošāks nekā Windows. Tas jo īpaši attiecas uz cilvēkiem, kuri vada savus e-komercijas uzņēmumus.

Secinājums

Izvēle starp abiembūs atkarīgs no jūsu prasībām un izmaksu elastības. Abiem hostinga pakalpojumiem ir unikālas priekšrocības. Lai gan Windows ir viegli iestatīt, Linux ir rentabls, drošs un daudzpusīgāks.



Šā gada martā man bija ļoti slikta pieredze ar mediju uzņēmumu, kas atteicās man maksāt un atbildēt uz maniem e-pastiem. Viņi joprojām ir man parādā tūkstošiem dolāru, un niknuma sajūta, kas man ir, pārņem katru dienu. Tomēr izrādās, ka es neesmu viens, un simtiem citu vietņu īpašnieku ir tajā pašā laivā. Tas ir līdzvērtīgs digitālās reklāmas kursam.

Godīgi sakot, šis emuārs man ir bijis jau ilgu laiku, un agrāk esmu izmantojis dažādus reklāmu tīklus. Pēc reklāmu vienību noņemšanas no šī uzņēmuma, kas mani satrauca, es atgriezos pie sākuma. Jāpiebilst arī, ka Man nekad nav paticis Google AdSense produkts tikai tāpēc, ka tas šķiet kā attēla reklāmu "stobra apakšdaļa". Ne no kvalitātes, bet gan no ieņēmumu viedokļa.

Cik es saprotu, jūs vēlaties, lai jūsu vietnē tiktu reklamētas Google reklāmas, taču vēlaties, lai to darītu arī citi lieli uzņēmumi un aģentūras. Tādā veidā jūs maksimāli palielināsit pieprasījumu un ieņēmumus.

Pēc manas negatīvās pieredzes es saņēmu ieteikt uzņēmumu Newor Media. Un, ja godīgi, sākumā mani nepārdeva galvenokārt tāpēc, ka nevarēju par tām atrast daudz informācijas. Es atradu pāris pienācīgas atsauksmes citās vietnēs, un pēc sarunas ar kādu no turienes es nolēmu izmēģināt. .Es teikšu, ka viņi ir SUPER izpalīdzīgi. Katrs tīkls, ar kuru jebkad esmu strādājis, ir bijis diezgan īss gan atbilžu, gan darba sākšanas ziņā. Viņi atbildēja uz katru jautājumu, un tas bija patiešām uzmundrinošs process.

Esmu rādījis reklāmas dažus mēnešus, un ieņēmumi ir aptuveni tādi paši, kādus guvu citā uzņēmumā. Tāpēc es īsti nevaru pateikt, vai tās ir tik daudz labākas par citām, bet kur tās izceļas. ir punkts, ko es patiešām vēlos pieminēt. Saziņa ar viņiem atšķiras no jebkura cita tīkla, kurā es jebkad esmu strādājis. Šeit ir gadījums, kad tie patiešām atšķiras:

Pirmo maksājumu viņi man iespieda laicīgi ar Paypal. Bet, tā kā es neatrodos ASV (un tas notiek ar visiem, ko es domāju), es saņēmu maksu no Paypal. Es par to nosūtīju e-pastu savam pārstāvim, vaicājot, vai ir kāds veids, kā no tā izvairīties nākotnē.

Viņi teica, ka nevar izvairīties no maksas, bet lai viņi ATMAKSĀTU VISAS MAKSAS.... AR PĒDĒJO MAKSĀJUMU! Ne tikai tas, bet atlīdzības maksājums tika saņemts 10 MINŪŠU laikā! Kad jūs kādreiz esat varējis iesniegt šādu pieprasījumu, lai tas nebūtu jāpārsūta uz "finanšu nodaļu", lai pēc tam uz to nekad netiktu atbildēts.

Galvenais ir tas, ka es mīlu šo uzņēmumu. Es, iespējams, varētu nopelnīt vairāk kaut kur citur, es neesmu īsti pārliecināts, bet viņiem ir izdevējs uz mūžu. Es neesmu liela vietne un negūstu milzīgus ienākumus, bet es jūtos kā ļoti svarīgs klients, kad es runāju ar viņiem. Tas ir patiesi svaiga gaisa malks nozarē, kas ir nobriedusi krāpnieciskiem un nereaģējošiem.

Mikrodatori, ko 2012. gadā izveidoja Raspberry Pi fonds, ir bijuši ļoti veiksmīgi, radot jaunus bērnus, un šis Apvienotajā Karalistē bāzētais uzņēmums sāka piedāvāt mācīšanās kodēt starta programmas, piemēram, pi-top un Kano. Tagad ir jauns starta uzņēmums, kas izmanto Pi elektroniku, un ierīce ir pazīstama kā Pip — rokas konsole, kas piedāvā skārienekrānu, vairākus portus, vadības pogas un skaļruņus. Ierīces ideja ir iesaistīt jaunākus cilvēkus ar retro spēļu ierīci, kas arī piedāvās koda apguves pieredzi, izmantojot tīmekļa platformu.

Apbrīnojamā programmatūras platforma, kas tiek piedāvāta kopā ar Pip, piedāvās iespēju sākt kodēšanu Python, HTML/CSS, JavaScript, Lua un PHP. Ierīce piedāvā soli pa solim apmācības, lai palīdzētu bērniem sākt kodēšanu, un ļauj viņiem pat likt mirgot gaismas diodēm. Lai gan Pip joprojām ir prototips, tas noteikti būs milzīgs panākums šajā nozarē un piesaistīs bērnus, kuriem ir interese par kodēšanu, un nodrošinās viņiem izglītību un resursus, kas nepieciešami, lai sāktu kodēšanu agrā vecumā.

Kodēšanas nākotne

Kodēšanai ir liela nākotne, un pat ja bērni neizmantos kodēšanu kā karjeru, viņi var gūt labumu, iemācoties kodēt ar šo jauno ierīci, kas padara to vienkāršāku nekā jebkad agrāk. Izmantojot Pip, pat jaunākie kodēšanas entuziasti apgūs dažādas valodas un varēs izveidot savus kodus, spēles, savas lietotnes un daudz ko citu. Tā ir elektroniskās ēras nākotne, un Pip ļauj apgūt kodēšanas pamatelementus.
Datorzinātnes ir kļuvušas par svarīgu izglītības sastāvdaļu, un ar tādām ierīcēm kā jaunā Pip bērni var sākt uzlabot izglītību mājās, vienlaikus izklaidējoties. Kodēšana sniedzas daudz tālāk par vienkāršu vietņu vai programmatūras izveidi. To var izmantot, lai uzlabotu drošību pilsētā, palīdzētu veikt pētījumus medicīnas jomā un daudz ko citu. Tā kā mēs tagad dzīvojam pasaulē, kurā dominē programmatūra, kodēšana ir nākotne, un ir svarīgi, lai visiem bērniem būtu vismaz pamata izpratne par to, kā tas darbojas, pat ja viņi nekad neizmanto šīs prasmes kā karjeru. Runājot par nākotni, kodēšana būs būtiska ikdienas dzīves sastāvdaļa. Tā būs pasaules valoda, un datoru vai to darbības nezināšana var radīt problēmas, kuras ir tikpat grūti pārvarēt kā analfabētisms.
Kodēšana nodrošinās arī lielas izmaiņas spēļu pasaulē, jo īpaši attiecībā uz tiešsaistes spēlēm, tostarp piekļuvi tiešsaistes kazino. Lai redzētu, kā kodēšana jau ir uzlabojusi spēļu pasauli, apskatiet dažas visaugstāk novērtētās kazino vietnes, kas paļaujas uz kodēšanu. Ātri ieskatieties, lai to pārbaudītu, un uzziniet, kā kodēšana var radīt reālistisku vidi tiešsaistē.

Kā Pips saista bērnus

Runājot par iespēju apgūt kodēšanu, bērniem ir daudz iespēju. Ir pieejamas vairākas ierīces un aparatūras ierīces, kuras var iegādāties, taču Pip izmanto atšķirīgu pieeju savai ierīcei. Ierīces un skārienekrāna pārnesamība piedāvā priekšrocības citām tirgū esošajām kodēšanas ierīcēm. Pip būs pilnībā savietojams ar elektroniskajiem komponentiem papildus Raspberry Pi HAT sistēmai. Ierīce izmanto standarta valodas, un tai ir pamata rīki, un tā ir lieliska ierīce jebkuram iesācēja kodētājam. Mērķis ir novērst jebkādas barjeras starp ideju un radīšanu un nekavējoties padarīt rīkus pieejamus lietošanai. Viena no citām lielajām Pip priekšrocībām ir tā, ka tā izmanto SD karti, tāpēc to var izmantot arī kā galddatoru, kad tas ir savienots ar monitoru un peli.
Pip ierīce palīdzēs bērniem un ieinteresētiem kodēšanas iesācējiem ar entuziasmu mācīties un praktizēt kodēšanu. Piedāvājot uzdevumu izpildes un problēmu risināšanas kombināciju, ierīce noteikti piesaistīs jaunāko paaudzi. Pēc tam ierīce ļauj šiem jaunajiem kodētājiem pāriet uz progresīvākiem kodēšanas līmeņiem dažādās valodās, piemēram, JavaScript un HTML/CSS. Tā kā ierīce atkārto spēļu konsoli, tā nekavējoties piesaistīs bērnu uzmanību un piesaistīs viņus mācīties par kodēšanu jau agrā vecumā. Tam ir arī dažas iepriekš ielādētas spēles, lai saglabātu uzmanību, piemēram, Pac-Man un Minecraft.

Gaidāmās inovācijas

Nākotnes inovācijas lielā mērā ir atkarīgas no bērna pašreizējās kodēšanas spējas un vispārējās izpratnes par procesu. Tā kā bērni agrā bērnībā iemācās kodēt, izmantojot tādas ierīces kā jaunais Pip, viņi iegūs prasmes un zināšanas, lai nākotnē radītu pārsteidzošas lietas. Tas varētu būt jaunu spēļu vai lietotņu ieviešana vai pat idejas, kas var atdzīvoties, lai palīdzētu veikt medicīnisko izpēti un ārstēšanu. Ir bezgalīgas iespējas. Tā kā mūsu nākotni kontrolēs programmatūra un datori, vislabākais ir sākums jaunībā, tāpēc jaunais Pip ir paredzēts jauniešu pūlim. Piedāvājot konsoles ierīci, ar kuru var spēlēt spēles, vienlaikus mācot kodēšanas prasmes, jaunie sabiedrības locekļi ir ceļā uz programmatūras radītājiem nākotnē, kas mainīs visu mūsu dzīvi. Tas ir tikai sākums, taču miljoniem bērnu visā pasaulē sāk mācīties un apgūt to. Izmantojot tādas ierīces kā Pip, tiek aptverti kodēšanas pamati, un bērni ātri apgūs dažādas kodēšanas valodas, kas, sasniedzot pieaugušu vecumu, var novest pie pārsteidzošiem ceļiem.

Pamācība ļoti iesācējam! Neatkarīgi no tā, kur jūs dodaties internetā, gandrīz visur ir pieejama galvenā sastāvdaļa — lietotāju reģistrācija. Neatkarīgi no tā, vai lietotājiem ir jāreģistrējas drošības vai tikai papildu funkcijas dēļ, nav iemesla to nedarīt, izmantojot šo vienkāršo pamācību. Šajā apmācībā mēs apskatīsim lietotāju pārvaldības pamatus, beidzot ar vienkāršu dalībnieku apgabalu, ko varat ieviest savā vietnē.

Ja jums nepieciešama papildu palīdzība vai vēlaties īsceļu, skatiet PHP pakalpojumu sniedzēju klāstu vietnē Envato Studio. Šie pieredzējušie izstrādātāji var jums palīdzēt ar jebko, sākot ar ātru kļūdu labošanu un beidzot ar visas lietotnes izstrādi no jauna. Tāpēc vienkārši pārlūkojiet pakalpojumu sniedzējus, izlasiet atsauksmes un vērtējumus un izvēlieties sev piemērotāko.

Ievads

Šajā apmācībā mēs apskatīsim katru lietotāju pārvaldības sistēmas izveides darbību, kā arī starplietotāju privātās ziņojumapmaiņas sistēmu. Mēs to darīsim, izmantojot PHP, izmantojot MySQL datu bāzi visas lietotāja informācijas glabāšanai. Šī apmācība ir paredzēta absolūtiem PHP iesācējiem, tāpēc priekšzināšanas vispār nav nepieciešamas - patiesībā jums var būt nedaudz garlaicīgi, ja esat pieredzējis PHP lietotājs!

Šī apmācība ir paredzēta kā pamata ievads sesijām un datu bāzu lietošanai PHP. Lai gan šīs apmācības gala rezultāts jums uzreiz nešķiet noderīgs, šajā apmācībā iegūtās prasmes ļaus jums turpināt izveidot savu dalības sistēmu; atbilstoši jūsu vajadzībām.

Pirms sākat šo apmācību, pārliecinieties, ka jums ir pieejama šāda informācija:

  • Datu bāzes resursdatora nosaukums- tas ir serveris, kurā tiek mitināta jūsu datu bāze, vairumā gadījumu tas vienkārši būs "localhost".
  • Datu bāzes nosaukums, datu bāzes lietotājvārds, datu bāzes parole- Pirms šīs apmācības sākšanas jums ir jāizveido MySQL datu bāze, ja jums ir iespēja vai ir pieejama informācija, lai izveidotu savienojumu ar esošu datu bāzi. Šī informācija ir nepieciešama visā apmācībā.

Ja jums nav šīs informācijas, jūsu mitināšanas pakalpojumu sniedzējam vajadzētu būt iespējai to jums nodrošināt.

Tagad, kad esam nokārtojuši formalitātes, sāksim ar apmācību!

1. darbība – sākotnējā konfigurācija

Datu bāzes iestatīšana

Kā norādīts ievadā, jums ir nepieciešama datu bāze, lai turpinātu darbu pēc šī apmācības punkta. Sākumā mēs šajā datubāzē izveidosim tabulu, lai saglabātu mūsu lietotāja informāciju.

Tabula, kas mums nepieciešama, saglabās mūsu lietotāja informāciju; mūsu vajadzībām mēs izmantosim vienkāršu tabulu, bet būtu viegli saglabāt papildu informāciju papildu kolonnās, ja tas ir tas, kas jums nepieciešams. Mūsu sistēmā mums ir vajadzīgas šādas četras kolonnas:

  • Lietotāja ID (Primārā atslēga)
  • Lietotājvārds
  • Parole
  • Epasta adrese

Datu bāzes izteiksmē a Primārā atslēga ir lauks, kas unikāli identificē rindu. Šajā gadījumā UserID būs mūsu primārā atslēga. Tā kā mēs vēlamies, lai tas pieaugtu katru reizi, kad lietotājs reģistrējas, mēs izmantosim īpašo MySQL opciju - auto_increment .

SQL vaicājums, lai izveidotu mūsu tabulu, ir iekļauts zemāk, un parasti tas tiks palaists phpMyAdmin cilnē "SQL".

CREATE TABLE `users` (`Lietotāja ID` INT(25) NOT NULL AUTO_INCREMENT PRIMARY KEY , `Lietotājvārds` VARCHAR(65) NOT NULL , `Parole` VARCHAR(32) NOT NULL , `EmailAddress` VARCHAR);

Bāzes faila izveide

Lai vienkāršotu mūsu projekta izveidi, mēs izveidosim bāzes failu, ko varēsim iekļaut katrā no mūsu izveidotajiem failiem. Šajā failā būs informācija par datu bāzes savienojumu, kā arī noteikti konfigurācijas mainīgie, kas mums palīdzēs.

Sāciet, izveidojot jaunu failu: base.php un ievadiet tajā šādu kodu:

Apskatīsim dažas no šīm rindām? Šeit ir dažas funkcijas, kuras mēs esam izmantojuši un vēl nepaskaidrojām, tāpēc apskatīsim tās ātri un sapratīsim tās — ja jūs jau saprotat PHP pamatus, iespējams, vēlēsities izlaist šo skaidrojumu.

Session_start();

Šī funkcija sāk sesiju jaunajam lietotājam, un vēlāk šajā apmācībā mēs saglabāsim informāciju par šo sesiju, lai mēs varētu atpazīt lietotājus, kuri jau ir pieteikušies. Ja sesija jau ir izveidota, šī funkcija to atpazīs un pārnes uz nākamo lapu.

Mysql_connect($dbhost, $dbuser, $dbpass) or die("MySQL kļūda: " . mysql_error()); mysql_select_db($dbname) or die("MySQL kļūda: " . mysql_error());

Katra no šīm funkcijām veic atsevišķu, bet saistītu uzdevumu. Funkcija mysql_connect savieno mūsu skriptu ar datu bāzes serveri, izmantojot iepriekš sniegto informāciju, un funkcija mysql_select_db pēc tam izvēlas, kuru datu bāzi izmantot ar skriptu. Ja kādu no funkcijām neizdodas pabeigt, die funkcija automātiski iejauksies un apturēs skripta apstrādi, atstājot visiem lietotājiem ziņojumu, ka ir radusies MySQL kļūda.

2. darbība — atpakaļ uz priekšpusi

Kas mums jādara vispirms?

Vissvarīgākais vienums mūsu lapā ir PHP pirmā rinda; šajā rindā būs fails, ko izveidojām iepriekš (base.php), un būtībā ļaus mums piekļūt jebko no šī faila pašreizējā failā. Mēs to darīsim ar šādu PHP koda rindiņu. Izveidojiet failu ar nosaukumu index.php un ievietojiet šo kodu augšpusē.

Sāciet HTML lapu

Pirmā lieta, ko mēs darīsim savā priekšgalā, ir izveidot lapu, kurā lietotāji var ievadīt savus datus, lai pieteiktos, vai, ja viņi jau ir pieteikušies lapā, kurā viņi var izvēlēties, ko viņi vēlas darīt. Šajā apmācībā es pieņemu, ka lietotājiem ir pamatzināšanas par to, kā darbojas HTML/CSS, un tāpēc es nepaskaidrošu šo kodu sīkāk; pašlaik šiem elementiem tiks noņemts stils, taču mēs to varēsim mainīt vēlāk, kad izveidosim CSS stila lapu.

Izmantojot tikko izveidoto failu (index.php), ievadiet šādu HTML kodu zem jau izveidotās PHP rindas.

Ko mēs viņiem parādīsim?

Pirms lapas pārējās daļas izlaišanas mums ir daži jautājumi, kas jāuzdod sev:

  1. Vai lietotājs jau ir pieteicies?
  • - mums viņiem jāparāda lapa ar iespējām, ko viņi var izvēlēties.
  • Vai lietotājs jau ir iesniedzis savus pieteikšanās datus?
    • - mums ir jāpārbauda viņu dati, un, ja tie ir pareizi, mēs tos pieteiksim vietnē.
    • - mēs turpinām pie nākamā jautājuma.
  • Ja būtu atbildēts uz abiem iepriekš minētajiem , tagad varam pieņemt, ka mums ir jāparāda lietotājam pieteikšanās veidlapa.
  • Šie jautājumi patiesībā ir tie paši jautājumi, kurus mēs ieviesīsim savā PHP kodā. Mēs to darīsim if paziņojumu veidā. Neko neievadot jaunajos failos, apskatīsim loģiku, ko izmantosim vispirms.

    Izskatās mulsinoši, vai ne? Sadalīsim to mazākās daļās un pāriesim tās pa vienai.

    If(!empty($_SESSION["Pieteicies"]) && !empty($_SESSION["Lietotājvārds"])) ( // ļauj lietotājam piekļūt galvenajai lapai )

    Kad lietotājs piesakās mūsu vietnē, mēs saglabāsim viņa informāciju sesijā — jebkurā brīdī pēc tam mēs varam piekļūt šai informācijai īpašā globālā PHP masīvā — $_SESSION. Mēs izmantojam tukšuma funkciju, lai pārbaudītu, vai mainīgais ir tukšs, izmantojot operatoru ! tās priekšā. Tāpēc mēs sakām:

    Ja mainīgais $_SESSION["LoggedIn"] nav tukšs un $_SESSION["Lietotājvārds"] nav tukšs, izpildiet šo koda daļu.

    Nākamā rinda darbojas tādā pašā veidā, tikai šoreiz izmantojot $_POST globālo masīvu. Šajā masīvā ir visi dati, kas tika nosūtīti no pieteikšanās veidlapas, ko mēs izveidosim vēlāk šajā apmācībā. Pēdējā rinda tiks izpildīta tikai tad, ja netiks izpildīts neviens no iepriekšējiem paziņojumiem; šajā gadījumā mēs parādīsim lietotājam pieteikšanās veidlapu.

    Tātad, tagad, kad esam sapratuši loģiku, ieliksim saturu starp šīm sadaļām. Savā index.php failā tālāk ievadiet to, kas jums jau ir.

    Dalībnieku zona

    un jūsu e-pasta adrese ir .

    Panākumi"; atbalss"

    Tagad mēs jūs novirzām uz dalībnieku apgabalu.

    "; atbalss" "; ) cits ( atbalss "

    Kļūda

    "; atbalss"

    Diemžēl jūsu kontu nevarēja atrast. Lūdzu noklikšķiniet šeit, lai mēģinātu vēlreiz.

    "; ) ) cits ( ?>

    Dalībnieka pieteikšanās

    Paldies, ka apmeklējāt! Lūdzu, piesakieties zemāk vai noklikšķiniet šeit, lai reģistrētos.



    Cerams, ka pirmais un pēdējais koda bloks jūs pārāk nemulsinās. Tas, kas mums tagad ir jāiestājas, ir tas, ar ko jūs visi esat ieradušies šajā apmācībā - PHP kods. Mēs tagad pa vienai rindiņai izskatīsim otro sadaļu, un es paskaidrošu, kam ir paredzēts katrs šeit esošā koda bits.

    $lietotājvārds = mysql_real_escape_string($_POST["lietotājvārds"]); $parole = md5(mysql_real_escape_string($_POST["parole"]));

    Šim nolūkam ir jāpaskaidro divas funkcijas. Pirmkārt, mysql_real_escape_string - ļoti noderīga funkcija datu bāzes ievades tīrīšanai. Tas nav drošs pasākums, taču tas neļaus atrasties lielākajai daļai ļaunprātīgo hakeru, atņemot nevēlamās daļas no visa, kas ir ievietots mūsu pieteikšanās veidlapā. Otrkārt, md5. Šeit nebūtu iespējams iedziļināties sīkāk, taču šī funkcija vienkārši šifrē visu, kas tai tiek nodots - šajā gadījumā lietotāja paroli -, lai novērstu to, ka ziņkārīgie skati to nolasa.

    $checklogin = mysql_query("SELECT * FROM users WHERE Lietotājvārds = "".$lietotājvārds."" UN Parole = "".$parole."""); if(mysql_num_rows($checklogin) == 1) ( $rinda = mysql_fetch_array($checklogin); $e-pasts = $row["E-pasta adrese"]; $_SESSION["Lietotājvārds"] = $lietotājvārds; $_SESSION["E-pasta adrese"] = $e-pasts; $_SESSION["Pieteicies"] = 1;

    Šeit ir mūsu pieteikšanās koda kodols; pirmkārt, mēs izpildām vaicājumu savā datubāzē. Šajā vaicājumā mēs meklējam visu, kas attiecas uz dalībnieku, kura lietotājvārds un parole atbilst mūsu $lietotājvārda un $paroles vērtībām, ko lietotājs ir norādījis. Nākamajā rindā mums ir if paziņojums, kurā mēs pārbaudām, cik daudz rezultātu esam saņēmuši - ja rezultātu nav, šī sadaļa netiks apstrādāta. Bet, ja ir rezultāts, mēs zinām, ka lietotājs pastāv, un tāpēc mēs viņu pieteiksim.

    Nākamās divas rindas ir paredzētas lietotāja e-pasta adreses iegūšanai. Mums jau ir šī informācija no jau izpildītā vaicājuma, lai mēs varētu viegli piekļūt šai informācijai. Pirmkārt, mēs iegūstam datu masīvu, kas ir izgūts no datu bāzes - šajā gadījumā mēs izmantojam PHP funkciju mysql_fetch_array, pēc tam lauka EmailAddress vērtību esmu piešķīris mainīgajam, ko mēs izmantojam vēlāk.

    Tagad mēs uzstādām sesiju. Mēs saglabājam lietotāja lietotājvārdu un e-pasta adresi sesijā, kā arī īpašu vērtību, lai mēs zinātu, ka viņš ir pieteicies, izmantojot šo veidlapu. Kad tas viss ir pateikts un izdarīts, viņi tiks novirzīti uz Dalībnieku apgabalu, izmantojot META REFRESH kodā.

    Tātad, kāds mūsu projekts šobrīd izskatās lietotājam?

    Lieliski! Ir pienācis laiks turpināt darbu, lai pārliecinātos, ka cilvēki patiešām var piekļūt jūsu vietnei.

    Ļaujiet cilvēkiem reģistrēties

    Tas viss ir labi, ja jūsu vietnē ir pieteikšanās veidlapa, taču tagad mums ir jāļauj lietotājiem to izmantot — mums ir jāizveido pieteikšanās veidlapa. Izveidojiet failu ar nosaukumu register.php un ievietojiet tajā šādu kodu.

    Lietotāju pārvaldības sistēma (Toms Kamerons NetTuts)

    Kļūda"; atbalss"

    Atvainojiet, šis lietotājvārds ir aizņemts. Lūdzu, atgriezieties un mēģiniet vēlreiz.

    "; ) else ( $registerquery = mysql_query("INSERT INTO lietotāji (lietotājvārds, parole, e-pasta adrese) VALUES("".$lietotājvārds."", "".$parole.", "".$email."") " ); if($registerquery) ( echo "

    Panākumi

    "; atbalss"

    Jūsu konts tika veiksmīgi izveidots. Lūdzu noklikšķiniet šeit, lai pieteiktos.

    "; ) cits ( atbalss "

    Kļūda

    "; atbalss"

    Atvainojiet, jūsu reģistrācija neizdevās. Lūdzu, atgriezieties un mēģiniet vēlreiz.

    "; ) ) ) cits ( ?>

    Reģistrēties

    Lūdzu, ievadiet savu informāciju zemāk, lai reģistrētos.




    Tātad šajā sadaļā nav daudz jauna PHP, ko mēs vēl neesam iemācījušies. Apskatīsim šo SQL vaicājumu un noskaidrosim, vai mēs varam noskaidrot, ko tas dara.

    $registerquery = mysql_query("INSERT INTO lietotājiem (lietotājvārds, parole, e-pasta adrese) VALUES("".$lietotājvārds.", "".$parole.", "".$e-pasts."")");

    Tātad, šeit mēs pievienojam lietotāju mūsu datubāzei. Šoreiz datu izgūšanas vietā mēs tos ievietojam; tāpēc vispirms norādām, kurās kolonnās ievadām datus (neaizmirstiet, mūsu UserID automātiski palielināsies). Apgabalā VALUES() mēs pasakot, kas jāievieto katrā kolonnā; šajā gadījumā mūsu mainīgie, kas iegūti no lietotāja ievades. Tātad, izmēģināsim; Kad esat izveidojis kontu savā pavisam jaunajā reģistrācijas veidlapā, šeit ir tas, ko redzēsit dalībnieka apgabalā.

    Pārliecinieties, ka viņi var atteikties

    Mēs esam gandrīz šīs sadaļas beigās, taču ir vēl viena lieta, kas mums ir nepieciešama, pirms mēs šeit esam paveikuši — veids, kā lietotāji var atteikties no saviem kontiem. Tas ir ļoti vienkārši izdarāms (mums par laimi); izveidojiet jaunu failu ar nosaukumu logout.php un ievadiet tajā sekojošo.

    Šajā gadījumā mēs vispirms atiestatām globālo $_SESSION masīvu un pēc tam pilnībā iznīcinām sesiju.

    Un tās ir šīs sadaļas beigas un PHP koda beigas. Tagad pāriesim uz pēdējo sadaļu.

    3. darbība — izveidojiet stilu

    Es šajā sadaļā neko daudz nepaskaidrošu — ja jūs nesaprotat HTML/CSS, es ļoti ieteiktu, kad no daudzajām lieliskajām pamācībām šajā vietnē, lai jūs varētu sākt darbu. Izveidojiet jaunu failu ar nosaukumu style.css un ievadiet tajā sekojošo; tas veidos visu līdz šim izveidoto lapu stilu.

    * ( piemale: 0; polsterējums: 0; ) pamatteksts ( fontu saime: Trebuchet MS; ) a ( krāsa: #000; ) a:virs, a:active, a:visited ( text-decoration: none; ) #main (platums: 780 pikseļi; piemale: 0 automātiska; mala augšdaļa: 50 pikseļi; polsterējums: 10 pikseļi; apmale: 1 pikseļi ciets #CCC; fona krāsa: #EEE; ) veidlapas laukkopa ( apmale: 0; ) formas laukkopa p br ( skaidrs: pa kreisi; ) etiķete ( malas augšdaļa: 5 pikseļi; displejs: bloks; platums: 100 pikseļi; polsterējums: 0; pludiņš: pa kreisi; ) ievade ( fontu saime: Trebuchet MS; apmale: 1px solid #CCC; mala apakšā: 5 pikseļi; fona krāsa: #FFF; polsterējums: 2 pikseļi; ) ievade: kursors (apmale: 1 px ciets #222; fona krāsa: #EEE; )

    Tagad apskatīsim dažus ekrānuzņēmumus par to, kā vajadzētu izskatīties mūsu gala projektam:

    Pieteikšanās forma.

    Dalībnieku apgabals.

    Reģistrācijas veidlapa.

    Un visbeidzot...

    Un tas arī viss! Tagad jums ir dalībnieku zona, kuru varat izmantot savā vietnē. Es redzu, ka daudzi cilvēki krata galvas un kliedz uz monitoriem, ka viņiem tas nav jēga — jums ir taisnība. Bet es ceru, ka ikviens PHP iesācējs ir iemācījies pamatus, kā izmantot datubāzi un kā izmantot sesijas informācijas glabāšanai. Būtiskas prasmes, lai izveidotu jebkuru tīmekļa lietojumprogrammu.

    • Abonējiet NETTUTS RSS plūsmu, lai iegūtu vairāk ikdienas tīmekļa izstrādes ieteikumu un rakstu.

    Šodien mēs apskatīsim populārās CMS Joomla kritiskās 1 dienas ievainojamības izmantošanu, kas oktobra beigās eksplodēja internetā. Mēs runāsim par ievainojamībām ar skaitļiem CVE-2016-8869, CVE-2016-8870 Un CVE-2016-9081. Visi trīs nāk no viena koda fragmenta, kas piecus ilgus gadus nīkuļoja sistēmas dziļumos, gaidot spārnos, lai pēc tam atbrīvotos un nestu sev līdzi haosu, uzlauztas vietnes un šīs Joomla nevainīgo lietotāju asaras. Tikai drosmīgākie un drosmīgākie izstrādātāji, kuriem acis ir sarkanas no monitoru gaismas un kuru klaviatūras ir nosētas ar maizes drupačām, spēja izaicināt trakojošos ļaunos garus un nolikt galvu uz labojumu altāra.

    BRĪDINĀJUMS

    Visa informācija tiek sniegta tikai informatīviem nolūkiem. Ne redaktori, ne autors nav atbildīgi par iespējamo kaitējumu, ko nodara šī raksta materiāli.

    Kur tas viss sākās

    2016. gada 6. oktobrī Demis Palma izveidoja tēmu Stack Exchange, kurā jautāja: kāpēc patiesībā Joomla versijā 3.6 ir divas metodes lietotāju reģistrēšanai ar vienādu vārdu register()? Pirmais atrodas UsersControllerRegistration kontrollerī, bet otrais ir UsersControllerUser kontrollerī. Damis vēlējās uzzināt, vai kaut kur tika izmantota metode UsersControllerUser::register(), vai tas ir tikai evolūcijas anahronisms, kas palicis pāri no vecās loģikas. Viņa bažas bija par to, ka pat tad, ja šo metodi neizmanto neviens skats, to var izsaukt ar izstrādātu vaicājumu. Uz ko es saņēmu atbildi no izstrādātāja ar segvārdu itoctopus, kurš apstiprināja: problēma patiešām pastāv. Un nosūtīja ziņojumu Joomla izstrādātājiem.

    Tad notikumi attīstījās visstraujāk. 18. oktobrī Joomla izstrādātāji pieņēma ziņojumu no Damis, kurš līdz tam laikam bija izstrādājis PoC, kas ļautu reģistrēties. Viņš savā tīmekļa vietnē publicēja piezīmi, kurā viņš vispārīgi runāja par atrasto problēmu un savām domām par šo jautājumu. Tajā pašā dienā tiek izlaista jauna Joomla 3.6.3 versija, kurā joprojām ir ievainojams kods.

    Pēc tam Davide Tampellini izvērš kļūdu līdz tādam līmenim, ka reģistrē nevis vienkāršu lietotāju, bet gan administratoru. Un 21. oktobrī Joomla drošības komandai nonāk jauna lieta. Tas jau runā par privilēģiju palielināšanu. Tajā pašā dienā Joomla vietnē parādās paziņojums, ka otrdien, 25. oktobrī, tiks izlaista nākamā versija ar sērijas numuru 3.6.3, kas izlabo kritisko ievainojamību sistēmas kodolā.

    25. oktobris Joomla Security Strike Team atrod jaunāko problēmu, ko radījis Damis atklātais koda fragments. Pēc tam 21. oktobrī datēta apņemšanās ar neuzkrītošo nosaukumu Prepare 3.6.4 Stable Release tiek ievietota oficiālās Joomla repozitorija galvenajā atzarā, kas novērš nelaimīgo kļūdu.

    Pēc šī iznākšanas izstrādātāju kopienai pievienojas daudzas ieinteresētas personas - viņi sāk popularizēt ievainojamību un sagatavot izlietojumus.

    27. oktobrī pētnieks Harijs Robertss augšupielādē Xiphos Research repozitorijā gatavu izlietojumu, kas var augšupielādēt PHP failu serverī ar ievainojamu CMS.

    Sīkāka informācija

    Nu, fons ir beidzies, pāriesim pie interesantākās daļas - ievainojamības analīzes. Joomla 3.6.3 instalēju kā testa versiju, tāpēc šai versijai būs aktuāli visi rindiņu numuri. Un visi ceļi uz failiem, kurus redzēsit tālāk, tiks norādīti attiecībā pret instalētās CMS sakni.

    Pateicoties Damis Palma atklājumam, mēs zinām, ka ir divas metodes, kas veic lietotāja reģistrāciju sistēmā. Pirmo izmanto SPS, un tas atrodas failā /components/com_users/controllers/registration.php:108. Otrais (tā, kas mums būs jāizsauc) atrodas mapē /components/com_users/controllers/user.php:293. Apskatīsim to tuvāk.

    286: /** 287: * Lietotāja reģistrēšanas metode. 288: * 289: * @return Būla 290: * 291: * @no 1.6 292: */ 293: publisks funkciju reģistrs() 294: ( 295: JSession::checkToken("post") vai jexit(JText::_ ("JINVALID_TOKEN")); ... 300: // Iegūstiet veidlapas datus. 301: $data = $this->input->post->get("lietotājs", masīvs(), "masīvs"); . .. 315: $return = $model->validate($form, $data); 316: 317: // Pārbaudiet, vai nav kļūdu. 318: if ($return === false) 319: ( ... 345: / / Pabeigt reģistrāciju 346: $return = $model->register($data);

    Šeit es atstāju tikai interesantas rindas. Ievainojamās metodes pilno versiju var apskatīt Joomla repozitorijā.

    Izdomāsim, kas notiek parastas lietotāja reģistrācijas laikā: kādi dati tiek nosūtīti un kā tie tiek apstrādāti. Ja iestatījumos ir iespējota lietotāja reģistrācija, veidlapu var atrast vietnē http://joomla.local/index.php/component/users/?view=registration.


    Leģitīms lietotāja reģistrācijas pieprasījums izskatās kā šāds ekrānuzņēmums.


    Komponents com_users ir atbildīgs par darbu ar lietotājiem. Pievērsiet uzmanību uzdevuma parametram pieprasījumā. Tam ir formāts $controller.$method . Apskatīsim failu struktūru.

    Mapē esošo skriptu nosaukumi kontrolieri atbilst izsaukto kontrolieru nosaukumiem. Tā kā mūsu pieprasījumā tagad ir ietverts $controller = "registration" , fails tiks izsaukts reģistrācija.php un tā reģistra() metode.

    Uzmanību, jautājums: kā pārcelt reģistrācijas apstrādi uz neaizsargātu vietu kodā? Jūs droši vien jau to uzminējāt. Ievainojamo un reālo metožu nosaukumi ir vienādi (reģistrs), tāpēc mums vienkārši jāmaina izsauktā kontroliera nosaukums. Kur atrodas mūsu neaizsargātais kontrolieris? Tieši tā, failā lietotājs.php. Izrādās $controller = "lietotājs" . Saliekot visu kopā, iegūstam uzdevumu = user.register . Tagad reģistrācijas pieprasījums tiek apstrādāts ar mums nepieciešamo metodi.


    Otra lieta, kas mums jādara, ir nosūtīt datus pareizajā formātā. Šeit viss ir vienkārši. Legitimate register() sagaida no mums masīvu ar nosaukumu jform , kurā mēs nododam reģistrācijas datus - vārdu, pieteikumvārdu, paroli, e-pastu (skatiet ekrānuzņēmumu ar pieprasījumu).

    • /components/com_users/controllers/registration.php: 124: // Iegūstiet lietotāja datus. 125: $requestData = $this->input->post->get("jform", array(), "masīvs");

    Mūsu klients iegūst šos datus no masīva, ko sauc par lietotāju.

    • /components/com_users/controllers/user.php: 301: // Iegūstiet veidlapas datus. 302: $dati = $this->input->post->get("lietotājs", masīvs(), "masīvs");

    Tāpēc mēs mainām visu pieprasījuma parametru nosaukumus no jfrom uz user .

    Mūsu trešais solis ir atrast derīgu CSRF marķieri, jo bez tā reģistrācijas nebūs.

    • /components/com_users/controllers/user.php: 296: JSession::checkToken("post") vai jexit(JText::_("JINVALID_TOKEN"));

    Tas izskatās pēc MD5 jaucējkoda, un jūs varat to iegūt, piemēram, no vietnes /index.php/component/users/?view=login autorizācijas veidlapas.


    Tagad jūs varat izveidot lietotājus, izmantojot vēlamo metodi. Ja viss izdevās, tad apsveicam - jūs tikko izmantojāt ievainojamību CVE-2016-8870"Trūkst atļauju pārbaudes jaunu lietotāju reģistrēšanai."

    Lūk, kā tas izskatās UsersControllerRegistration kontrollera “darba” reģistra() metodē:

    • /components/com_users/controllers/registration.php: 113: // Ja reģistrācija ir atspējota — novirzīt uz pieteikšanās lapu. 114: if (JComponentHelper::getParams("com_users")->get("allowUserRegistration") == 0) 115: ( 116: $this->setRedirect(JRoute::_("index.php?option=com_users&view= pieteikšanās", false)); 117: 118: atgriezties false; 119: )

    Un tā neaizsargātajos:

    • /components/com_users/controllers/user.php:

    Jā, nekādā gadījumā.

    Lai saprastu otru, daudz nopietnāku problēmu, nosūtīsim mūsu izveidoto pieprasījumu un paskatīsimies, kā tas tiek izpildīts dažādās koda daļās. Šeit ir daļa, kas ir atbildīga par lietotāja iesniegto datu validāciju darbinieka metodē:

    Turpinājums pieejams tikai biedriem

    1. iespēja. Pievienojieties “vietnes” kopienai, lai lasītu visus vietnes materiālus

    Dalība kopienā noteiktajā laika posmā nodrošinās piekļuvi VISIEM Hacker materiāliem, palielinās jūsu personīgo kumulatīvo atlaidi un ļaus jums uzkrāt profesionālu Xakep Score vērtējumu!

    Sveiki! Tagad mēs mēģināsim ieviest vienkāršāko reģistrāciju vietnē, izmantojot PHP + MySQL. Lai to izdarītu, datorā ir jāinstalē Apache. Mūsu skripta darbības princips ir parādīts zemāk.

    1. Sāksim ar lietotāju tabulas izveidi datu bāzē. Tajā būs lietotāja dati (pieteikšanās vārds un parole). Dodieties uz phpmyadmin (ja veidojat datu bāzi savā datorā http://localhost/phpmyadmin/). Izveidojiet tabulu lietotājiem, tajā būs 3 lauki.

    Es to veidoju mysql datu bāzē, jūs varat izveidot citā datu bāzē. Pēc tam iestatiet vērtības, kā parādīts attēlā:

    2. Nepieciešams savienojums ar šo tabulu. Izveidosim failu bd.php. Tās saturs:

    $db = mysql_connect("jūsu MySQL serveris","pieteikšanās šim serverim","šī servera parole");
    mysql_select_db ("tās datu bāzes nosaukums, ar kuru mēs izveidojam savienojumu", $ db);
    ?>

    Manā gadījumā tas izskatās šādi:

    $db = mysql_connect("localhost","lietotājs","1234");
    mysql_select_db("mysql",$db);
    ?>

    Saglabāt bd.php.
    Lieliski! Mums datu bāzē ir tabula un savienojums ar to. Tagad varat sākt veidot lapu, kurā lietotāji atstās savus datus.

    3. Izveidojiet reg.php failu ar saturu (visi komentāri):



    Reģistrācija


    Reģistrācija
















    4. Izveidojiet failu, kas ievadīs datus datu bāzē un saglabās lietotāju. save_user.php(iekšpusē komentāri):



    {
    }
    //ja ir ievadīts pieteikumvārds un parole, mēs tos apstrādājam, lai tagi un skripti nedarbotos, jūs nekad nezināt, ko cilvēki var ievadīt


    //noņemiet papildu atstarpes
    $pieteikšanās = trim($login);
    $parole = trim($parole);
    // izveidot savienojumu ar datu bāzi
    // pārbaudiet, vai nav lietotāja ar tādu pašu pieteikumvārdu
    $result = mysql_query("SELECT id FROM users WHERE login="$login"",$db);
    if (!empty($myrow["id"])) (
    exit("Atvainojiet, ievadītais pieteikšanās vārds jau ir reģistrēts. Lūdzu, ievadiet citu pieteikumvārdu.");
    }
    // ja tas tā nav, tad saglabājiet datus
    $result2 = mysql_query("INSERT INTO lietotājiem (pieteikšanās, parole) VALUES("$pieteikšanās","$parole")");
    // Pārbaudiet, vai nav kļūdu
    ja ($rezultāts2=="TRUE")
    {
    echo "Jūs esat veiksmīgi reģistrējies! Tagad varat iekļūt vietnē. Mājas lapa";
    }
    cits(
    echo "Kļūda! Jūs neesat reģistrējies.";
    }
    ?>

    5. Tagad mūsu lietotāji var reģistrēties! Tālāk jums ir jāizveido “durvis”, lai jau reģistrētie lietotāji varētu iekļūt vietnē. indekss.php(iekšpusē komentāri):

    // visa procedūra darbojas sesijās. Tajā tiek glabāti lietotāja dati, kamēr viņš atrodas vietnē. Ir ļoti svarīgi tos palaist pašā lapas sākumā!!!
    session_start();
    ?>


    Mājas lapa


    Mājas lapa











    Reģistrēties



    // Pārbaudiet, vai pieteikšanās un lietotāja ID mainīgie ir tukši
    ja (tukšs($_SESSION["pieteikšanās"]) vai tukšs($_SESSION["id"]))
    {
    // Ja tukšs, tad saiti nerādījam
    atbalss "Jūs esat pieteicies kā viesis
    Šī saite ir pieejama tikai reģistrētiem lietotājiem”;
    }
    cits
    {

    Failā indekss.php Mēs parādīsim saiti, kas būs atvērta tikai reģistrētiem lietotājiem. Tā ir visa skripta būtība – ierobežot piekļuvi jebkuriem datiem.

    6. Paliek fails ar ievadītā pieteikumvārda un paroles pārbaudi. testreg.php (iekšpusē komentāri):

    session_start();// visa procedūra darbojas uz sesijām. Tajā tiek glabāti lietotāja dati, kamēr viņš atrodas vietnē. Ir ļoti svarīgi tos palaist pašā lapas sākumā!!!
    if (isset($_POST["pieteikšanās"])) ( $login = $_POST["pieteikšanās"]; if ($login == "") ( unset($login);) ) //ievadiet ievadīto pieteikumvārdu lietotājam $login mainīgajā, ja tas ir tukšs, tad iznīciniet mainīgo
    if (isset($_POST["parole"])) ( $password=$_POST["parole"]; if ($password =="") ( unset($password);) )
    //ievietojiet lietotāja ievadīto paroli mainīgajā $password, ja tas ir tukšs, tad iznīciniet mainīgo
    if (empty($login) or empty($password)) //ja lietotājs nav ievadījis pieteikumvārdu vai paroli, tad izdodam kļūdu un apturam skriptu
    {
    exit("Jūs neesat ievadījis visu informāciju, dodieties atpakaļ un aizpildiet visus laukus!");
    }
    //ja ir ievadīts pieteikumvārds un parole, mēs tos apstrādājam, lai tagi un skripti nedarbotos, jūs nekad nezināt, ko cilvēki var ievadīt
    $pieteikšanās = stripslashes($login);
    $login = htmlspecialchars($login);
    $parole = strīpas($parole);
    $parole = htmlspecialchars($parole);
    //noņemiet papildu atstarpes
    $pieteikšanās = trim($login);
    $parole = trim($parole);
    // izveidot savienojumu ar datu bāzi
    include("bd.php");// failam bd.php ir jāatrodas tajā pašā mapē kā visiem pārējiem, ja tā nav, vienkārši mainiet ceļu

    $result = mysql_query("SELECT * FROM users WHERE login="$login"",$db); //izgūt no datu bāzes visus datus par lietotāju ar ievadīto pieteikšanos
    $myrow = mysql_fetch_array($rezultāts);
    if (tukšs($myrow["parole"]))
    {
    //ja lietotājs ar ievadīto pieteikumvārdu neeksistē
    }
    cits(
    //ja pastāv, pārbaudiet paroles
    if ($myrow["parole"]==$parole) (
    //ja paroles sakrīt, tad palaižam lietotājam sesiju! Jūs varat viņu apsveikt, viņš iekļuva!
    $_SESSION["pieteikšanās"]=$myrow["pieteikšanās"];
    $_SESSION["id"]=$myrow["id"];//šie dati tiek izmantoti ļoti bieži, tāpēc pieteicies lietotājs tos “nesīs sev līdzi”
    echo "Jūs esat veiksmīgi ienācis vietnē! Mājas lapa";
    }
    cits(
    //ja paroles nesakrīt

    Iziet ("Atvainojiet, ievadītais pieteikumvārds vai parole nav pareizs.");
    }
    }
    ?>

    Labi, tagad viss ir beidzies! Nodarbība var būt garlaicīga, bet ļoti noderīga. Šeit tiek parādīta tikai reģistrācijas ideja, pēc tam varat to uzlabot: pievienot aizsardzību, dizainu, datu laukus, ielādēt iemiesojumus, izrakstīties no konta (lai to izdarītu, vienkārši iznīciniet sesijas mainīgos ar funkciju atiestatīts) un tā tālāk. Veiksmi!

    Es visu pārbaudīju, darbojas pareizi!

    Jaunums vietnē

    >

    Populārākais