Гэр Хүүхдийн шүдний эмчилгээ Гүйцэтгэх бүртгэлийн php. Хэрэглэгчийн бүртгэлийн энгийн систем

Гүйцэтгэх бүртгэлийн php. Хэрэглэгчийн бүртгэлийн энгийн систем

Гишүүнчлэлд суурилсан сайт үүсгэх нь эхлээд хэцүү ажил мэт санагддаг. Хэрэв та хэзээ нэгэн цагт үүнийг өөрөө хийхийг хүсч байсан бол PHP чадвараа ашиглан үүнийг хэрхэн нэгтгэх талаар бодож эхэлмэгц зүгээр л бууж өгсөн бол энэ нийтлэл танд зориулагдсан болно. Бид таныг нууц үгээр хамгаалагдсан, гишүүнчлэлийн аюулгүй газартай, гишүүнчлэлд суурилсан сайтыг бий болгох бүх талаар танд танилцуулах болно.

Бүх үйл явц нь хэрэглэгчийн бүртгэл ба хэрэглэгчийн баталгаажуулалт гэсэн хоёр том хэсгээс бүрдэнэ. Эхний хэсэгт бид бүртгэлийн маягт үүсгэх, MySQL мэдээллийн санд өгөгдлийг хадгалах талаар авч үзэх болно. Хоёрдахь хэсэгт бид нэвтрэх маягтыг үүсгэж, хэрэглэгчдэд аюулгүй бүсэд нэвтрэх боломжийг олгоно.

Кодоо татаж авна уу

Та доорх холбоосоос бүртгэл/нэвтрэх системийн эх кодыг бүхэлд нь татаж авах боломжтой.

Тохиргоо & Байршуулах
ReadMe файл нь дэлгэрэнгүй зааврыг агуулдаг.

-г нээнэ үү source\include\membersite_config.phpТекст засварлагч дээр файл хийж тохиргоог шинэчилнэ үү. (Мэдээллийн санд нэвтрэх, вэбсайтын нэр, имэйл хаяг гэх мэт).

Лавлах агуулгыг бүхэлд нь байршуулна уу. Маягтыг илгээх замаар register.php-г шалгана уу.

Бүртгэлийн маягт

Хэрэглэгчийн бүртгэл үүсгэхийн тулд бид хэрэглэгчээс хамгийн бага хэмжээний мэдээлэл цуглуулах хэрэгтэй. Бидэнд түүний нэр, имэйл хаяг, хүссэн хэрэглэгчийн нэр, нууц үг хэрэгтэй. Мэдээжийн хэрэг, бид энэ үед илүү их мэдээлэл авахыг хүсч болно, гэхдээ урт маягт нь үргэлж унтраалттай байдаг. Тиймээс зөвхөн эдгээр талбаруудаар хязгаарлъя.

Энд бүртгэлийн маягт байна:

Бүртгүүлэх

Тиймээс, бидэнд нэр, имэйл, нууц үг оруулах текст талбарууд байна. Бид илүү сайн ашиглахын тулд үүнийг ашиглаж байгааг анхаарна уу.

Маягтын баталгаажуулалт

Энэ үед маягтын баталгаажуулах кодыг оруулах нь зүйтэй тул хэрэглэгчийн бүртгэл үүсгэхэд шаардлагатай бүх өгөгдөл бидэнд байгаа эсэхийг шалгаарай. Бид нэр, имэйл, нууц үг бөглөсөн эсэх, имэйл зөв форматтай байгаа эсэхийг шалгах хэрэгтэй.

Маягтыг илгээх ажлыг зохицуулж байна

Одоо бид илгээсэн маягтын өгөгдлийг зохицуулах ёстой.

Дараалал нь дараах байдалтай байна (татаж авсан эх сурвалжаас fg_membersite.php файлыг үзнэ үү):

функц RegisterUser() ( if(!isset($_POST["илгээсэн"])) ( худал буцаана; ) $formvars = массив(); if(!$this->ValidateRegistrationSubmission()) ( худал буцаана; ) $энэ- >CollectRegistrationSubmission($formvars); if(!$this->SaveToDatabase($formvars)) ( буцаах худал; ) if(!$this->SendUserConfirmationEmail($formvars)) ( буцаах худал; ) $this->SendAdminIntimationEmail($) formvars); үнэнийг буцаана;)

Юуны өмнө бид маягтыг илгээхийг баталгаажуулна. Дараа нь бид маягтын илгээсэн өгөгдлийг цуглуулж, "ариутгадаг" (мэйл илгээх, мэдээллийн санд хадгалах гэх мэтийн өмнө үүнийг үргэлж хий). Дараа нь маягтыг мэдээллийн сангийн хүснэгтэд хадгална. Бид баталгаажуулах хүсэлтийг хэрэглэгч рүү имэйл илгээдэг. Дараа нь бид админд хэрэглэгч бүртгүүлсэн гэж мэдэгдэнэ.

Өгөгдлийн санд өгөгдлийг хадгалах

Одоо бид бүх өгөгдлийг цуглуулсан тул мэдээллийн санд хадгалах хэрэгтэй.
Бид маягтыг мэдээллийн санд хэрхэн хадгалахыг энд харуулав.

функц SaveToDatabase(&$formvars) ( if(!$this->DBLogin()) ( $this->HandleError("Өгөгдлийн санд нэвтэрч чадсангүй!"); худал буцаана; ) if(!$this->Баталгаажуулах боломжтой()) ( буцаах false; ) if(!$this->IsFieldUnique($formvars,"имэйл")) ( $this->HandleError("Энэ имэйл аль хэдийн бүртгэгдсэн байна"); буцаах false; ) if(!$this->IsFieldUnique( $formvars,"хэрэглэгчийн нэр")) ( $this->HandleError("Энэ хэрэглэгчийн нэрийг аль хэдийн ашигласан байна. Өөр хэрэглэгчийн нэрээр оролдоно уу"); false буцаана; ) if(!$this->InsertIntoDB($formvars)) ( $this- >HandleError("Өгөгдлийн санд оруулах амжилтгүй!"); худал буцаана; ) үнэнийг буцаана; )

Та Membersite_config.php файлд Өгөгдлийн сангийн нэвтрэх мэдээллийг тохируулсан гэдгийг анхаарна уу. Ихэнх тохиолдолд та мэдээллийн сангийн хостын хувьд "localhost"-г ашиглаж болно.
Нэвтрэн орсны дараа бид хүснэгт байгаа эсэхийг шалгана.(Хэрэв үгүй ​​бол скрипт нь шаардлагатай хүснэгтийг үүсгэх болно).
Дараа нь бид хэрэглэгчийн нэр болон имэйлийг өвөрмөц эсэхийг шалгана. Хэрэв энэ нь өвөрмөц биш бол бид алдааг хэрэглэгч рүү буцаана.

Өгөгдлийн сангийн хүснэгтийн бүтэц

Энэ бол хүснэгтийн бүтэц юм. fg_membersite.php файл дахь CreateTable() функц нь хүснэгтийг үүсгэдэг. Энд код байна:

функц CreateTable() ( $qry = "Хүснэгт үүсгэх $this->хүснэгтийн нэр (". "id_user INT NOT NULL AUTO_INCREMENT ," "нэр VARCHAR(128) NOT NULL ," "и-мэйл VARCHAR(64) NOT NULL ," "утасны_ дугаар VARCHAR(16) NOT NULL ," "хэрэглэгчийн нэр VARCHAR(16) NOT NULL ," "нууц үг VARCHAR(32) NOT NULL ," "VARCHAR(32) кодыг баталгаажуулах," "PRIMARY KEY (id_user)." ")"; if( !mysql_query($qry,$this->холболт)) ( $this->HandleDBerror("Хүснэгт үүсгэх алдаа \nасуулга\n $qry"); худал буцаана; ) үнэнийг буцаана; )

id_user талбар нь хэрэглэгчийн өвөрмөц ID-г агуулсан байх ба хүснэгтийн үндсэн түлхүүр юм. Нууц үгийн талбарт 32 тэмдэгт оруулахыг зөвшөөрч байгааг анхаарна уу. Аюулгүй байдлын нэмэлт арга хэмжээ болгон бид нууц үгийг MD5 ашиглан шифрлэгдсэн мэдээллийн санд хадгалах тул үүнийг хийдэг. MD5 нь нэг талын шифрлэлтийн арга тул хэрэглэгч мартсан тохиолдолд бид нууц үгээ сэргээх боломжгүй гэдгийг анхаарна уу.

Бүртгэлийг хүснэгтэд оруулж байна

Өгөгдлийн санд өгөгдөл оруулахад ашигладаг код энд байна. Бид бүх өгөгдлийг $formvars массив дээр ашиглах боломжтой.

функц InsertIntoDB(&$formvars) ( $confirmcode = $this->MakeConfirmationMd5($formvars["имэйл"]); $insert_query = "".$this->хүснэгтийн нэр."(нэр, имэйл, хэрэглэгчийн нэр, нууц үг, баталгаажуулах код) утгууд ("" . $this->SanitizeForSQL($formvars["нэр"]) . "", "" . $this->SanitizeForSQL($formvars["имэйл"]) . "", "" $ this->SanitizeForSQL($formvars["хэрэглэгчийн нэр"]) . "", "" .md5($formvars["нууц үг"]) . "", "" . $confirmcode. "")"; if(! mysql_query( $insert_query ,$this->холболт)) ( $this->HandleDBerror("Хүснэгтэд өгөгдөл оруулахад алдаа гарлаа\nquery:$insert_query"); худал буцаана; ) үнэнийг буцаана; )

