Bahay Pagpapagaling ng ngipin ng mga bata Executive registration php. Simpleng sistema ng pagpaparehistro ng user

Executive registration php. Simpleng sistema ng pagpaparehistro ng user

Ang paglikha ng isang site na batay sa pagiging miyembro ay tila isang nakakatakot na gawain sa una. Kung sakaling gusto mong gawin ito nang mag-isa, pagkatapos ay sumuko ka nang magsimula kang mag-isip kung paano mo ito pagsasama-samahin gamit ang iyong mga kasanayan sa PHP, kung gayon ang artikulong ito ay para sa iyo. Gagabayan ka namin sa bawat aspeto ng paglikha ng site na batay sa membership, na may secure na member area na protektado ng password.

Ang buong proseso ay binubuo ng dalawang malalaking bahagi: pagpaparehistro ng user at pagpapatunay ng user. Sa unang bahagi, tatalakayin natin ang paglikha ng form ng pagpaparehistro at pag-iimbak ng data sa isang database ng MySQL. Sa ikalawang bahagi, gagawa kami ng form sa pag-login at gagamitin ito upang payagan ang mga user na ma-access sa secure na lugar.

I-download ang code

Maaari mong i-download ang buong source code para sa registration/login system mula sa link sa ibaba:

Configuration at Upload
Ang ReadMe file ay naglalaman ng mga detalyadong tagubilin.

Buksan ang source\include\membersite_config.php file sa isang text editor at i-update ang configuration. (Pag-login sa database, pangalan ng iyong website, iyong email address atbp).

I-upload ang buong nilalaman ng direktoryo. Subukan ang register.php sa pamamagitan ng pagsusumite ng form.

Ang registration form

Upang makalikha ng user account, kailangan naming mangalap ng kaunting impormasyon mula sa user. Kailangan namin ang kanyang pangalan, ang kanyang email address at ang kanyang gustong username at password. Siyempre, maaari kaming humingi ng higit pang impormasyon sa puntong ito, ngunit ang isang mahabang form ay palaging isang turn-off. Kaya limitahan natin ang ating sarili sa mga larangang iyon lamang.

Narito ang registration form:

Magrehistro

Kaya, mayroon kaming mga text field para sa pangalan, email at password. Tandaan na ginagamit namin ang para sa mas mahusay na kakayahang magamit.

Pagpapatunay ng form

Sa puntong ito, magandang ideya na maglagay ng ilang code sa pagpapatunay ng form, kaya tinitiyak namin na mayroon kami ng lahat ng data na kinakailangan upang gawin ang user account. Kailangan nating suriin kung ang pangalan at email, at password ay napunan at ang email ay nasa tamang format.

Pangangasiwa sa pagsusumite ng form

Ngayon kailangan nating hawakan ang data ng form na isinumite.

Narito ang pagkakasunod-sunod (tingnan ang file na fg_membersite.php sa na-download na pinagmulan):

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

Una, pinapatunayan namin ang pagsusumite ng form. Pagkatapos ay kinokolekta namin at 'sina-sanitize' ang data ng pagsusumite ng form (palaging gawin ito bago magpadala ng email, i-save sa database atbp). Ang pagsusumite ng form ay pagkatapos ay nai-save sa talahanayan ng database. Nagpapadala kami ng email sa user na humihiling ng kumpirmasyon. Pagkatapos ay ipinakilala namin ang admin na nakarehistro ang isang user.

Pag-save ng data sa database

Ngayon na natipon namin ang lahat ng data, kailangan naming iimbak ito sa database.
Narito kung paano namin i-save ang pagsusumite ng form sa database.