Бид нууц үгээ мэдээллийн санд оруулахаасаа өмнө PHP функц md5() ашиглан шифрлэж байгааг анхаарна уу.
Мөн бид хэрэглэгчийн имэйл хаягаас өвөрмөц баталгаажуулах код хийдэг.

Имэйл илгээж байна

Одоо бид мэдээллийн сандаа бүртгэлтэй болсон тул хэрэглэгч рүү баталгаажуулах имэйл илгээх болно. Бүртгэлийн үйл явцыг дуусгахын тулд хэрэглэгч баталгаажуулах имэйл дэх холбоос дээр дарах ёстой.

функц SendUserConfirmationEmail(&$formvars) ( $mailer = new PHPMailer(); $mailer->CharSet = "utf-8"; $mailer->AddAddress($formvars["имэйл"],$formvars["нэр"]) ; $mailer->Subject = "Таны бүртгэл ".$this->sitename; $mailer->From = $this->GetFromAddress(); $confirmcode = urlencode($this->MakeConfirmationMd5($formvars["имэйл" ])); $confirm_url = $this->GetAbsoluteURLFolder()."/confirmreg.php?code=".$confirmcode; $mailer->Body ="Сайн уу ".$formvars["нэр"]."\r\ n\r\n". "".$this->sitename"-д бүртгүүлсэнд баярлалаа.\r\n". "Доорх холбоос дээр дарж бүртгэлээ баталгаажуулна уу.\r\n." "$confirm_url\r \n". "\r\n". "Хүндэтгэсэн,\r\n". "Вэбмастер\r\n". $this->sitename; if(!$mailer->Send()) ( $this-> HandleError("Бүртгэлийг баталгаажуулах имэйл илгээж чадсангүй."); худал буцаана; ) үнэнийг буцаана; )

Шинэчлэлтүүд

2012 оны нэгдүгээр сарын 9
Нууц үг дахин тохируулах/Нууц үг солих функцүүд нэмэгдсэн
Одоо кодыг GitHub дээр хуваалцаж байна.

Буцаад тавтай морилUserFullName(); ?>!

Тусгай зөвшөөрөл


Кодыг LGPL лицензийн дагуу хуваалцдаг. Та үүнийг арилжааны болон арилжааны бус вэбсайтууд дээр чөлөөтэй ашиглаж болно.

Холбоотой нийтлэл байхгүй.

Энэ бичлэгийн сэтгэгдэл хаалттай байна.

Сайтын зочдыг тодорхой бүлэгт хуваахын тулд сайт дээр жижиг систем суурилуулсан байх ёстой php дээр бүртгүүлэх. Ийм байдлаар та зочдыг нөхцөлт байдлаар энгийн санамсаргүй зочдын хоёр бүлэгт хувааж, илүү үнэ цэнэтэй мэдээллээр хангадаг илүү давуу эрхтэй хэрэглэгчдийн бүлэгт хуваадаг.

Ихэнх тохиолдолд илүү хялбаршуулсан бүртгэлийн системийг ашигладаг бөгөөд энэ нь нэг файлд php дээр бичигдсэн байдаг register.php.

Тиймээс бид бага зэрэг ухарсан бөгөөд одоо бид бүртгэлийн файлыг нарийвчлан авч үзэх болно.

Register.php файл

Энэ нь таны цагийг их авахгүйн тулд бид хэрэглэгчээс хамгийн бага холбоо барих мэдээллийг хүлээн авах системийг бий болгоно. Энэ тохиолдолд бид бүх зүйлийг mysql мэдээллийн сан руу оруулна. Өгөгдлийн сангийн хамгийн өндөр хурдтай байхын тулд бид хэрэглэгчдийн хүснэгтийг MyISAM формат болон utf-8 кодчилолоор үүсгэнэ.

Анхаар! Бүх скриптүүд үргэлж ижил кодчилолд бичигдсэн байх ёстой. Сайтын бүх файлууд болон MySql мэдээллийн сан ижил кодчилолд байх ёстой. Хамгийн түгээмэл кодчилол нь UTF-8 ба Windows-1251 юм.

Та яагаад бүгдийг нэг кодчилолд бичих хэрэгтэй вэ гэдгийг бид дараа нь ярих болно. Одоохондоо энэ мэдээллийг скрипт үүсгэх хатуу дүрэм болгон аваарай, эс тэгвээс та ирээдүйд скрипттэй холбоотой асуудалтай тулгарах болно. Мэдээжийн хэрэг зүгээр, гэхдээ та скрипт дэх алдаа хайхад маш их цаг алдах болно.

Скрипт өөрөө хэрхэн ажиллах вэ?

Бид бүх зүйлийг хялбарчилж, хурдан үр дүнд хүрэхийг хүсч байна. Тиймээс бид хэрэглэгчдээс зөвхөн нэвтрэх нэр, цахим шуудан, нууц үг хүлээн авах болно. Мөн спам роботоос хамгаалахын тулд бид жижиг captcha суулгах болно. Тэгэхгүй бол Лондонгийн нэг хүү хэдхэн минутын дотор мэдээллийн санг бүхэлд нь хуурамч хэрэглэгчдээр дүүргэх жижигхэн робот задлан шинжлэгч бичиж, түүний авьяас билэг, ял шийтгэлгүйд баярлах болно.

Энд скрипт өөрөө байна. Бүх зүйл нэг файлд бичигдсэн байдаг register.php:

! `; // улаан асуултын тэмдэг $sha=$sh."scripts/pro/"; //үндсэн хавтас руу орох зам $bg=` bgcolor="#E1FFEB"`; // мөрийн дэвсгэр өнгө?> Бүртгэлийн скриптийн жишээ register.php style.css" />

Энэ тохиолдолд скрипт нь өөртөө хамаарна. Мөн энэ нь маягт, маягтанд оруулсан мэдээллийн боловсруулагч юм. Файл нь zip архив хэлбэрээр шахагдсан бөгөөд config.php тохиргооны файл, хэрэглэгчийн мэдээллийн сангийн dump, functions.php туслах функцийг агуулсан файл, style.css загварын файл болон register.php файлыг агуулдаг болохыг анхаарна уу. Мөн captcha тэмдэгтүүдийг ажиллуулах, үүсгэх үүрэгтэй хэд хэдэн файлууд байдаг.

Сайн уу? Одоо бид PHP + MySQL ашиглан сайт дээрх хамгийн энгийн бүртгэлийг хэрэгжүүлэхийг хичээх болно. Үүнийг хийхийн тулд Apache-г компьютер дээрээ суулгасан байх ёстой. Манай скриптийн ажиллах зарчмыг доор харуулав.

1. Өгөгдлийн санд хэрэглэгчдийн хүснэгтийг үүсгэж эхэлцгээе. Энэ нь хэрэглэгчийн өгөгдлийг (нэвтрэх болон нууц үг) агуулсан байх болно. phpmyadmin руу орцгооё (хэрэв та компьютер дээрээ мэдээллийн сан үүсгэж байгаа бол http://localhost/phpmyadmin/). Хүснэгт үүсгэх хэрэглэгчид, энэ нь 3 талбартай болно.

Би үүнийг mysql мэдээллийн санд үүсгэдэг, та үүнийг өөр мэдээллийн санд үүсгэж болно. Дараа нь зураг дээрх утгыг тохируулна уу:

2. Энэ хүснэгтэд холбогдох шаардлагатай.Файл үүсгэцгээе bd.php. Түүний агуулга:

$db = mysql_connect("таны MySQL сервер", "энэ серверт нэвтрэх", "энэ серверийн нууц үг");
mysql_select_db ("бидний холбогдож байгаа мэдээллийн сангийн нэр", $db);
?>

Миний тохиолдолд энэ нь иймэрхүү харагдаж байна:

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

Хадгалах bd.php.
Агуу их! Бид мэдээллийн санд хүснэгттэй, түүнтэй холбогдох боломжтой. Одоо та хэрэглэгчид өөрсдийн мэдээллээ үлдээх хуудсыг үүсгэж эхлэх боломжтой.

3. Агуулгатай reg.php файл үүсгэнэ үү (бүх тайлбар дотор):



Бүртгэл


Бүртгэл


















4. Файл үүсгэх, энэ нь мэдээллийн санд өгөгдөл оруулах, хэрэглэгчийг хадгалах болно. save_user.php(доторх сэтгэгдэл):



{
}
//Хэрэв нэвтрэх болон нууц үгээ оруулсан бол шошго болон скриптүүд ажиллахгүй байхаар боловсруулж, хүмүүс юу оруулж болохыг та хэзээ ч мэдэхгүй.


// нэмэлт зайг арилгах
$нэвтрэх = засах($нэвтрэх);
$нууц үг = засах($нууц үг);
// мэдээллийн сантай холбогдоно
// ижил нэвтрэлттэй хэрэглэгч байгаа эсэхийг шалгана
$үр дүн = mysql_query("Хэрэглэгчээс ХААНА нэвтрэн орох = "$ нэвтрэх"", $db);
хэрэв (!хоосон($myrow["id"])) (
exit("Уучлаарай, таны оруулсан нэвтрэлт аль хэдийн бүртгэгдсэн байна. Өөр нэвтрэлт оруулна уу.");
}
// Хэрэв тийм биш бол өгөгдлийг хадгал
$result2 = mysql_query("Хэрэглэгчид INSERT INTO (нэвтрэх, нууц үг) VALUES("$login","$нууц үг")");
// Алдаа байгаа эсэхийг шалгана уу
хэрэв ($үр дүн2=="ҮНЭН")
{
echo "Та амжилттай бүртгүүллээ! Одоо та сайт руу орох боломжтой. Нүүр хуудас";
}
өөр(
echo "Алдаа! Та бүртгүүлээгүй байна.";
}
?>

5. Одоо манай хэрэглэгчид бүртгүүлэх боломжтой боллоо!Дараа нь та аль хэдийн бүртгүүлсэн хэрэглэгчдэд сайт руу нэвтрэх "хаалга" үүсгэх хэрэгтэй. index.php(доторх сэтгэгдэл):

// бүх процедур нь сесс хэлбэрээр ажилладаг. Энэ нь хэрэглэгчийн мэдээллийг сайт дээр байх үед хадгалдаг газар юм. Тэдгээрийг хуудасны хамгийн эхэнд эхлүүлэх нь маш чухал юм!!!
session_start();
?>


Нүүр хуудас


Нүүр хуудас











Бүртгүүлэх



// Нэвтрэх болон хэрэглэгчийн ID хувьсагчид хоосон эсэхийг шалгана уу
хэрэв (хоосон($_SESSION["нэвтрэх"]) эсвэл хоосон($_SESSION["id"]))
{
// Хэрэв хоосон бол бид холбоосыг харуулахгүй
echo "Та зочноор нэвтэрсэн байна
Энэ холбоосыг зөвхөн бүртгүүлсэн хэрэглэгчид ашиглах боломжтой";
}
өөр
{

Файлд index.phpБид зөвхөн бүртгэлтэй хэрэглэгчдэд нээлттэй холбоосыг харуулах болно. Энэ бол скриптийн бүх санаа юм - аливаа өгөгдөлд хандах хандалтыг хязгаарлах.

6. Оруулсан нэвтрэх нэр, нууц үгээ баталгаажуулсан файл үлдсэн. testreg.php (дотор тайлбар):

session_start();// бүх процедур нь сесс дээр ажилладаг. Энэ нь хэрэглэгчийн мэдээллийг сайт дээр байх үед хадгалдаг газар юм. Тэдгээрийг хуудасны хамгийн эхэнд эхлүүлэх нь маш чухал юм!!!
if (isset($_POST["login"])) ( $login = $_POST["login"]; if ($login == "") ( unset($login);) ) //-ийн оруулсан нэвтрэлтийг оруулна уу. хэрэглэгч $login хувьсагч руу орох бөгөөд хэрэв энэ нь хоосон байвал хувьсагчийг устгана
if (isset($_POST["нууц үг"])) ( $нууц үг=$_POST["нууц үг"]; if ($нууц үг =="") ( тохируулаагүй($нууц үг);) )
//хэрэглэгчийн оруулсан нууц үгийг $password хувьсагч руу оруулах, хэрэв хоосон байвал хувьсагчийг устгана.
if (empty($login) or empty($password)) //хэрэв хэрэглэгч нэвтрэх болон нууц үгээ оруулаагүй бол бид алдаа гаргаж, скриптийг зогсооно.
{
exit("Та бүх мэдээллийг оруулаагүй байна, буцаж очоод бүх талбарыг бөглөнө үү!");
}
//Хэрэв нэвтрэх болон нууц үгээ оруулсан бол шошго болон скриптүүд ажиллахгүй байхаар боловсруулж, хүмүүс юу оруулж болохыг та хэзээ ч мэдэхгүй.
$нэвтрэх = налуу зураас($нэвтрэх);
$login = htmlspecialchars($login);
$нууц үг = налуу зураас($нууц үг);
$нууц үг = htmlspecialchars($нууц үг);
// нэмэлт зайг арилгах
$нэвтрэх = засах($нэвтрэх);
$нууц үг = засах($нууц үг);
// мэдээллийн сантай холбогдоно
include("bd.php");// bd.php файл нь бусадтай ижил фолдерт байх ёстой, хэрэв тийм биш бол зүгээр л замыг солино.

$үр дүн = mysql_query("хэрэглэгчдээс сонгох * ХААНА нэвтрэн орох =="$нэвтрэх"",$db); //өгөгдлийн сангаас нэвтэрсэн хэрэглэгчийн талаарх бүх өгөгдлийг татаж авах
$myrow = mysql_fetch_array($үр дүн);
хэрэв (хоосон($myrow["нууц үг"]))
{
//хэрэв оруулсан нэвтрэх эрхтэй хэрэглэгч байхгүй бол
}
өөр(
//хэрэв байгаа бол нууц үгээ шалгана уу
if ($myrow["нууц үг"]==$нууц үг) (
//хэрэв нууц үг таарч байвал бид хэрэглэгчдэд зориулсан сесс эхлүүлнэ! Та түүнд баяр хүргэж болно, тэр орлоо!
$_SESSION["login"]=$myrow["нэвтрэх"];
$_SESSION["id"]=$myrow["id"];//энэ өгөгдлийг маш их ашигладаг тул нэвтэрсэн хэрэглэгч "үүнийг өөртөө авч явах" болно.
echo "Та сайтад амжилттай нэвтэрлээ! Нүүр хуудас";
}
өөр(
// нууц үг таарахгүй бол

Гарах ("Уучлаарай, таны оруулсан нэвтрэх нэр эсвэл нууц үг буруу байна.");
}
}
?>

За, одоо бүх зүйл дууслаа! Хичээл уйтгартай байж болох ч маш хэрэгтэй. Зөвхөн бүртгэлийн санааг энд харуулав, тэгвэл та үүнийг сайжруулж болно: хамгаалалт, дизайн, өгөгдлийн талбар нэмэх, аватар ачаалах, бүртгэлээс гарах (үүнийг хийхийн тулд сессийн хувьсагчдыг функцээр устгана уу. тохируулаагүй) гэх мэт. Амжилт хүсье!

Би бүх зүйлийг шалгасан, энэ нь зөв ажиллаж байна!

Өнөөдөр бид 10-р сарын сүүлээр интернетэд дэлбэрсэн алдартай CMS Joomla-ийн 1 өдрийн чухал эмзэг байдлын ашиглалтын талаар авч үзэх болно. Бид тоогоор эмзэг байдлын талаар ярих болно CVE-2016-8869, CVE-2016-8870Тэгээд CVE-2016-9081. Энэ гурвуулаа нэг кодоос үүсэлтэй бөгөөд урт таван жилийн турш хүрээний гүнд гацсан, жигүүрт нь хүлээгдэж, дараа нь салж, эмх замбараагүй байдал, хакердсан сайтууд, энэ Joomla-ийн гэм зэмгүй хэрэглэгчдийн нулимсыг авчрах болно. Мониторын гэрлээс нүд нь улайж, гар нь талхны үйрмэгээр дүүрсэн хамгийн зоригтой, зоригтой хөгжүүлэгчид л уурлаж буй муу ёрын сүнснүүдийг эсэргүүцэж, засварын тахилын ширээн дээр толгойгоо тавьж чадсан.

АНХААРУУЛГА

Бүх мэдээллийг зөвхөн мэдээллийн зорилгоор өгсөн болно. Энэ нийтлэлийн материалаас учирч болзошгүй хохирлыг редактор, зохиогч аль аль нь хариуцахгүй.

Энэ бүхэн хаанаас эхэлсэн

2016 оны 10-р сарын 6-нд Демис Палма Stack Exchange дээр сэдвийг үүсгэн асуув: Чухамдаа Joomla 3.6 хувилбар дээр яагаад ижил нэртэй бүртгэлтэй хэрэглэгчдийг бүртгүүлэх хоёр арга байдаг вэ? Эхнийх нь UsersControllerRegistration хянагч, хоёр дахь нь UsersControllerUser хянагч дотор байна. Дамис UsersControllerUser::register() аргыг хаа нэгтээ ашигласан уу, эсвэл хуучин логикоос үлдсэн хувьслын анахронизм уу гэдгийг мэдэхийг хүссэн. Түүний санаа зовоосон зүйл бол энэ аргыг ямар ч үзэл бодолд ашигладаггүй байсан ч үүнийг боловсруулсан асуулгаар дуудаж болно. Үүнд би itoctopus хочтой хөгжүүлэгчээс хариулт авсан бөгөөд тэрээр "Асуудал үнэхээр байна" гэж батлав. Мөн Joomla хөгжүүлэгчдэд тайлан илгээсэн.

Дараа нь үйл явдал хамгийн хурдацтай хөгжиж байв. 10-р сарын 18-нд Joomla-ийн хөгжүүлэгчид тухайн үед хэрэглэгчийн бүртгэлийг зөвшөөрөх PoC-ийн төслийг боловсруулсан Дамисийн тайланг хүлээн авав. Тэрээр өөрийн цахим хуудаснаа тэмдэглэл нийтэлж, олсон асуудлынхаа талаар болон энэ талаарх бодлоо ерөнхийд нь илэрхийлсэн байна. Мөн өдөр Joomla 3.6.3-ийн шинэ хувилбар гарсан бөгөөд энэ нь эмзэг кодыг агуулсан хэвээр байна.

Үүний дараа Давиде Тампеллини алдааг энгийн хэрэглэгч биш, харин администраторыг бүртгэх хүртэл эргүүлэв. Мөн 10-р сарын 21-нд Joomla хамгаалалтын багт шинэ хэрэг ирсэн. Эрх ямба нэмэгдүүлэх талаар аль хэдийн ярьж байна. Мөн өдөр Joomla вэбсайт дээр 10-р сарын 25-ны Мягмар гарагт системийн цөм дэх чухал сул талыг зассан 3.6.3 серийн дугаартай дараагийн хувилбар гарах болно гэсэн зарлал гарчээ.

10-р сарын 25 Joomla Security Strike Team нь Дамисын олж илрүүлсэн кодын хамгийн сүүлийн үеийн асуудлыг оллоо. Дараа нь 10-р сарын 21-ний өдрийн "Prepare 3.6.4 Stable Release" гэсэн үл ойлгогдох нэртэй амлалтыг албан ёсны Joomla репозиторын үндсэн салбар руу оруулж, харамсалтай алдааг зассан.

Үүнийг гарсны дараа олон сонирхолтой хүмүүс хөгжүүлэгчдийн нийгэмлэгт нэгддэг - тэд эмзэг байдлыг сурталчилж, мөлжлөгийг бэлтгэж эхэлдэг.

10-р сарын 27-нд судлаач Харри Робертс эмзэг CMS-тэй серверт PHP файл байршуулах боломжтой бэлэн мөлжлөгийг Xiphos Research репозиторт байршуулав.

Дэлгэрэнгүй мэдээлэл

За, цаана нь дууссан, хамгийн сонирхолтой хэсэг болох эмзэг байдлын дүн шинжилгээ рүү шилжье. Би Joomla 3.6.3-ыг туршилтын хувилбар болгон суулгасан тул бүх мөрийн дугаарууд энэ хувилбарт хамааралтай байх болно. Таны доор харах файлуудын бүх замыг суулгасан CMS-ийн үндэстэй харьцуулахад зааж өгөх болно.

Дамис Палмагийн нээлтийн ачаар системд хэрэглэгчийн бүртгэлийг гүйцэтгэдэг хоёр арга байдаг гэдгийг бид мэднэ. Эхнийх нь CMS-д ашиглагддаг бөгөөд /components/com_users/controllers/registration.php:108 файлд байрладаг. Хоёр дахь нь (бидний залгах шаардлагатай) /components/com_users/controllers/user.php:293-д амьдардаг. Үүнийг илүү нарийвчлан авч үзье.

286: /** 287: * Хэрэглэгчийг бүртгэх арга. 288: * 289: * @return boolean 290: * 291: * @1.6-с хойш 292: */ 293: нийтийн функцийн бүртгэл() 294: ( 295: JSession::checkToken("post") эсвэл jexit(JText::_) ("JINVALID_TOKEN")); ... 300: // Маягтын өгөгдлийг авна. 301: $data = $this->input->post->get("user", array(), "array"); . .. 315: $return = $model->validate($form, $data); 316: 317: // Алдаа байгаа эсэхийг шалгана. 318: хэрэв ($return === худал) 319: ( ... 345: / / Бүртгэлээ дуусгах 346: $return = $model->register($data);

Энд би зөвхөн сонирхолтой мөрүүдийг үлдээсэн. Эмзэг аргын бүрэн хувилбарыг Joomla репозитороос үзэх боломжтой.

Хэрэглэгчийн ердийн бүртгэлийн үед юу тохиолдохыг олж мэдье: ямар өгөгдөл илгээгдэж, хэрхэн боловсруулагддаг. Хэрэв хэрэглэгчийн бүртгэлийг тохиргоонд идэвхжүүлсэн бол маягтыг http://joomla.local/index.php/component/users/?view=registration хаягаас олж болно.


Хэрэглэгчийн хууль ёсны бүртгэлийн хүсэлт дараах дэлгэцийн зураг шиг харагдаж байна.


com_users бүрэлдэхүүн хэсэг нь хэрэглэгчидтэй ажиллах үүрэгтэй. Хүсэлт дэх ажлын параметрийг анхаарч үзээрэй. Энэ нь $controller.$method форматтай. Файлын бүтцийг харцгаая.

Хавтас дахь скриптүүдийн нэрс хянагчууддуудагдсан контроллеруудын нэртэй тохирч байна. Бидний хүсэлт одоо $controller = "registration" агуулж байгаа тул файлыг дуудах болно бүртгэл.phpба түүний register() арга.

Анхаар, асуулт: бүртгэлийн боловсруулалтыг кодын эмзэг газар руу хэрхэн шилжүүлэх вэ? Та аль хэдийн таамагласан байх. Эмзэг болон бодит аргуудын нэр ижил (бүртгэл) тул дуудагдсан контроллерын нэрийг өөрчлөхөд л хангалттай. Манай эмзэг хянагч хаана байрладаг вэ? Файлд байгаа нь зөв user.php. Энэ нь $controller = "хэрэглэгч" болж байна. Бүгдийг нэгтгэн бид task = user.register авна. Одоо бүртгэлийн хүсэлтийг бидэнд хэрэгтэй аргаар боловсруулж байна.


Бидний хийх ёстой хоёр дахь зүйл бол өгөгдлийг зөв форматаар илгээх явдал юм. Энд бүх зүйл энгийн. Legitimate register() нь биднээс jform нэртэй массивыг хүлээж байгаа бөгөөд үүнд бид бүртгэлийн өгөгдөл - нэр, нэвтрэх, нууц үг, имэйл (хүсэлтийн хамт дэлгэцийн зургийг харна уу).

  • /components/com_users/controllers/registration.php: 124: // Хэрэглэгчийн өгөгдлийг авах. 125: $requestData = $this->input->post->get("jform", array(), "array");

Манай үйлчлүүлэгч энэ өгөгдлийг user хэмээх массиваас авдаг.

  • /components/com_users/controllers/user.php: 301: // Маягтын өгөгдлийг авах. 302: $өгөгдөл = $this->input->post->get("хэрэглэгч", массив(), "массив");

Тиймээс бид хүсэлтийн бүх параметрийн нэрийг jfrom-оос user болгон өөрчилдөг.

Бидний гурав дахь алхам бол хүчинтэй CSRF жетон олох явдал юм, учир нь үүнгүйгээр бүртгэл хийх боломжгүй болно.

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

Энэ нь MD5 хэш шиг харагдаж байгаа бөгөөд та үүнийг жишээ нь /index.php/component/users/?view=login сайт дээрх зөвшөөрлийн маягтаас авч болно.


Одоо та хүссэн аргыг ашиглан хэрэглэгчдийг үүсгэж болно. Хэрэв бүх зүйл бүтсэн бол баяр хүргэе - та зүгээр л эмзэг байдлыг ашигласан CVE-2016-8870"Шинэ хэрэглэгчдийг бүртгэх зөвшөөрлийн шалгалт дутуу байна."

UsersControllerRegistration хянагчийн "ажлын" регистрийн() аргад иймэрхүү харагдаж байна:

  • /components/com_users/controllers/registration.php: 113: // Хэрэв бүртгэл идэвхгүй бол - Нэвтрэх хуудас руу дахин чиглүүлнэ. 114: хэрэв (JComponentHelper::getParams("com_users")->get("allowUserRegistration") == 0) 115: ( 116: $this->setRedirect(JRoute::_("index.php?option=com_users&view=" нэвтрэх", худал)); 117: 118: худал буцаана; 119: )

Тиймээс эмзэг бүлэгт:

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

Тийм ээ, арга ч үгүй.

Хоёр дахь, илүү ноцтой асуудлыг ойлгохын тулд бидний үүсгэсэн хүсэлтийг илгээж, кодын янз бүрийн хэсэгт хэрхэн хэрэгжиж байгааг харцгаая. Ажилчны аргаар хэрэглэгчийн оруулсан өгөгдлийг баталгаажуулах үүрэгтэй хэсэг энд байна:

Үргэлжлэлийг зөвхөн гишүүд үзэх боломжтой

Сонголт 1. Сайт дээрх бүх материалыг уншихын тулд "сайт" нийгэмлэгт нэгдээрэй

Нийгэмлэгт заасан хугацаанд гишүүнээр элсэх нь танд Хакерын БҮХ материалд хандах боломжийг олгож, хувийн хуримтлагдсан хөнгөлөлтөө нэмэгдүүлж, мэргэжлийн Xakep онооны үнэлгээг хуримтлуулах боломжийг олгоно!

Энэ нийтлэлд та сурах болно бүртгэлийн болон зөвшөөрлийн маягтыг хэрхэн үүсгэх HTML, JavaScript, PHP болон MySql ашиглан. Ийм маягтуудыг төрлөөс нь үл хамааран бараг бүх вэбсайтад ашигладаг. Эдгээр нь форум, онлайн дэлгүүр, нийгмийн сүлжээ (Facebook, Twitter, Odnoklassniki гэх мэт) болон бусад олон төрлийн сайтуудад зориулагдсан.

Хэрэв таны компьютер дээр вэбсайт байгаа бол танд аль хэдийн байгаа гэж найдаж байна локал сервер суулгаж, ажиллаж байна. Үүнгүйгээр юу ч бүтэхгүй.

Өгөгдлийн санд хүснэгт үүсгэх

Хэрэглэгчийн бүртгэлийг хэрэгжүүлэхийн тулд юуны өмнө мэдээллийн сан хэрэгтэй. Хэрэв танд байгаа бол гайхалтай, үгүй ​​бол та үүнийг бүтээх хэрэгтэй. Өгүүлэлд би үүнийг хэрхэн хийх талаар дэлгэрэнгүй тайлбарласан.

Тиймээс бид мэдээллийн сантай (Товчилсон DB гэж нэрлэдэг), одоо бид хүснэгт үүсгэх хэрэгтэй хэрэглэгчидҮүнд бид бүртгэлтэй хэрэглэгчдээ нэмэх болно.

Өгөгдлийн санд хүснэгтийг хэрхэн үүсгэх талаар мөн нийтлэлд тайлбарласан. Хүснэгт үүсгэхийн өмнө бид ямар талбаруудыг агуулж байгааг тодорхойлох хэрэгтэй. Эдгээр талбарууд нь бүртгэлийн маягтын талбаруудтай тохирч байх болно.

Тиймээс бид форм маань ямар талбаруудтай болохыг төсөөлж, төсөөлж, хүснэгт үүсгэв хэрэглэгчидЭдгээр талбаруудтай:

  • ID- Тодорхойлогч. Талбай IDМэдээллийн санд байгаа бүх хүснэгтүүд байх ёстой.
  • Нэр- Нэрийг хадгалахын тулд.
  • овог_нэр- Овогоо хадгалахын тулд.
  • имэйл- Шуудангийн хаягийг хадгалах. Бид цахим шууданг нэвтрэлт болгон ашиглах тул энэ талбар нь өвөрмөц байх ёстой, өөрөөр хэлбэл UNIQUE индекстэй байх ёстой.
  • email_status- Имэйл баталгаажсан эсэхийг харуулах талбар. Хэрэв захидал баталгаажсан бол энэ нь 1 утгатай байх болно, эс тэгвээс утга нь 0 байна.
  • нууц үг- Нууц үгээ хадгалахын тулд.


Хэрэв та бүртгэлийн маягтдаа өөр талбартай байхыг хүсвэл энд нэмж болно.

Энэ бол бидний ширээ хэрэглэгчидбэлэн. Дараагийн шат руугаа явцгаая.

Өгөгдлийн сангийн холболт

Бид мэдээллийн сан үүсгэсэн, одоо бид түүнтэй холбогдох хэрэгтэй. Бид MySQLi PHP өргөтгөлийг ашиглан холбогдох болно.

Манай сайтын хавтсанд нэртэй файл үүсгэнэ үү dbconnect.php, мөн дотор нь дараах скриптийг бичнэ үү:

DB холболтын алдаа. Алдааны тайлбар: ".mysqli_connect_error()."

"; exit(); ) // Холболтын кодчилолыг тохируулна уу $mysqli->set_charset("utf8"); // Тохиромжтой болгох үүднээс энд манай сайтын нэрийг агуулсан хувьсагчийг нэмнэ үү $address_site = "http://testsite .local" ; ?>

Энэ файл dbconnect.phpмаягт боловсруулагчтай холбогдох шаардлагатай болно.

Хувьсагчийг анхаарч үзээрэй $address_site, энд би ажиллах гэж буй туршилтын сайтынхаа нэрийг зааж өгсөн. Үүний дагуу сайтынхаа нэрийг зааж өгнө үү.

Сайтын бүтэц

Одоо манай сайтын HTML бүтцийг харцгаая.

Бид сайтын толгой ба хөлийг тусдаа файл болгон зөөнө. header.phpТэгээд footer.php. Бид тэдгээрийг бүх хуудсанд оруулах болно. Үндсэн хуудсан дээр (файл index.php), бүртгэлийн маягт бүхий хуудас руу (файл form_register.php) болон зөвшөөрлийн маягт бүхий хуудас руу (файл form_auth.php).

Манай холбоосоор хаах, бүртгэлТэгээд зөвшөөрөл, тэдгээрийг бүх хуудсан дээр харуулахын тулд сайтын толгой хэсэгт нэмнэ үү. Нэг холбоосыг хаягаар оруулна бүртгэлийн хуудас(файл form_register.php) болон нөгөө нь хуудас руу зөвшөөрлийн маягт(файл form_auth.php).

header.php файлын агуулга:

Манай сайтын нэр

Үүний үр дүнд манай үндсэн хуудас дараах байдалтай байна.


Мэдээжийн хэрэг, танай сайт шал өөр бүтэцтэй байж болох ч энэ нь одоо бидний хувьд чухал биш юм. Хамгийн гол нь бүртгүүлэх, зөвшөөрөл авах холбоосууд (товчлуур) байдаг.

Одоо бүртгэлийн маягт руу шилжье. Та аль хэдийн ойлгосноор бид файлд байгаа form_register.php.

Өгөгдлийн сан руу (phpMyAdmin-д) очиж, хүснэгтийн бүтцийг нээнэ үү хэрэглэгчидмөн бидэнд ямар талбар хэрэгтэйг хараарай. Энэ нь бидэнд овог нэр, шуудангийн хаяг (И-мэйл) оруулах талбар, нууц үг оруулах талбар хэрэгтэй гэсэн үг юм. Мөн аюулгүй байдлын үүднээс бид captcha оруулах талбар нэмнэ.

Сервер дээр бүртгэлийн маягтыг боловсруулсны үр дүнд янз бүрийн алдаа гарч болзошгүй тул хэрэглэгч бүртгүүлэх боломжгүй болно. Тиймээс, хэрэглэгч яагаад бүртгэл амжилтгүй болсныг ойлгохын тулд эдгээр алдааны тухай мессежийг харуулах шаардлагатай.

Маягтыг харуулахын өмнө сессийн алдааны мэдэгдлийг харуулахын тулд блок нэмнэ үү.

Бас нэг зүйл бол хэрэв хэрэглэгч аль хэдийн зөвшөөрөл авсан бол сониуч зангаасаа болоод хөтчийн хаягийн мөрөнд бичээд бүртгэлийн хуудас руу шууд очдог. site_address/form_register.php, дараа нь энэ тохиолдолд бүртгэлийн маягтын оронд бид түүнийг аль хэдийн бүртгүүлсэн гэсэн толгойг харуулах болно.

Ерөнхийдөө файлын код form_register.phpбид үүнийг авсан:

Та аль хэдийн бүртгүүлсэн байна

Хөтөч дээр бүртгэлийн маягт бүхий хуудас дараах байдалтай байна.


Ашиглах замаар шаардлагатай шинж чанар, бид бүх талбарыг заавал оруулах болсон.

Бүртгэлийн маягтын кодыг хаана анхаарч үзээрэй captcha харагдана:


Бид зургийн src атрибутын утгад файл руу хүрэх замыг зааж өгсөн captcha.php, энэ captcha-г үүсгэдэг.

Файлын кодыг харцгаая captcha.php:

Код нь маш сайн тайлбарлагдсан тул би зөвхөн нэг зүйл дээр анхаарлаа хандуулах болно.

Функц дотор imageTtfText(), үсгийн фонт хүрэх замыг зааж өгсөн verdana.ttf. Тиймээс captcha зөв ажиллахын тулд бид хавтас үүсгэх ёстой фонтууд, фонтын файлыг тэнд байрлуул verdana.ttf. Та үүнийг интернетээс олж, татаж авах эсвэл энэ нийтлэлийн материалтай архиваас авч болно.

Бид HTML бүтэцтэй болсон тул цаашаа явах цаг боллоо.

jQuery ашиглан имэйлийн хүчинтэй эсэхийг шалгаж байна

Аливаа маягт нь үйлчлүүлэгч тал (JavaScript, jQuery ашиглан) болон сервер тал дээр оруулсан өгөгдлийн хүчинтэй эсэхийг шалгах шаардлагатай.

Имэйлийн талбарт бид онцгой анхаарал хандуулах ёстой. Оруулсан шуудангийн хаяг хүчинтэй байх нь маш чухал юм.

Энэ оролтын талбарт бид имэйлийн төрлийг (type="email") тохируулсан бөгөөд энэ нь буруу форматаас сэрэмжлүүлдэг. Гэхдээ энэ нь хангалтгүй, учир нь хөтөчийн бидэнд өгдөг код шалгагчаар дамжуулан бид атрибутын утгыг амархан өөрчлөх боломжтой төрөл-тай имэйлдээр текст, тэгээд л бидний чек хүчингүй болно.


Мөн энэ тохиолдолд бид илүү найдвартай шалгалт хийх ёстой. Үүнийг хийхийн тулд бид JavaScript-ийн jQuery номын санг ашиглах болно.

jQuery номын санг холбохын тулд файл дотор header.phpшошго хооронд , хаалтын шошгын өмнө , энэ мөрийг нэмнэ үү:

Энэ мөрний дараа бид имэйл баталгаажуулах кодыг нэн даруй нэмнэ. Энд бид оруулсан нууц үгийн уртыг шалгах код нэмнэ. Түүний урт нь дор хаяж 6 тэмдэгт байх ёстой.

Энэ скриптийг ашиглан бид оруулсан имэйл хаягийг хүчинтэй эсэхийг шалгана. Хэрэв хэрэглэгч буруу и-мэйл оруулсан бол бид энэ тухай алдааны мессежийг үзүүлж, маягт илгээх товчийг идэвхгүй болгоно. Хэрэв бүх зүйл зүгээр бол бид алдааг арилгаж, маягт илгээх товчийг идэвхжүүлнэ.

Тиймээс бид үйлчлүүлэгчийн тал дээр маягтын баталгаажуулалтыг хийж дуусгасан. Одоо бид үүнийг сервер рүү илгээх боломжтой бөгөөд бид хэд хэдэн шалгалт хийж, мэдээллийн санд өгөгдөл нэмэх болно.

Хэрэглэгчийн бүртгэл

Бид маягтыг боловсруулахаар файл руу илгээдэг register.php, POST аргаар. Энэ зохицуулагч файлын нэрийг атрибутын утгад зааж өгсөн болно үйлдэл. Мөн илгээх аргыг шинж чанарын утгад зааж өгсөн болно арга.

Энэ файлыг нээнэ үү register.phpбидний хийх ёстой хамгийн эхний зүйл бол сесс эхлүүлэх функц бичиж, өмнө нь үүсгэсэн файлаа холбох явдал юм dbconnect.php(Энэ файлд бид мэдээллийн сантай холболт хийсэн). Мөн эсүүдийг нэн даруй зарлацгаая алдааны_мэдээлэлТэгээд амжилтын_мэдээлэлглобал сесс массивт. IN алдааны_мэдээлэлБид маягтыг боловсруулах явцад гарсан бүх алдааны мэдэгдлийг бүртгэх болно амжилтын_мэдээлэл, бид баяр хөөртэй мессеж бичих болно.

Үргэлжлүүлэхээсээ өмнө бид шалгах ёстой маягт ерөөсөө ирүүлсэн үү?. Халдагчид атрибутын утгыг харж болно үйлдэлмаягтаас энэ маягтыг аль файл боловсруулж байгааг олж мэдээрэй. Мөн тэрээр хөтчийн хаягийн мөрөнд дараах хаягийг бичээд энэ файл руу шууд орох санаатай байж магадгүй юм. http://site_address/register.php

Тиймээс бид дэлхийн POST массив дахь нэр нь маягт дээрх манай "Бүртгүүлэх" товчлуурын нэртэй таарч байгаа нүдийг шалгах хэрэгтэй. Ингэснээр бид "Бүртгүүлэх" товчийг дарсан эсэхийг шалгана.

Хэрэв халдагчид энэ файл руу шууд орохыг оролдвол алдааны мэдэгдэл хүлээн авах болно. $address_site хувьсагч нь сайтын нэрийг агуулдаг бөгөөд энэ нь файлд зарлагдсан гэдгийг танд сануулъя. dbconnect.php.

Алдаа!үндсэн хуудас.

"); } ?>

Сеанс дахь captcha утгыг үүсгэх үед файлд нэмсэн captcha.php. Сануулахад, би танд энэ файлын кодыг дахин харуулах болно captcha.php, энд captcha утгыг сессэд нэмдэг:

Одоо баталгаажуулалтыг өөрөө үргэлжлүүлье. Файлд register.php, if блок дотор бид "Бүртгүүлэх" товчийг дарсан эсэхийг шалгадаг, эс тэгвээс " коммент " заасан байгаа эсэхийг шалгадаг. // (1) Дараагийн кодын зай"бид бичдэг:

//Хүлээн авсан captcha-г шалгана уу //Мөрийн эхэн ба төгсгөл хүртэлх зайг таслах $captcha = trim($_POST["captcha"]); if(isset($_POST["captcha"]) && !empty($captcha))( //Хүлээн авсан утгыг сессийн утгатай харьцуул. if(($_SESSION["rand"] != $captcha) && ($_SESSION ["rand"] != ""))( // Хэрэв captcha буруу байвал бид хэрэглэгчийг бүртгэлийн хуудас руу буцаах бөгөөд тэнд бид түүнд captcha буруу оруулсан гэсэн алдааны мессежийг харуулах болно. $error_message = "

Алдаа!Та буруу captcha оруулсан байна

"; // Алдааны мэдэгдлийг сессэд хадгалах. $_SESSION["error_messages"] = $error_message; // Хэрэглэгчийг бүртгэлийн хуудасны толгой хэсэг рүү буцаана("HTTP/1.1 301 Байнга зөөгдсөн"); header("Байршил: " .$address_site ."/form_register.php"); //Скриптээс гарахыг зогсоох(); ) // (2) Дараагийн кодыг байрлуулах )else( //Хэрэв captcha дамжуулагдаагүй эсвэл хоосон байвал гарах болно. ("

Алдаа!Баталгаажуулах код, өөрөөр хэлбэл captcha код байхгүй. Та үндсэн хуудас руу очиж болно.

"); }

Дараа нь бид POST массиваас хүлээн авсан өгөгдлийг боловсруулах хэрэгтэй. Юуны өмнө бид дэлхийн POST массивын агуулгыг шалгах хэрэгтэй, өөрөөр хэлбэл бидний маягтын оролтын талбаруудын нэртэй тохирч байгаа нүднүүд байгаа эсэхийг шалгах хэрэгтэй.

Хэрэв нүд байгаа бол бид энэ нүдн дэх мөрийн эхэн ба төгсгөлийн зайг багасгаж, эс тэгвээс бид хэрэглэгчийг бүртгэлийн маягт бүхий хуудас руу буцааж чиглүүлнэ.

Дараа нь бид хоосон зайг багасгасны дараа бид хувьсагчид мөрийг нэмж, энэ хувьсагчийг хоосон эсэхийг шалгана; хэрэв хоосон биш бол бид цааш шилжих болно, үгүй ​​бол бид бүртгэлийн маягт бүхий хуудас руу дахин чиглүүлнэ.

Энэ кодыг заасан байршилд буулгана уу" // (2) Дараагийн кодын зай".

/* $_POST глобал массив дахь маягтаас илгээсэн өгөгдөл байгаа эсэхийг шалгаж, илгээсэн өгөгдлийг ердийн хувьсагчид боож өгнө.*/ if(isset($_POST["first_name"]))( //Эхнээс нь хоосон зайг таслана. ба мөрний төгсгөл $first_name = trim($_POST["first_name"]); //Хувьсагчийг хоосон эсэхийг шалгана уу if(!empty($first_name))( // Аюулгүй байдлын үүднээс тусгай тэмдэгтүүдийг HTML объект руу хөрвүүлнэ $first_name = htmlspecialchars($first_name, ENT_QUOTES) ; )else( // Алдааны мэдэгдлийг сессэд хадгална уу. $_SESSION["error_messages"] .= "

Нэрээ оруулна уу

Нэрийн талбар дутуу байна

"; //Хэрэглэгчийг бүртгэлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_register.php"); //Скриптээс гарахыг зогсоох(); ) if( isset($_POST["сүүлийн_нэр"]))( //Мөрийн эхэн ба төгсгөлөөс хоосон зайг хасах $сүүлийн_нэр = тайрах($_POST["овгийн_нэр"]); if(!empty($сүүлийн_нэр)) ( // Аюулгүй байдлын үүднээс тусгай тэмдэгтүүдийг HTML нэгж болгон хөрвүүлнэ $last_name = htmlspecialchars($last_name, ENT_QUOTES); )else( // Алдааны мэдэгдлийг сессэд хадгал. $_SESSION["error_messages"] .= "

Овогоо оруулна уу

"; //Хэрэглэгчийг бүртгэлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_register.php"); //Скриптээс гарахыг зогсоох(); ) )else ( // Алдааны мэдэгдлийг сессэд хадгал. $_SESSION["error_messages"] .= "

Овог талбар дутуу байна

"; //Хэрэглэгчийг бүртгэлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_register.php"); //Скриптээс гарахыг зогсоох(); ) if( isset($_POST["email"]))( //Мөрийн эхэн ба төгсгөлөөс хоосон зайг хасах $email = trim($_POST["email"]); if(!empty($email)) ( $email = htmlspecialchars ($email, ENT_QUOTES); // (3) Имэйл хаягийн формат болон түүний өвөрмөц байдлыг шалгах кодын байршил )өөрөөр( // Алдааны мэдэгдлийг сессэд хадгал. $_SESSION["error_messages"] .= "

Имэйлээ оруулна уу

"; //Хэрэглэгчийг бүртгэлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_register.php"); //Скриптээс гарахыг зогсоох(); ) )else ( // Алдааны мэдэгдлийг сессэд хадгал. $_SESSION["error_messages"] .= "

"; //Хэрэглэгчийг бүртгэлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_register.php"); //Скриптээс гарахыг зогсоох(); ) if( isset($_POST["нууц үг"]))( //Мөрийн эхэн ба төгсгөлөөс хоосон зайг хасах $password = trim($_POST["нууц үг"]); if(!empty($password)) ( $password = htmlspecialchars ($password, ENT_QUOTES); //Нууц үгээ шифрлэнэ $password = md5($password."top_secret"); )else( // Алдааны мэдэгдлийг сессэд хадгал. $_SESSION["error_messages"] .= "

Нууц үгээ оруулна уу

"; //Хэрэглэгчийг бүртгэлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_register.php"); //Скриптээс гарахыг зогсоох(); ) )else ( // Алдааны мэдэгдлийг сессэд хадгал. $_SESSION["error_messages"] .= "

"; //Хэрэглэгчийг бүртгэлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_register.php"); //Скриптээс гарахыг зогсоох(); ) // (4) Өгөгдлийн санд хэрэглэгч нэмэх кодыг байрлуул

Талбай нь онцгой ач холбогдолтой юм имэйл. Бид хүлээн авсан шуудангийн хаягийн хэлбэр, мэдээллийн сан дахь өвөрмөц байдлыг шалгах ёстой. Өөрөөр хэлбэл, бүртгэлтэй ижил имэйл хаягтай хэрэглэгч байна уу?

заасан байршилд" // (3) Шуудангийн хаягийн хэлбэр, өвөрмөц байдлыг шалгахын тулд байршлын код"Дараах кодыг нэмнэ үү:

//Хүлээн авсан имэйл хаягийн форматыг $reg_email = "/^**@(+(*+)*\.)++/i" энгийн илэрхийлэл ашиглан шалгана уу; //Хэрэв хүлээн авсан имэйл хаягийн формат нь ердийн илэрхийлэлтэй таарахгүй байвал if(!preg_match($reg_email, $email))( // Алдааны мэдэгдлийг сессэд хадгал. $_SESSION["error_messages"] .= "

Та буруу имэйл оруулсан байна

"; //Хэрэглэгчийг бүртгэлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_register.php"); //Скриптээс гарахыг зогсоох(); ) // Бид өгөгдлийн санд ийм хаяг байгаа эсэхийг шалгадаг.$result_query = $mysqli->query("SELECT `email` FROM `users` WHERE `email`="".$email.""); / /Хэрэв хүлээн авсан тоо нь яг нэг мөр байгаа бол энэ имэйл хаягтай хэрэглэгч аль хэдийн бүртгүүлсэн гэсэн үг if($result_query->num_rows == 1)( //Хэрэв авсан үр дүн худал биш бол if(($row =) $result_query->fetch_assoc()) != false) ( // Алдааны мэдэгдлийг сессэд хадгал. $_SESSION["error_messages"] .= "

Энэ имэйл хаягтай хэрэглэгч аль хэдийн бүртгүүлсэн байна

"; //Хэрэглэгчийг бүртгэлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_register.php"); )else( // Алдааны мэдэгдлийг хадгалах сесс рүү . $_SESSION["error_messages"] .= "

Өгөгдлийн сангийн асуулгад алдаа гарлаа

"; //Хэрэглэгчийг бүртгэлийн хуудасны толгой хэсэгт буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_register.php"); ) /* сонголтыг хаах */ $ result_query-> close(); //Скриптээс гарахыг зогсоох(); ) /* сонголтыг хаах */ $result_query->close();

Тиймээс бид бүх шалгалтыг хийж дууссан тул хэрэглэгчийг мэдээллийн санд нэмэх цаг болжээ. заасан байршилд" // (4) Өгөгдлийн санд хэрэглэгч нэмэх кодыг байрлуул"Дараах кодыг нэмнэ үү:

//Өгөгдлийн санд хэрэглэгч нэмэх асуулга $result_query_insert = $mysqli->query("INSERT INTO `хэрэглэгчид` (нэр, овог, имэйл, нууц үг) VALUES ("".$first_name."", "".$ last_name) ." ", "".$мэйл.", "".$нууц үг."")"); if(!$result_query_insert)( // Алдааны мэдэгдлийг сессэд хадгална. $_SESSION["error_messages"] .= "

Хэрэглэгчийг мэдээллийн санд нэмэх хүсэлтэд алдаа гарлаа

"; //Хэрэглэгчийг бүртгэлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_register.php"); //Скриптээс гарахыг зогсоох(); )else($_SESSION["амжилттай_мессеж"] = "

Бүртгэл амжилттай боллоо!!!
Одоо та хэрэглэгчийн нэр, нууц үгээ ашиглан нэвтэрч болно.

"; //Хэрэглэгчийг зөвшөөрлийн хуудасны толгой хэсэг рүү илгээх("HTTP/1.1 301 байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_auth.php"); ) /* Хүсэлтийг гүйцээж байна */ $ result_query_insert-> close(); //Өгөгдлийн сангийн холболтыг хаах $mysqli->close();

Хэрэв мэдээллийн санд хэрэглэгч нэмэх хүсэлтэд алдаа гарсан бол бид энэ алдааны тухай мессежийг сессэд нэмж, хэрэглэгчийн бүртгэлийн хуудас руу буцаана.

Үгүй бол, хэрэв бүх зүйл сайн болсон бол бид хуралдаанд мессеж нэмж оруулах боловч энэ удаад илүү таатай байна, тухайлбал бид бүртгэл амжилттай болсон гэж хэрэглэгчдэд хэлэх болно. Мөн бид үүнийг зөвшөөрлийн маягт бүхий хуудас руу дахин чиглүүлдэг.

Имэйл хаягийн формат болон нууц үгийн уртыг шалгах скрипт файлд байна header.php, тиймээс энэ маягтын талбаруудад мөн хэрэгжинэ.

Сессийг мөн файлд эхлүүлсэн header.php, тиймээс файлд form_auth.phpСесс эхлүүлэх шаардлагагүй, учир нь бид алдаа гаргах болно.


Би аль хэдийн хэлсэнчлэн имэйл хаягийн формат, нууц үгийн уртыг шалгах скрипт энд ажилладаг. Тиймээс, хэрэв хэрэглэгч буруу имэйл хаяг эсвэл богино нууц үг оруулсан бол тэр даруй алдааны мэдэгдэл хүлээн авах болно. Товч орохидэвхгүй болно.

Алдааг зассаны дараа товчлуур орохидэвхжсэнээр хэрэглэгч маягтыг серверт илгээж, түүнийг боловсруулах боломжтой болно.

Хэрэглэгчийн зөвшөөрөл

Утгыг атрибут болгох үйлдэлзөвшөөрлийн бэрхшээл нь тодорхой файлтай байна auth.php, энэ нь маягтыг энэ файлд боловсруулна гэсэн үг юм.

Тиймээс файлыг нээнэ үү auth.phpзөвшөөрлийн маягтыг боловсруулахын тулд код бичнэ үү. Таны хийх ёстой хамгийн эхний зүйл бол сесс эхлүүлж, файлыг холбох явдал юм dbconnect.phpмэдээллийн сантай холбогдохын тулд.

//Маягтыг боловсруулахад гарч болох алдаануудыг нэмэх нүдийг зарлана. $_SESSION["error_messages"] = ""; //Амжилттай мессеж нэмэх нүдийг зарлах $_SESSION["success_messages"] = "";

/* Маягтыг илгээсэн эсэх, өөрөөр хэлбэл Нэвтрэх товчийг дарсан эсэхийг шалгана уу. Хэрэв тийм бол бид цаашаа явах болно, үгүй ​​бол бид хэрэглэгчдэд энэ хуудсанд шууд хандсан гэсэн алдааны мессежийг харуулах болно. */ if(isset($_POST["btn_submit_auth"]) && !empty($_POST["btn_submit_auth"]))( //(1) Дараагийн кодын зай )else( exit("

Алдаа!Та энэ хуудсанд шууд хандсан тул боловсруулах өгөгдөл байхгүй байна. Та үндсэн хуудас руу очиж болно.

"); }

//Хүлээн авсан captcha-г шалгана уу if(isset($_POST["captcha"]))( //Мөрийн эхэн ба төгсгөл хүртэлх зайг таслах $captcha = trim($_POST["captcha"]); if(! empty($captcha ))( //Хүлээн авсан утгыг сессийн утгатай харьцуул. if(($_SESSION["rand"] != $captcha) && ($_SESSION["rand"] != "")) ( // Хэрэв captcha буруу байвал бид хэрэглэгчийг зөвшөөрлийн хуудас руу буцаах ба тэнд бид түүнд буруу captcha оруулсан гэсэн алдааны мессежийг харуулах болно. $error_message = "

Алдаа!Та буруу captcha оруулсан байна

"; // Алдааны мэдэгдлийг сессэд хадгалах. $_SESSION["error_messages"] = $error_message; // Хэрэглэгчийг зөвшөөрлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); header("Байршил: " .$address_site ."/form_auth.php"); //Скриптээс гарахыг зогсоо(); ) )else( $error_message = "

Алдаа! Captcha оруулах талбар хоосон байж болохгүй.

"; // Алдааны мэдэгдлийг сессэд хадгалах. $_SESSION["error_messages"] = $error_message; // Хэрэглэгчийг зөвшөөрлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); header("Байршил: " .$address_site ."/form_auth.php"); //Скриптээс гарахыг зогсоох(); ) //(2) Имэйл хаягийг боловсруулах газар //(3) Нууц үг боловсруулах газар //(4) өгөгдлийн санд асуулга бичих )else ( //Хэрэв captcha-г дамжуулаагүй бол exit("

Алдаа!Баталгаажуулах код, өөрөөр хэлбэл captcha код байхгүй. Та үндсэн хуудас руу очиж болно.

"); }

Хэрэв хэрэглэгч баталгаажуулах кодыг зөв оруулсан бол бид цаашаа явах болно, эс тэгвээс бид түүнийг зөвшөөрлийн хуудас руу буцаана.

Шуудангийн хаягийг шалгаж байна

//Мөрийн эхэн ба төгсгөлөөс зайг хасах $email = trim($_POST["email"]); if(isset($_POST["email"]))( if(!empty($email))( $email = htmlspecialchars($email, ENT_QUOTES); //Хүлээн авсан имэйл хаягийн форматыг $ ердийн илэрхийлэл ашиглан шалгана уу. reg_email = " /^**@(+(*+)*\.)++/i"; //Хэрэв хүлээн авсан имэйл хаягийн формат нь ердийн илэрхийлэлтэй таарахгүй байвал if(!preg_match($reg_email, $email) ))( // Сессийн алдааны мэдэгдлийг хадгалах. $_SESSION["error_messages"] .= "

Та буруу имэйл оруулсан байна

"; //Хэрэглэгчийг зөвшөөрлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_auth.php"); //Скриптээс гарахыг зогсоох(); ) )else ( // Алдааны мэдэгдлийг сессэд хадгал. $_SESSION["error_messages"] .= "

Шуудангийн хаяг (и-мэйл) оруулах талбар хоосон байж болохгүй.

"; //Хэрэглэгчийг бүртгэлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_register.php"); //Скриптээс гарахыг зогсоох(); ) )else ( // Алдааны мэдэгдлийг сессэд хадгал. $_SESSION["error_messages"] .= "

Имэйл оруулах талбар дутуу байна

"; //Хэрэглэгчийг зөвшөөрлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_auth.php"); //Скриптээс гарахыг зогсоох(); ) // (3) Нууц үг боловсруулах талбар

Хэрэв хэрэглэгч имэйл хаягаа буруу форматаар оруулсан эсвэл имэйл хаягийн талбарын утга хоосон байвал бид түүнийг зөвшөөрлийн хуудас руу буцааж, энэ тухай мессежийг харуулдаг.

Нууц үг баталгаажуулах

Дараагийн боловсруулах талбар бол нууц үгийн талбар юм. заасан газар руу" //(3) Нууц үг боловсруулах газар", бид бичдэг:

If(isset($_POST["нууц үг"]))( //Мөрийн эхэн ба төгсгөлөөс хоосон зайг хасах $password = trim($_POST["нууц үг"]); if(!empty($password))( $password = htmlspecialchars($password, ENT_QUOTES); //Нууц үгийг шифрлэнэ $password = md5($password."top_secret"); )else( //Алдааны мэдэгдлийг сессэд хадгал. $_SESSION["error_messages"] . = "

Нууц үгээ оруулна уу

"; //Хэрэглэгчийг бүртгэлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_auth.php"); //Скриптээс гарахыг зогсоох(); ) )else ( // Алдааны мэдэгдлийг сессэд хадгал. $_SESSION["error_messages"] .= "

Нууц үгийн талбар дутуу байна

"; //Хэрэглэгчийг бүртгэлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_auth.php"); //Скриптээс гарахыг зогсоох(); )

Энд бид md5() функцийг ашиглан хүлээн авсан нууц үгээ шифрлэх болно, учир нь бидний нууц үг мэдээллийн санд шифрлэгдсэн хэлбэрээр байдаг. Манай тохиолдолд шифрлэлтийн нэмэлт нууц үг " маш нууц" гэсэн нь хэрэглэгчийг бүртгэхдээ ашигласан байх ёстой.

Одоо та имэйл хаяг нь хүлээн авсан имэйл хаягтай, нууц үг нь хүлээн авсан нууц үгтэй тэнцүү хэрэглэгчийг сонгохын тулд мэдээллийн санд асуулга хийх хэрэгтэй.

//Хэрэглэгчийн сонголт дээр үндэслэн мэдээллийн санд асуулга. $result_query_select = $mysqli->query("SELECT * FROM `users` WHERE email = "".$email."" AND password = "".$нууц үг."""); if(!$result_query_select)( // Алдааны мэдэгдлийг сессэд хадгал. $_SESSION["error_messages"] .= "

Өгөгдлийн сангаас хэрэглэгч сонгохдоо асуулгын алдаа

"; //Хэрэглэгчийг бүртгэлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_auth.php"); //Скриптээс гарахыг зогсоох(); )else( //Өгөгдлийн санд ийм өгөгдөлтэй хэрэглэгч байхгүй эсэхийг шалгаад алдааны мессежийг харуулна if($result_query_select->num_rows == 1)( // Хэрэв оруулсан өгөгдөл нь өгөгдлийн сангийн өгөгдөлтэй таарч байвал хадгална уу. сессийн массивын нэвтрэх болон нууц үг. $_SESSION["email"] = $email; $_SESSION["password"] = $password; //Хэрэглэгчийг үндсэн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн" ); header("Байршил: ".$address_site ."/index.php"); )else( // Алдааны мэдэгдлийг сессэд хадгал. $_SESSION["error_messages"] .= "

Буруу нэвтрэх болон/эсвэл нууц үг

"; //Хэрэглэгчийг зөвшөөрлийн хуудасны толгой хэсэг рүү буцаах("HTTP/1.1 301 Байнгын зөөгдсөн"); толгой("Байршил: ".$address_site."/form_auth.php"); //Скриптээс гарахыг зогсоох(); ) )

Сайтаас гарах

Мөн бидний хэрэгжүүлэх хамгийн сүүлчийн зүйл бол сайтаас гарах журам. Одоогоор толгой хэсэгт бид зөвшөөрлийн хуудас болон бүртгэлийн хуудасны холбоосыг харуулж байна.

Сайтын толгой хэсэгт (файл header.php), сессийг ашиглан бид хэрэглэгч аль хэдийн зөвшөөрөл авсан эсэхийг шалгана. Хэрэв тийм биш бол бид бүртгэл, зөвшөөрлийн холбоосыг харуулах болно, эс тэгвээс (хэрэв тэр зөвшөөрөлтэй бол) бүртгэл, зөвшөөрлийн холбоосын оронд бид холбоосыг харуулна. гарах.

Файлаас өөрчилсөн кодын хэсэг header.php:

Бүртгэл

гарах

Та сайтаас гарах холбоос дээр дарахад бид файл руу очно logout.php, Энд бид зүгээр л сешнээс имэйл хаяг болон нууц үг бүхий нүднүүдийг устгадаг. Үүний дараа бид хэрэглэгчийг холбоос дээр дарсан хуудас руу буцаана гарах.

Файлын код logout.php:

Тэгээд л болоо. Одоо та яаж гэдгийг мэднэ бүртгэл, зөвшөөрлийн маягтыг хэрэгжүүлэх, боловсруулахТаны вэбсайт дээрх хэрэглэгч. Эдгээр маягтууд нь бараг бүх вэбсайтаас олддог тул програмист бүр үүнийг хэрхэн бүтээхээ мэддэг байх ёстой.

Мөн бид клиент тал дээр (хөтөч дээр, JavaScript, jQuery ашиглан) болон сервер тал дээр (PHP ашиглан) оролтын өгөгдлийг хэрхэн баталгаажуулахыг сурсан. Бид ч бас сурсан сайтаас гарах журмыг хэрэгжүүлэх.

Бүх скриптүүд шалгагдаж, ажиллаж байна. Та энэ жижиг сайтын файлтай архивыг энэ холбоосоос татаж авах боломжтой.

Ирээдүйд би тайлбарлах нийтлэл бичих болно. Мөн би (хуудсыг дахин ачаалахгүйгээр) тайлбарлах нийтлэл бичихээр төлөвлөж байна. Тиймээс, шинэ нийтлэлүүдийн талаар мэдээлэлтэй байхын тулд та миний вэбсайтад бүртгүүлж болно.

Хэрэв танд асуулт байвал надтай холбоо барина уу, хэрэв та нийтлэлд ямар нэгэн алдаа анзаарсан бол надад мэдэгдээрэй.

Хичээлийн төлөвлөгөө (5-р хэсэг):

  1. Зөвшөөрлийн маягтын HTML бүтцийг бий болгох
  2. Бид хүлээн авсан өгөгдлийг боловсруулдаг
  3. Бид хэрэглэгчийн мэндчилгээг сайтын толгой хэсэгт харуулдаг

Танд нийтлэл таалагдсан уу?



Сайт дээр шинэ

>

Хамгийн алдартай