function na SaveToDatabase(&$formvars) ( if(!$this->DBLogin()) ($this->HandleError("Database login failed!"); return false; ) if(!$this->Ensuretable()) ( return false; ) if(!$this->IsFieldUnique($formvars,"email")) ( $this->HandleError("This email is already registered"); return false; ) if(!$this->IsFieldUnique( $formvars,"username")) ( $this->HandleError("Nagamit na ang UserName na ito. Subukan ang ibang username"); return false; ) if(!$this->InsertIntoDB($formvars)) ( $this- >HandleError("Nabigo ang pagpasok sa Database!");

Tandaan na na-configure mo ang mga detalye ng pag-login sa Database sa membersite_config.php file. Karamihan sa mga kaso, maaari mong gamitin ang "localhost" para sa database host.
Pagkatapos mag-log in, tinitiyak namin na ang talahanayan ay umiiral. (Kung hindi, ang script ay gagawa ng kinakailangang talahanayan).
Pagkatapos ay tinitiyak namin na ang username at email ay natatangi. Kung hindi ito natatangi, ibinabalik namin ang error sa gumagamit.

Ang istraktura ng talahanayan ng database

Ito ang istraktura ng talahanayan. Ang CreateTable() function sa fg_membersite.php file ay lumilikha ng talahanayan. Narito ang code:

function na CreateTable() ($qry = "Gumawa ng Table $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 ," "username VARCHAR(16) NOT NULL ," "password VARCHAR(32) NOT NULL ," "confirmcode VARCHAR(32) ," " ")" if(!mysql_query($qry,$ this->connection)) ( $this->HandleDBError("Error making the table \nquery was\n $qry"); return false; ) return true )

Ang field ng id_user ay maglalaman ng natatanging id ng user, at ito rin ang pangunahing key ng talahanayan. Pansinin na pinapayagan namin ang 32 character para sa field ng password. Ginagawa namin ito dahil, bilang karagdagang hakbang sa seguridad, iimbak namin ang password sa database na naka-encrypt gamit ang MD5. Pakitandaan na dahil ang MD5 ay isang one-way na paraan ng pag-encrypt, hindi namin mababawi ang password kung sakaling makalimutan ito ng user.

Ang pagpasok ng pagpaparehistro sa talahanayan

Narito ang code na ginagamit namin upang magpasok ng data sa database. Magagamit namin ang lahat ng aming data sa hanay ng $formvars.

function na InsertIntoDB(&$formvars) ($confirmcode = $this->MakeConfirmationMd5($formvars["email"]);$insert_query = "insert into ".$this->tablename."(pangalan, email, username, password, confirmcode) values ​​​​("" . $this->SanitizeForSQL($formvars["name"]) . "", "" . $this->SanitizeForSQL($formvars["email"]) . "", "" . $ this->SanitizeForSQL($formvars["username"]) "", "" $insert_query ,$this->connection)) ( $this->HandleDBError("Error sa pagpasok ng data sa table\nquery:$insert_query"); return false; ) return true )

Pansinin na ginagamit namin ang PHP function na md5() upang i-encrypt ang password bago ito ipasok sa database.
Gayundin, ginagawa namin ang natatanging confirmation code mula sa email address ng user.

Nagpapadala ng mga email

Ngayong mayroon na kaming pagpaparehistro sa aming database, magpapadala kami ng email ng kumpirmasyon sa user. Kailangang i-click ng user ang isang link sa confirmation email para makumpleto ang proseso ng pagpaparehistro.

function SendUserConfirmationEmail(&$formvars) ($mailer = new PHPMailer(); $mailer->CharSet = "utf-8"; $mailer->AddAddress($formvars["email"],$formvars["name"]) ; $mailer->Subject = "Ang iyong pagpaparehistro gamit ang ".$this->sitename->From = $this->GetFromAddress(); $confirmcode = urlencode($this->MakeConfirmationMd5($formvars["email"; ])); $confirm_url = $this->GetAbsoluteURLFolder()."/confirmreg.php?code=".$confirmcode; n\r\n". "Salamat sa iyong pagpaparehistro gamit ang ".$this->sitename."\r\n". "Paki-click ang link sa ibaba upang kumpirmahin ang iyong pagpaparehistro.\r\n." "$confirm_url\r \n". "\r\n". "Pagbati,\r\n". "Webmaster\r\n". $this->sitename; if(!$mailer->Send()) ($this-> HandleError("Nabigong magpadala ng email ng kumpirmasyon sa pagpaparehistro.");

Mga update

ika-9 ng Ene, 2012
Idinagdag ang mga tampok ng I-reset ang Password/Baguhin ang Password
Ibinahagi na ngayon ang code sa GitHub.

Maligayang pagbabalikUserFullName(); ?>!

Lisensya


Ibinahagi ang code sa ilalim ng lisensya ng LGPL. Malayang magagamit mo ito sa mga komersyal o hindi pangkomersyal na website.

Walang kaugnay na mga post.

Ang mga komento sa entry na ito ay sarado.

Upang hatiin ang mga bisita sa site sa ilang partikular na grupo, kailangang mag-install ng maliit na sistema sa site pagpaparehistro sa php. Sa ganitong paraan, may kondisyon kang hinahati ang mga bisita sa dalawang grupo ng mga random na bisita at sa isang mas may pribilehiyong grupo ng mga user kung kanino ka nagbibigay ng mas mahalagang impormasyon.

Sa karamihan ng mga kaso, ginagamit ang isang mas pinasimpleng sistema ng pagpaparehistro, na nakasulat sa php sa isang file magparehistro.php.

Kaya, lumihis kami ng kaunti, at ngayon ay titingnan namin ang file ng pagpaparehistro.

Register.php file

Upang matiyak na hindi ito aabutin ng maraming oras mo, gagawa kami ng system na mangongolekta ng mga user, tumatanggap ng kaunting impormasyon sa pakikipag-ugnayan mula sa kanila. SA sa kasong ito Ipapasok namin ang lahat sa mysql database. Para sa pinakamataas na bilis ng database, gagawa kami ng talahanayan ng mga user sa format na MyISAM at sa utf-8 encoding.

Tandaan! Ang lahat ng mga script ay dapat palaging nakasulat sa parehong pag-encode. Ang lahat ng mga file ng site at ang database ng MySql ay dapat nasa parehong pag-encode. Ang pinakakaraniwang pag-encode ay UTF-8 at Windows-1251.

Bakit kailangan mong isulat ang lahat sa isang pag-encode na pag-uusapan natin mamaya. Sa ngayon, gawing mahigpit na panuntunan ang impormasyong ito para sa paggawa ng mga script, kung hindi, magkakaroon ka ng mga problema sa mga script sa hinaharap. Okay lang, siyempre, pero mawawalan ka lang ng maraming oras sa paghahanap ng mga error sa script.

Paano gagana ang script mismo?

Gusto naming gawing simple ang lahat at makakuha ng mabilis na resulta. Samakatuwid, makakatanggap lamang kami ng login, email at password mula sa mga user. At para maprotektahan laban sa mga spam robot, mag-i-install kami ng maliit na captcha. Kung hindi, ang ilang batang lalaki mula sa London ay magsusulat ng isang maliit na robot parser na pupunuin ang buong database ng mga pekeng user sa loob ng ilang minuto, at magagalak sa kanyang henyo at kawalan ng parusa.

Narito ang script mismo. Ang lahat ay naitala sa isang file magparehistro.php:

! `; // pulang tandang pananong $sha=$sh."scripts/pro/"; //path sa pangunahing folder $bg=` bgcolor="#E1FFEB"`; // kulay ng background ng mga row?> Halimbawa ng script ng pagpaparehistro register.php style.css" />

Sa kasong ito, ang script ay tumutukoy sa sarili nito. At ito ay isang form at isang processor ng data na ipinasok sa form. Pakitandaan na ang file ay naka-compress bilang zip archive at naglalaman ng configuration file na config.php, isang database ng user dump, isang file na naglalaman ng mga auxiliary function functions.php, isang style file style.css at ang register.php file mismo. Mayroon ding ilang mga file na responsable para sa pagpapatakbo at pagbuo ng mga simbolo ng captcha.

Kamusta! Ngayon ay susubukan naming ipatupad ang pinakasimpleng pagpaparehistro sa site na may gamit ang PHP+ MySQL. Upang gawin ito, dapat na naka-install ang Apache sa iyong computer. Ang prinsipyo ng pagtatrabaho ng aming script ay ipinapakita sa ibaba.

1. Magsimula tayo sa paglikha ng talahanayan ng mga gumagamit sa database. Maglalaman ito ng data ng gumagamit (pag-login at password). Pumunta tayo sa phpmyadmin (kung gumagawa ka ng database sa iyong PC http://localhost/phpmyadmin/). Gumawa ng table mga gumagamit, magkakaroon ito ng 3 field.

Ginagawa ko ito sa mysql database, maaari mo itong gawin sa ibang database. Susunod, itakda ang mga halaga tulad ng sa figure:

2. Kinakailangan ang koneksyon sa talahanayang ito. Gumawa tayo ng file bd.php. Ang nilalaman nito:

$db = mysql_connect("iyong MySQL server","mag-login para sa server na ito", "password para sa server na ito");
mysql_select_db ("pangalan ng database kung saan kami kumukonekta", $db);
?>

Sa aking kaso, ganito ang hitsura:

$db = mysql_connect("localhost","user","1234");
mysql_select_db("mysql",$db);
?>

I-save bd.php.
Malaki! Mayroon kaming isang talahanayan sa database at isang koneksyon dito. Ngayon ay maaari ka nang magsimulang lumikha ng isang pahina kung saan iiwan ng mga user ang kanilang data.

3. Lumikha ng isang reg.php file na may mga nilalaman (lahat ng mga komento sa loob):



Pagpaparehistro


Pagpaparehistro


















4. Gumawa ng file, na magpapasok ng data sa database at i-save ang user. save_user.php(mga komento sa loob):



{
}
//kung ipinasok ang login at password, pagkatapos ay pinoproseso namin ang mga ito upang hindi gumana ang mga tag at script, hindi mo alam kung ano ang maaaring ipasok ng mga tao


//alisin ang mga karagdagang espasyo
$login = trim ($login);
$password = trim ($password);
// kumonekta sa database
// suriin ang pagkakaroon ng user na may parehong login
$result = mysql_query("SELECT id FROM users WHERE login="$login"",$db);
kung (!empty($myrow["id"])) (
exit("Paumanhin, ang login na iyong ipinasok ay nakarehistro na. Mangyaring magpasok ng isa pang login.");
}
// kung hindi ito ang kaso, pagkatapos ay i-save ang data
$result2 = mysql_query("INSERT INTO users (login,password) VALUES("$login","$password")");
// Suriin kung may mga error
kung ($result2=="TRUE")
{
echo "Matagumpay kang nakarehistro! Ngayon ay maaari kang pumasok sa site. Home page";
}
iba pa(
echo "Error! Hindi ka nakarehistro.";
}
?>

5. Ngayon ang aming mga gumagamit ay maaaring magparehistro! Susunod, kailangan mong lumikha ng isang "pinto" para sa mga nakarehistrong user na makapasok sa site. index.php(mga komento sa loob):

// gumagana ang buong pamamaraan sa mga session. Ito ay kung saan naka-imbak ang data ng user habang siya ay nasa site. Napakahalaga na ilunsad ang mga ito sa pinakadulo simula ng pahina!!!
session_start();
?>


Home page


Home page











Magrehistro



// Suriin kung walang laman ang login at user id variable
kung (walang laman($_SESSION["login")]) o walang laman($_SESSION["id"]))
{
// Kung walang laman, hindi namin ipapakita ang link
echo "Naka-log in ka bilang bisita
Ang link na ito ay magagamit lamang sa mga rehistradong gumagamit";
}
iba pa
{

Nasa file index.php Magpapakita kami ng link na magbubukas lamang sa mga rehistradong user. Ito ang buong punto ng script - upang limitahan ang pag-access sa anumang data.

6. May nananatiling isang file na may pagpapatunay ng inilagay na login at password. testreg.php (mga komento sa loob):

session_start(); // gumagana ang buong procedure sa mga session. Ito ay kung saan naka-imbak ang data ng user habang siya ay nasa site. Napakahalaga na ilunsad ang mga ito sa pinakadulo simula ng pahina!!!
if (isset($_POST["login"])) ($login = $_POST["login"]; if ($login == "") ( unset($login);) ) //ipasok ang login na ipinasok ni ang user sa $login variable, kung ito ay walang laman, pagkatapos ay sirain ang variable
if (isset($_POST["password"])) ($password=$_POST["password"]; if ($password =="") ( unset ($password);) )
//ilagay ang password na inilagay ng user sa $password variable, kung ito ay walang laman, pagkatapos ay sirain ang variable
if (empty($login) or empty($password)) //kung hindi nagpasok ang user ng login o password, maglalabas kami ng error at itigil ang script
{
exit("Hindi mo nailagay ang lahat ng impormasyon, bumalik at punan ang lahat ng mga patlang!");
}
//kung ipinasok ang login at password, pagkatapos ay pinoproseso namin ang mga ito upang hindi gumana ang mga tag at script, hindi mo alam kung ano ang maaaring ipasok ng mga tao
$login = stripslashes($login);
$login = htmlspecialchars($login);
$password = stripslashes($password);
$password = htmlspecialchars($password);
//alisin ang mga karagdagang espasyo
$login = trim ($login);
$password = trim ($password);
// kumonekta sa database
include("bd.php");// ang bd.php file ay dapat nasa parehong folder tulad ng lahat ng iba pa, kung hindi, palitan lang ang path

$result = mysql_query("SELECT * FROM users WHERE login="$login"",$db); //kunin mula sa database ang lahat ng data tungkol sa user na may inilagay na login
$myrow = mysql_fetch_array($result);
kung (walang laman($myrow["password")]))
{
//kung ang user na may inilagay na login ay wala
}
iba pa(
//kung mayroon, suriin ang mga password
kung ($myrow["password"]==$password) (
//kung tumugma ang mga password, maglulunsad kami ng session para sa user! Maaari mo siyang batiin, nakapasok siya!
$_SESSION["login"]=$myrow["login"];
$_SESSION["id"]=$myrow["id"];//ang data na ito ay madalas na ginagamit, kaya ang naka-log in na user ay "dalhin ito kasama niya"
echo "Matagumpay kang nakapasok sa site! Home page";
}
iba pa(
//kung ang mga password ay hindi tugma

Exit ("Paumanhin, ang login o password na iyong inilagay ay hindi tama.");
}
}
?>

OK tapos na ang lahat Ngayon! Ang aralin ay maaaring mayamot, ngunit lubhang kapaki-pakinabang. Tanging ang ideya ng pagpaparehistro ay ipinapakita dito, pagkatapos ay maaari mong pagbutihin ito: magdagdag ng proteksyon, disenyo, mga patlang ng data, pag-load ng mga avatar, pag-log out sa account (upang gawin ito, sirain lamang ang mga variable mula sa session gamit ang function hindi nakatakda) at iba pa. Good luck!

Sinuri ko ang lahat, gumagana ito nang maayos!

Ngayon ay titingnan natin ang pagsasamantala ng isang kritikal na 1-araw na kahinaan sa sikat na CMS Joomla, na sumabog sa Internet sa katapusan ng Oktubre. Ito ay tungkol tungkol sa mga kahinaan sa mga numero CVE-2016-8869, CVE-2016-8870 At CVE-2016-9081. Lahat ng tatlo ay nagmula sa isang piraso ng code na humina sa kaibuturan ng framework sa loob ng limang mahabang taon, naghihintay sa mga pakpak, at pagkatapos ay kumawala at nagdala ng kaguluhan, mga na-hack na site at ang mga luha ng mga inosenteng gumagamit ng Joomla na ito. Tanging ang pinakamatapang at matapang na mga developer, na ang mga mata ay namumula sa liwanag ng mga monitor, at ang mga keyboard ay puno ng mga mumo ng tinapay, ang nagawang hamunin ang nagngangalit na masasamang espiritu at inihiga ang kanilang mga ulo sa altar ng pag-aayos.

BABALA

Ang lahat ng impormasyon ay ibinigay para sa mga layuning pang-impormasyon lamang. Ang mga editor o ang may-akda ay walang pananagutan para sa anumang posibleng pinsalang dulot ng mga materyales ng artikulong ito.

Kung saan nagsimula ang lahat

Noong Oktubre 6, 2016, gumawa si Demis Palma ng isang paksa sa Stack Exchange kung saan nagtanong siya: bakit, sa katunayan, sa Joomla version 3.6 mayroong dalawang paraan para sa pagrerehistro ng mga user na may parehong pangalan register()? Ang una ay nasa UsersControllerRegistration controller at ang pangalawa ay nasa UsersControllerUser controller. Nais malaman ni Damis kung ginamit ang paraan ng UsersControllerUser::register() sa isang lugar, o kung isa lamang itong evolutionary anachronism na natitira sa lumang logic. Ang kanyang pag-aalala ay na kahit na ang pamamaraang ito ay hindi ginagamit ng anumang view, maaari itong tawagan ng isang ginawang query. Kung saan nakatanggap ako ng tugon mula sa isang developer sa ilalim ng palayaw na itoctopus, na nagkumpirma: ang problema ay talagang umiiral. At nagpadala ng ulat sa mga developer ng Joomla.

Pagkatapos ang mga kaganapan ay nabuo nang pinakamabilis. Noong Oktubre 18, tinanggap ng mga developer ng Joomla ang ulat mula kay Damis, na noong panahong iyon ay naka-draft na ng PoC na magpapahintulot sa pagpaparehistro ng user. Nag-publish siya ng isang tala sa kanyang website, kung saan sa pangkalahatang balangkas nakipag-usap tungkol sa problemang nakita niya at sa kanyang mga saloobin sa bagay na ito. Lalabas sa parehong araw isang bagong bersyon Joomla 3.6.3, na naglalaman pa rin ng vulnerable code.

Pagkatapos nito, iniikot ni Davide Tampellini ang bug hanggang sa hindi ito mairehistro simpleng user, at ang tagapangasiwa. At noong Oktubre 21, isang bagong kaso ang dumating sa pangkat ng seguridad ng Joomla. Ito ay nagsasalita na tungkol sa pagtaas ng mga pribilehiyo. Sa parehong araw, lumilitaw ang isang anunsyo sa website ng Joomla na sa Martes, Oktubre 25, ang susunod na bersyon na may serial number 3.6.3 ay ilalabas, na nagwawasto sa isang kritikal na kahinaan sa kernel ng system.

Oktubre 25 Nahanap ng Joomla Security Strike Team ang pinakabagong problemang ginawa ng piraso ng code na natuklasan ni Damis. Pagkatapos, ang isang commit na may petsang Oktubre 21 na may hindi kapansin-pansing pangalan na Prepare 3.6.4 Stable Release ay itutulak sa pangunahing sangay ng opisyal na repositoryo ng Joomla, na nag-aayos sa kapus-palad na bug.

Pagkatapos nitong lumabas, maraming interesadong indibidwal ang sumali sa komunidad ng developer - sinimulan nilang i-promote ang kahinaan at maghanda ng mga pagsasamantala.

Noong Oktubre 27, ang mananaliksik na si Harry Roberts ay nag-upload ng handa nang pagsasamantala sa Xiphos Research repository na maaaring mag-upload ng PHP file sa isang server na may mahinang CMS.

Mga Detalye

Well, ang background ay tapos na, lumipat tayo sa pinaka-kagiliw-giliw na bahagi - pagsusuri ng kahinaan. Nag-install ako ng Joomla 3.6.3 bilang isang pagsubok na bersyon, kaya lahat ng mga numero ng linya ay magiging may-katuturan para sa bersyon na ito. At ang lahat ng mga landas sa mga file na makikita mo sa ibaba ay ipahiwatig na may kaugnayan sa ugat ng naka-install na CMS.

Salamat sa pagtuklas ni Damis Palma, alam namin na mayroong dalawang paraan na nagsasagawa ng pagpaparehistro ng user sa system. Ang una ay ginagamit ng CMS at matatagpuan sa file /components/com_users/controllers/registration.php:108. Ang pangalawa (ang kakailanganin nating tawagan) ay nakatira sa /components/com_users/controllers/user.php:293. Tingnan natin ito nang maigi.

286: /** 287: * Paraan para magrehistro ng user. 288: * 289: * @return boolean 290: * 291: * @mula noong 1.6 292: */ 293: public function register() 294: ( 295: JSession::checkToken("post") o jexit(JText::_ ("JINVALID_TOKEN")); ... 300: // Kunin ang data ng form 301: $data = $this->input->post->get("user", array(), "array"); .315: $return = $model->validate($form, $data); // Suriin ang mga error 318: if ($return === false) Tapusin ang pagpaparehistro 346: $return = $model->register($data);

Dito ko iniwan lamang ang mga kagiliw-giliw na linya. Ang buong bersyon ng mahinang pamamaraan ay maaaring matingnan sa imbakan ng Joomla.

Alamin natin kung ano ang nangyayari sa normal na pagpaparehistro ng user: anong data ang ipinapadala at kung paano ito pinoproseso. Kung ang pagpaparehistro ng user ay pinagana sa mga setting, ang form ay makikita sa http://joomla.local/index.php/component/users/?view=registration.


Ang isang lehitimong kahilingan sa pagpaparehistro ng user ay kamukha ng sumusunod na screenshot.


Ang bahagi ng com_users ay responsable para sa pakikipagtulungan sa mga user. Bigyang-pansin ang parameter ng gawain sa kahilingan. Mayroon itong format na $controller.$method . Tingnan natin ang istraktura ng file.

Mga pangalan ng mga script sa folder mga controllers tumutugma sa mga pangalan ng tinatawag na controllers. Dahil ang aming kahilingan ay naglalaman na ngayon ng $controller = "registration" , ang file ay tatawagin pagpaparehistro.php at ang register() na pamamaraan nito.

Pansin, tanong: paano ilipat ang pagpoproseso ng pagpaparehistro sa isang mahinang lugar sa code? Malamang nahulaan mo na. Ang mga pangalan ng mga mahina at tunay na pamamaraan ay pareho (magrehistro), kaya kailangan lang nating baguhin ang pangalan ng tinatawag na controller. Saan matatagpuan ang aming vulnerable controller? Tama, sa file user.php. Lumalabas na $controller = "user" . Ang pagsasama-sama ng lahat ay makakakuha tayo ng gawain = user.register . Ngayon ang kahilingan sa pagpaparehistro ay pinoproseso ng paraang kailangan namin.


Ang pangalawang bagay na kailangan nating gawin ay ipadala ang data sa tamang format. Simple lang ang lahat dito. Inaasahan ng lehitimong register() mula sa amin ang isang array na tinatawag na jform , kung saan ipinapasa namin ang data ng pagpaparehistro - pangalan, login, password, email (tingnan ang screenshot kasama ang kahilingan).

  • /components/com_users/controllers/registration.php: 124: // Kunin ang data ng user. 125: $requestData = $this->input->post->get("jform", array(), "array");

Nakukuha ng aming kliyente ang data na ito mula sa isang array na tinatawag na user.

  • /components/com_users/controllers/user.php: 301: // Kunin ang data ng form. 302: $data = $this->input->post->get("user", array(), "array");

Samakatuwid, binago namin ang mga pangalan ng lahat ng mga parameter sa kahilingan mula sa jfrom sa user .

Ang aming ikatlong hakbang ay ang paghahanap ng wastong token ng CSRF, dahil kung wala ito ay walang pagpaparehistro.

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

Mukhang isang MD5 hash, at maaari mo itong kunin, halimbawa, mula sa form ng pahintulot sa site /index.php/component/users/?view=login.


Ngayon ay maaari kang lumikha ng mga gumagamit gamit ang nais na paraan. Kung ang lahat ay gumana, pagkatapos ay binabati kita - sinamantala mo lamang ang isang kahinaan CVE-2016-8870"Nawawalang tseke ng pahintulot para sa pagpaparehistro ng mga bagong user."

Ito ang hitsura sa "gumagana" na paraan ng rehistro() mula sa UsersControllerRegistration controller:

  • /components/com_users/controllers/registration.php: 113: // Kung hindi pinagana ang pagpaparehistro - I-redirect sa pahina ng pag-login. 114: if (JComponentHelper::getParams("com_users")->get("allowUserRegistration") == 0) 115: ( 116: $this->setRedirect(JRoute::_("index.php?option=com_users&view=) login", false)); 117: 118: return false; 119: )

At kaya sa mahina:

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

Oo, hindi pwede.

Upang maunawaan ang pangalawa, mas seryosong problema, ipadala natin ang kahilingang ginawa namin at tingnan kung paano ito isinasagawa sa iba't ibang bahagi ng code. Narito ang piraso na responsable para sa pagpapatunay ng data na isinumite ng user sa pamamaraan ng manggagawa:

Ang pagpapatuloy ay magagamit lamang sa mga miyembro

Pagpipilian 1. Sumali sa komunidad ng "site" upang basahin ang lahat ng materyal sa site

Ang membership sa komunidad sa loob ng tinukoy na panahon ay magbibigay sa iyo ng access sa LAHAT ng materyales ng Hacker, dagdagan ang iyong personal na pinagsama-samang diskwento at magbibigay-daan sa iyong makaipon ng propesyonal na Xakep Score rating!

Sa artikulong ito matututunan mo paano gumawa ng registration at authorization form gamit ang HTML, JavaScript, PHP at MySql. Ang ganitong mga form ay ginagamit sa halos bawat website, anuman ang uri nito. Nilikha ang mga ito para sa isang forum, isang online na tindahan, mga social network (tulad ng Facebook, Twitter, Odnoklassniki) at marami pang ibang uri ng mga site.

Kung mayroon kang website sa iyong lokal na computer, inaasahan kong mayroon ka na naka-install at tumatakbo ang lokal na server. Kung wala ito, walang gagana.

Paglikha ng talahanayan sa Database

Upang maipatupad ang pagpaparehistro ng gumagamit, una sa lahat kailangan namin ng isang Database. Kung mayroon ka na nito, mahusay, kung hindi, kailangan mong likhain ito. Sa artikulo, ipinapaliwanag ko nang detalyado kung paano ito gagawin.

At kaya, mayroon kaming isang Database (pinaikling DB), ngayon kailangan naming lumikha ng isang talahanayan mga gumagamit kung saan idaragdag namin ang aming mga nakarehistrong user.

Ipinaliwanag ko rin kung paano lumikha ng isang talahanayan sa isang database sa artikulo. Bago lumikha ng isang talahanayan, kailangan nating matukoy kung anong mga patlang ang nilalaman nito. Ang mga field na ito ay tumutugma sa mga field mula sa registration form.

Kaya, naisip namin, naisip kung anong mga patlang ang mayroon ang aming form at lumikha ng isang talahanayan mga gumagamit kasama ang mga field na ito:

  • id- Identifier. Patlang id Ang bawat talahanayan sa database ay dapat magkaroon nito.
  • pangalan- Upang i-save ang pangalan.
  • huling pangalan- Upang mapanatili ang apelyido.
  • email- Upang i-save ang postal address. Gagamitin namin ang e-mail bilang login, kaya ang field na ito ay dapat na natatangi, ibig sabihin, mayroong NATATANGING index.
  • email_status- Field upang ipahiwatig kung ang mail ay nakumpirma o hindi. Kung nakumpirma ang mail, magkakaroon ito ng halaga na 1, kung hindi, ang halaga ay 0.
  • password- Upang i-save ang password.


Kung gusto mong magkaroon ng ibang field ang iyong registration form, maaari mo ring idagdag ang mga ito dito.

Ayan, table namin mga gumagamit handa na. Lumipat tayo sa susunod na yugto.

Koneksyon sa Database

Nagawa namin ang database, ngayon kailangan naming kumonekta dito. Kami ay kumonekta gamit ang PHP extension MySQLi.

Sa folder ng aming site, lumikha ng isang file na may pangalan dbconnect.php, at isulat ang sumusunod na script dito:

Error sa koneksyon ng DB. Paglalarawan ng error: ".mysqli_connect_error()."

"; exit(); ) // Itakda ang pag-encode ng koneksyon $mysqli->set_charset("utf8"); // Para sa kaginhawahan, magdagdag ng variable dito na maglalaman ng pangalan ng aming site $address_site = "http://testsite .lokal" ; ?>

Ang file na ito dbconnect.php ay kailangang konektado sa mga humahawak ng form.

Pansinin ang variable $address_site, dito ko ipinahiwatig ang pangalan ng aking test site na aking gagawin. Mangyaring ipahiwatig ang pangalan ng iyong site nang naaayon.

Istraktura ng site

Ngayon tingnan natin ang istruktura ng HTML ng aming site.

Ililipat namin ang header at footer ng site sa magkahiwalay na mga file, header.php At footer.php. Isasama namin sila sa lahat ng pahina. Lalo na sa pangunahing pahina (file index.php), sa page na may registration form (file form_register.php) at sa pahinang may form ng pahintulot (file form_auth.php).

I-block gamit ang aming mga link, pagpaparehistro At awtorisasyon, idagdag ang mga ito sa header ng site upang maipakita ang mga ito sa lahat ng pahina. Isang link ang ilalagay sa pahina ng registration form(file form_register.php) at ang isa pa sa pahinang may form ng awtorisasyon(file form_auth.php).

Mga nilalaman ng header.php file:

Pangalan ng aming site

Bilang resulta, ganito ang hitsura ng aming pangunahing pahina:


Siyempre, maaaring may ganap na kakaibang istraktura ang iyong site, ngunit hindi ito mahalaga para sa amin ngayon. Ang pangunahing bagay ay mayroong mga link (mga pindutan) para sa pagpaparehistro at awtorisasyon.

Ngayon ay lumipat tayo sa form ng pagpaparehistro. Tulad ng naiintindihan mo na, mayroon kami nito sa file form_register.php.

Pumunta sa Database (sa phpMyAdmin), buksan ang istraktura ng talahanayan mga gumagamit at tingnan kung anong mga field ang kailangan natin. Nangangahulugan ito na kailangan namin ng mga field para sa pagpasok ng una at apelyido, isang field para sa pagpasok ng postal address (Email) at isang field para sa pagpasok ng password. At para sa mga layuning pangseguridad, magdaragdag kami ng field para sa pagpasok ng captcha.

Sa server, bilang isang resulta ng pagproseso ng form ng pagpaparehistro, iba't ibang mga error ang maaaring mangyari dahil sa kung saan ang gumagamit ay hindi makakapagrehistro. Samakatuwid, upang maunawaan ng user kung bakit nabigo ang pagpaparehistro, kinakailangang magpakita ng mga mensahe tungkol sa mga error na ito.

Bago ipakita ang form, magdagdag ng block upang ipakita ang mga mensahe ng error mula sa session.

At isa pang bagay, kung awtorisado na ang user, at dahil sa kuryusidad ay direktang pumunta siya sa pahina ng pagpaparehistro sa pamamagitan ng pagsulat sa address bar ng browser site_address/form_register.php, pagkatapos sa kasong ito, sa halip na ang form ng pagpaparehistro, magpapakita kami ng isang header na nagsasaad na siya ay nakarehistro na.

Sa pangkalahatan, ang file code form_register.php nakuha namin ito:

Nakarehistro ka na

Sa browser, ganito ang hitsura ng page na may registration form:


Sa pamamagitan ng paggamit kinakailangang katangian, ginawa naming mandatoryo ang lahat ng field.

Bigyang-pansin ang registration form code kung saan ipinapakita ang captcha:


Tinukoy namin ang path sa file sa halaga ng src attribute para sa imahe captcha.php, na bumubuo ng captcha na ito.

Tingnan natin ang file code captcha.php:

Ang code ay mahusay na nagkomento, kaya ako ay tumutok sa isang punto lamang.

Sa loob ng isang function imageTtfText(), ang path sa font ay tinukoy verdana.ttf. Kaya para gumana ng tama ang captcha, dapat tayong gumawa ng folder mga font, at ilagay ang font file doon verdana.ttf. Maaari mong mahanap ito at i-download ito mula sa Internet, o kunin ito mula sa archive na may mga materyales ng artikulong ito.

Tapos na kami sa HTML structure, oras na para magpatuloy.

Sinusuri ang bisa ng email gamit ang jQuery

Kailangang suriin ng anumang form ang bisa ng inilagay na data, kapwa sa panig ng kliyente (gamit ang JavaScript, jQuery) at sa panig ng server.

Dapat nating bigyan ng espesyal na pansin ang field ng Email. Napakahalaga na valid ang inilagay na postal address.

Para sa input field na ito, itinakda namin ang uri ng email (type="email"), ito ay bahagyang nagbabala sa amin laban sa mga maling format. Ngunit hindi ito sapat, dahil sa pamamagitan ng inspektor ng code na ibinibigay sa atin ng browser, madali nating mababago ang halaga ng katangian uri Sa email sa text, at iyon nga, hindi na magiging valid ang aming tseke.


At sa kasong ito, dapat tayong gumawa ng mas maaasahang pagsusuri. Upang gawin ito, gagamitin namin ang library ng jQuery mula sa JavaScript.

Upang ikonekta ang jQuery library, sa file header.php sa pagitan ng mga tag , bago ang pansarang tag , idagdag ang linyang ito:

Kaagad pagkatapos ng linyang ito, idaragdag namin ang email validation code. Dito kami ay magdaragdag ng isang code upang suriin ang haba ng inilagay na password. Ang haba nito ay dapat na hindi bababa sa 6 na character.

Gamit ang script na ito, sinusuri namin ang inilagay na email address para sa bisa. Kung ang user ay nagpasok ng maling Email, nagpapakita kami ng mensahe ng error tungkol dito at hindi pinagana ang pindutan ng pagsumite ng form. Kung maayos ang lahat, aalisin namin ang error at i-activate ang button na isumite ang form.

At kaya, tapos na kami sa pagpapatunay ng form sa panig ng kliyente. Ngayon ay maaari na naming ipadala ito sa server, kung saan gagawa din kami ng ilang mga pagsusuri at magdagdag ng data sa database.

Pagpaparehistro ng user

Ipinapadala namin ang form sa file para sa pagproseso magparehistro.php, sa pamamagitan ng POST method. Pangalan ang file na ito handler, na tinukoy sa halaga ng katangian aksyon. At ang paraan ng pagpapadala ay tinukoy sa halaga ng katangian paraan.

Buksan ang file na ito magparehistro.php at ang unang bagay na kailangan nating gawin ay magsulat ng function ng paglulunsad ng session at ikonekta ang file na ginawa natin kanina dbconnect.php(Sa file na ito gumawa kami ng koneksyon sa database). At saka, agad nating ideklara ang mga cell error_messages At tagumpay_mensahe sa global session array. SA error_mesages itatala namin ang lahat ng mga mensahe ng error na nangyayari sa pagpoproseso ng form, at sa tagumpay_mensahe, magre-record kami ng mga masasayang mensahe.

Bago tayo magpatuloy, dapat nating suriin naisumite ba ang form?. Maaaring tingnan ng isang attacker ang value ng attribute aksyon mula sa form, at alamin kung aling file ang nagpoproseso ng form na ito. At maaaring may ideya siyang direktang pumunta sa file na ito sa pamamagitan ng pag-type ng sumusunod na address sa address bar ng browser: http://site_address/register.php

Kaya kailangan nating suriin para sa isang cell sa pandaigdigang POST array na ang pangalan ay tumutugma sa pangalan ng aming "Register" na button mula sa form. Sa ganitong paraan, tinitingnan namin kung ang "Register" na buton ay na-click o hindi.

Kung susubukan ng isang umaatake na direktang pumunta sa file na ito, makakatanggap sila ng mensahe ng error. Hayaan akong ipaalala sa iyo na ang $address_site variable ay naglalaman ng pangalan ng site at ito ay idineklara sa file dbconnect.php.

Error! pangunahing pahina.

"); } ?>

Ang halaga ng captcha sa session ay idinagdag noong ito ay nabuo, sa file captcha.php. Bilang paalala, ipapakita ko sa iyo muli ang piraso ng code na ito mula sa file captcha.php, kung saan idinaragdag ang halaga ng captcha sa session:

Ngayon ay magpatuloy tayo sa mismong pag-verify. Nasa file magparehistro.php, sa loob ng if block, kung saan tinitingnan namin kung na-click ang "Register" na buton, o sa halip kung saan nakasaad ang komento "" // (1) Space para sa susunod na piraso ng code"nagsusulat kami:

//Suriin ang natanggap na captcha //Trim ang mga puwang mula sa simula at dulo ng linya $captcha = trim($_POST["captcha"]); if(isset($_POST["captcha"]) && !empty($captcha))( //Ihambing ang natanggap na value sa value mula sa session. if($_SESSION["rand"] != $captcha) && ($_SESSION ["rand"] != ""))( // Kung hindi tama ang captcha, ibabalik namin ang user sa pahina ng pagpaparehistro, at doon kami magpapakita ng mensahe ng error sa kanya na mali ang captcha niyang ipinasok . $error_message = "

Error! Maling captcha ang ipinasok mo

"; // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] = $error_message; // Ibalik ang user sa header ng pahina ng pagpaparehistro("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: " .$address_site ."/form_register.php"); //Stop the script exit(); // (2) Place for the next piece of code )else( //Kung ang captcha ay hindi naipasa o ito ay walang laman na exit( "

Error! Walang verification code, iyon ay, isang captcha code. Maaari kang pumunta sa pangunahing pahina.

"); }

Susunod, kailangan nating iproseso ang natanggap na data mula sa POST array. Una sa lahat, kailangan nating suriin ang mga nilalaman ng pandaigdigang POST array, iyon ay, kung mayroong mga cell doon na ang mga pangalan ay tumutugma sa mga pangalan ng mga input field mula sa aming form.

Kung umiiral ang cell, pagkatapos ay pinuputol namin ang mga puwang mula sa simula at dulo ng linya mula sa cell na ito, kung hindi, ire-redirect namin ang user pabalik sa pahina na may form ng pagpaparehistro.

Susunod, pagkatapos naming i-trim ang mga puwang, idagdag namin ang linya sa variable at suriin ang variable na ito para sa kawalan ng laman, pagkatapos ay magpatuloy kami, kung hindi, ire-redirect namin ang gumagamit pabalik sa pahina na may form ng pagpaparehistro.

Idikit ang code na ito sa tinukoy na lokasyon" // (2) Space para sa susunod na piraso ng code".

/* Suriin kung mayroong data na ipinadala mula sa form sa pandaigdigang array $_POST at balutin ang isinumiteng data sa mga regular na variable.*/ if(isset($_POST["first_name"]))( //Trim ang mga puwang mula sa simula at dulo ng string $first_name = trim($_POST["first_name"]); //Suriin ang variable para sa kawalan kung(!empty($first_name))( // Para sa kaligtasan, i-convert ang mga espesyal na character sa HTML entity $first_name = htmlspecialchars($first_name, ENT_QUOTES) ; )else( // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] .= "

Ilagay ang iyong pangalan

Nawawala ang field ng pangalan

"; //Ibalik ang user sa header ng pahina ng pagpaparehistro("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_register.php"); //Ihinto ang script exit(); ) if( isset($_POST["apelyido"]))( //Puwang sa simula at dulo ng linya $last_name = trim($_POST["apelyido"]); if(!empty($last_name)) ( // Para sa seguridad , i-convert ang mga espesyal na character sa HTML entity $last_name = htmlspecialchars($last_name, ENT_QUOTES); )else( // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] .= "

Pakilagay ang iyong apelyido

"; //Ibalik ang user sa header ng pahina ng pagpaparehistro("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_register.php"); //Ihinto ang script exit(); ) )iba ( // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] .= "

Nawawala ang field ng apelyido

"; //Ibalik ang user sa header ng pahina ng pagpaparehistro("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_register.php"); //Ihinto ang script exit(); ) if( isset($_POST["email"]))( //Trim space mula sa simula at dulo ng linya $email = trim ($_POST["email"]); if(!empty($email)) ($email = htmlspecialchars ($email, ENT_QUOTES); // (3) Lokasyon ng code para sa pagsuri sa format ng email address at sa pagiging natatangi nito )else( // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] .="

Ilagay ang iyong email

"; //Ibalik ang user sa header ng pahina ng pagpaparehistro("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_register.php"); //Ihinto ang script exit(); ) )iba ( // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] .= "

"; //Ibalik ang user sa header ng pahina ng pagpaparehistro("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_register.php"); //Ihinto ang script exit(); ) if( isset($_POST["password"]))( //Trim space mula sa simula at dulo ng string $password = trim ($_POST["password"]); if(!empty($password)) ($password = htmlspecialchars ($password, ENT_QUOTES); //I-encrypt ang password $password = md5($password."top_secret");else( //I-save ang mensahe ng error sa session. $_SESSION["error_messages"] . = "

Ipasok ang iyong password

"; //Ibalik ang user sa header ng pahina ng pagpaparehistro("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_register.php"); //Ihinto ang script exit(); ) )iba ( // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] .= "

"; //Ibalik ang user sa header ng pahina ng pagpaparehistro("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_register.php"); //Ihinto ang script exit(); ) // (4) Lugar para sa code para sa pagdaragdag ng user sa database

Ang partikular na kahalagahan ay ang larangan email. Dapat nating suriin ang format ng natanggap na postal address at ang pagiging natatangi nito sa database. Ibig sabihin, mayroon bang user na may parehong email address na nakarehistro na?

Sa tinukoy na lokasyon" // (3) Code location para tingnan ang format ng postal address at ang uniqueness nito" idagdag ang sumusunod na code:

//Suriin ang format ng natanggap na email address gamit ang isang regular na expression $reg_email = "/^**@(+(*+)*\.)++/i"; //Kung ang format ng natanggap na email address ay hindi tumutugma sa regular na expression kung(!preg_match($reg_email, $email))( // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] .= "

Naglagay ka ng maling email

"; //Ibalik ang user sa header ng pahina ng pagpaparehistro("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_register.php"); //Ihinto ang script exit(); ) // Sinusuri namin kung ang naturang address ay nasa database na = $mysqli->query("PUMILI `email` MULA sa `users` WHERE `email`="".$email."""); ay eksaktong isang row, na nangangahulugang ang user na may ganitong email address ay nakarehistro na if($result_query->num_rows == 1)( //Kung hindi false ang nakuhang resulta kung(($row = $result_query->fetch_assoc() ) != false) ( // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] .= "

Nakarehistro na ang isang user na may ganitong email address

"; //Ibalik ang user sa header ng pahina ng pagpaparehistro("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_register.php"); )else( // I-save ang mensahe ng error sa session na $_SESSION["error_messages"] .="

Error sa query sa database

"; //Ibalik ang user sa header ng pahina ng pagpaparehistro("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_register.php"); ) /* pagsasara ng seleksyon */ $ result_query-> close(); //Stop the script exit() /* closing the selection */ $result_query->close();

At kaya, tapos na kami sa lahat ng mga pagsusuri, oras na para idagdag ang user sa database. Sa tinukoy na lokasyon" // (4) Lugar para sa code para sa pagdaragdag ng user sa database" idagdag ang sumusunod na code:

//Query para magdagdag ng user sa database $result_query_insert = $mysqli->query("INSERT INTO `users` (first_name, last_name, email, password) VALUES ("".$first_name."", "".$last_name ." ", "".$email.", "".$password."")"); if(!$result_query_insert)( // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] .= "

Error sa kahilingang magdagdag ng user sa database

"; //Ibalik ang user sa header ng pahina ng pagpaparehistro("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_register.php"); //Ihinto ang script exit(); )iba( $_SESSION["success_messages"] = "

Matagumpay na nakumpleto ang pagpaparehistro!!!
Ngayon ay maaari kang mag-log in gamit ang iyong username at password.

"; //Ipadala ang user sa header ng pahina ng awtorisasyon("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_auth.php"); ) /* Pagkumpleto ng kahilingan */ $ result_query_insert-> close(); //Isara ang koneksyon sa database $mysqli->close();

Kung may naganap na error sa kahilingang magdagdag ng user sa database, nagdaragdag kami ng mensahe tungkol sa error na ito sa session at ibabalik namin ang user sa pahina ng pagpaparehistro.

Kung hindi, kung naging maayos ang lahat, nagdaragdag din kami ng mensahe sa session, ngunit sa pagkakataong ito ay mas kaaya-aya, ibig sabihin, sasabihin namin sa user na matagumpay ang pagpaparehistro. At nire-redirect namin ito sa page na may authorization form.

Ang script para sa pagsuri sa format ng email address at haba ng password ay nasa file header.php, kaya malalapat din ito sa mga field mula sa form na ito.

Sinimulan din ang session sa file header.php, kaya sa file form_auth.php Hindi na kailangang magsimula ng session, dahil magkakaroon tayo ng error.


Tulad ng nasabi ko na, gumagana din dito ang script para sa pagsuri sa format ng email address at haba ng password. Samakatuwid, kung ang gumagamit ay nagpasok ng isang maling email address o maikling password, agad siyang makakatanggap ng isang mensahe ng error. Isang buton pumasok magiging hindi aktibo.

Pagkatapos ayusin ang mga error, ang pindutan pumasok nagiging aktibo, at magagawa ng user na isumite ang form sa server, kung saan ito ipoproseso.

Pahintulot ng user

Upang i-attribute ang halaga aksyon ang kapansanan sa pahintulot ay may tinukoy na file auth.php, nangangahulugan ito na ipoproseso ang form sa file na ito.

At kaya, buksan ang file auth.php at sumulat ng code upang iproseso ang form ng pahintulot. Ang unang bagay na kailangan mong gawin ay magsimula ng isang session at ikonekta ang file dbconnect.php upang kumonekta sa database.

//Ipahayag ang isang cell upang magdagdag ng mga error na maaaring mangyari kapag pinoproseso ang form. $_SESSION["error_messages"] = ""; //Magdeklara ng cell para sa pagdaragdag ng matagumpay na mga mensahe $_SESSION["success_messages"] = "";

/* Suriin kung ang form ay isinumite, iyon ay, kung ang Login button ay na-click. Kung oo, pagkatapos ay lumipat kami, kung hindi, pagkatapos ay magpapakita kami ng isang mensahe ng error sa gumagamit na nagpapahiwatig na na-access niya ang pahinang ito nang direkta. */ if(isset($_POST["btn_submit_auth"]) && !empty($_POST["btn_submit_auth"]))( //(1) Space para sa susunod na piraso ng code )else( exit("

Error! Direkta mong na-access ang page na ito, kaya walang data na ipoproseso. Maaari kang pumunta sa pangunahing pahina.

"); }

//Suriin ang natanggap na captcha if(isset($_POST["captcha"]))( //Trim ang mga puwang mula sa simula at dulo ng linya $captcha = trim ($_POST["captcha"]); if(! empty($captcha ))( //Ihambing ang natanggap na value sa value mula sa session. if(($_SESSION["rand"] != $captcha) && ($_SESSION["rand"] != "")) ( // Kung mali ang captcha , ibabalik namin ang user sa pahina ng awtorisasyon, at doon ay magpapakita kami ng mensahe ng error sa kanya na mali ang ipinasok niyang captcha $error_message = ".

Error! Maling captcha ang ipinasok mo

"; // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] = $error_message; // Ibalik ang user sa authorization page header("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: " .$address_site ."/form_auth.php"); //Ihinto ang paglabas ng script( )else( $error_message = "

Error! Hindi dapat walang laman ang captcha entry field.

"; // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] = $error_message; // Ibalik ang user sa authorization page header("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: " .$address_site ."/form_auth.php"); //Stop the script exit(); //(2) Lugar para sa pagproseso ng email address //(3) Lugar para sa pagpoproseso ng password //(4) Lugar para sa pagbuo isang kahilingan sa database )else ( // Kung ang captcha ay hindi naipasa exit("

Error! Walang verification code, iyon ay, isang captcha code. Maaari kang pumunta sa pangunahing pahina.

"); }

Kung naipasok ng user ang verification code nang tama, pagkatapos ay magpapatuloy kami, kung hindi, ibabalik namin siya sa pahina ng pahintulot.

Sinusuri ang mailing address

//Trim space mula sa simula at dulo ng linya $email = trim($_POST["email"]); if(isset($_POST["email"]))( if(!empty($email))( $email = htmlspecialchars($email, ENT_QUOTES); //Suriin ang format ng natanggap na email address gamit ang isang regular na expression $ reg_email = " /^**@(+(*+)*\.)++/i"; //Kung ang format ng natanggap na email address ay hindi tumutugma sa regular na expression kung(!preg_match($reg_email, $email ))( // I-save sa mensahe ng error sa session. $_SESSION["error_messages"] .= "

Naglagay ka ng maling email

"; //Ibalik ang user sa authorization page header("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_auth.php"); //Ihinto ang script exit(); ) )iba ( // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] .= "

Ang field para sa pagpasok ng postal address (email) ay hindi dapat walang laman.

"; //Ibalik ang user sa header ng pahina ng pagpaparehistro("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_register.php"); //Ihinto ang script exit(); ) )iba ( // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] .= "

Nawawala ang field ng pag-input ng email

"; //Ibalik ang user sa authorization page header("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_auth.php"); //Ihinto ang script exit(); ) // (3) Lugar sa pagpoproseso ng password

Kung naglagay ang user ng email address sa maling format o walang laman ang value ng field ng email address, ibabalik namin siya sa page ng awtorisasyon kung saan nagpapakita kami ng mensahe tungkol dito.

Pag-verify ng password

Ang susunod na field na ipoproseso ay ang field ng password. Sa tinukoy na lugar" //(3) Lugar para sa pagproseso ng password", sumulat kami:

If(isset($_POST["password"]))( //Turiin ang mga puwang mula sa simula at dulo ng string $password = trim ($_POST["password"]); if(!empty($password))( $password = htmlspecialchars($password, ENT_QUOTES); //I-encrypt ang password $password = md5($password."top_secret");else( //I-save ang mensahe ng error sa session. $_SESSION["error_messages"] .= "

Ipasok ang iyong password

"; //Ibalik ang user sa header ng pahina ng pagpaparehistro("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_auth.php"); //Ihinto ang script exit(); ) )iba ( // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] .= "

Nawawala ang field ng password

"; //Ibalik ang user sa header ng pahina ng pagpaparehistro("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_auth.php"); //Ihinto ang script exit(); )

Dito ginagamit namin ang function na md5() upang i-encrypt ang natanggap na password, dahil ang aming mga password ay nasa naka-encrypt na form sa database. Isang karagdagang lihim na salita sa pag-encrypt, sa aming kaso " sobrang sekreto" ay dapat ang ginamit noong nirerehistro ang user.

Ngayon ay kailangan mong gumawa ng isang query sa database upang pumili ng isang user na ang email address ay katumbas ng natanggap na email address at ang password ay katumbas ng natanggap na password.

//Query sa database batay sa pagpili ng user. $result_query_select = $mysqli->query("SELECT * FROM `users` WHERE email = "".$email."" AT password = "".$password."""); if(!$result_query_select)( // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] .= "

Error sa query kapag pumipili ng user mula sa database

"; //Ibalik ang user sa header ng pahina ng pagpaparehistro("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_auth.php"); //Ihinto ang script exit(); )else( //Suriin kung walang user na may ganoong data sa database, pagkatapos ay magpakita ng mensahe ng error kung($result_query_select->num_rows == 1)( // Kung ang ipinasok na data ay tumutugma sa data mula sa database, pagkatapos ay i-save ang login at password sa array ng mga session $_SESSION["email"] = $_SESSION["password"] = $password; //Ibalik ang user sa header ng pangunahing pahina("HTTP/1.1 301 Permanenteng Inilipat" ); ."/index.php"); )else( // I-save ang mensahe ng error sa session. $_SESSION["error_messages"] .= "

Maling login at/o password

"; //Ibalik ang user sa authorization page header("HTTP/1.1 301 Permanenteng Inilipat"); header("Lokasyon: ".$address_site."/form_auth.php"); //Ihinto ang script exit(); ) )

Lumabas mula sa site

At ang huling bagay na ipinapatupad namin ay pamamaraan para sa pag-alis sa site. Sa ngayon, sa header ay ipinapakita namin ang mga link sa pahina ng pahintulot at pahina ng pagpaparehistro.

Sa header ng site (file header.php), gamit ang session na tinitingnan namin kung awtorisado na ang user. Kung hindi, ipinapakita namin ang mga link sa pagpaparehistro at awtorisasyon, kung hindi man (kung siya ay awtorisado), pagkatapos ay sa halip na mga link sa pagpaparehistro at awtorisasyon ay nagpapakita kami ng isang link Lumabas.

Binagong piraso ng code mula sa file header.php:

Pagpaparehistro

Lumabas

Kapag nag-click ka sa exit link mula sa site, dadalhin kami sa isang file logout.php, kung saan sinisira lang namin ang mga cell na may email address at password mula sa session. Pagkatapos nito, ibabalik namin ang gumagamit pabalik sa pahina kung saan na-click ang link labasan.

File code logout.php:

Iyon lang. Ngayon alam mo na kung paano ipatupad at iproseso ang mga form sa pagpaparehistro at awtorisasyon user sa iyong website. Ang mga form na ito ay matatagpuan sa halos bawat website, kaya dapat malaman ng bawat programmer kung paano likhain ang mga ito.

Natutunan din namin kung paano i-validate ang data ng input, kapwa sa panig ng kliyente (sa browser, gamit ang JavaScript, jQuery) at sa panig ng server (gamit ang PHP). Natuto din kami magpatupad ng pamamaraan para sa pag-alis sa site.

Ang lahat ng mga script ay nasubok at gumagana. Maaari mong i-download ang archive gamit ang mga file ng maliit na site na ito mula sa link na ito.

Sa hinaharap, susulat ako ng isang artikulo kung saan ilalarawan ko. At plano ko ring magsulat ng isang artikulo kung saan ako ay magpapaliwanag (nang hindi nagre-reload ng pahina). Kaya, upang manatiling alam tungkol sa pagpapalabas ng mga bagong artikulo, maaari kang mag-subscribe sa aking website.

Kung mayroon kang anumang mga katanungan, mangyaring makipag-ugnay sa akin, at kung mapansin mo ang anumang error sa artikulo, mangyaring ipaalam sa akin.

Lesson Plan (Bahagi 5):

  1. Paglikha ng HTML structure para sa authorization form
  2. Pinoproseso namin ang natanggap na data
  3. Ipinapakita namin ang pagbati ng user sa header ng site

Nagustuhan mo ba ang artikulo?



Bago sa site

>

Pinaka sikat