Rumah Kedokteran gigi anak Pendaftaran eksekutif php. Sistem registrasi pengguna yang sederhana

Pendaftaran eksekutif php. Sistem registrasi pengguna yang sederhana

Membuat situs berbasis keanggotaan sepertinya merupakan tugas yang menakutkan pada awalnya. Jika Anda pernah ingin melakukan ini sendiri, lalu menyerah begitu saja ketika Anda mulai berpikir bagaimana Anda akan menyusunnya menggunakan keahlian PHP Anda, maka artikel ini cocok untuk Anda. Kami akan memandu Anda melalui setiap aspek pembuatan situs berbasis keanggotaan, dengan area anggota aman yang dilindungi kata sandi.

Keseluruhan proses terdiri dari dua bagian besar: registrasi pengguna dan otentikasi pengguna. Pada bagian pertama, kita akan membahas pembuatan formulir pendaftaran dan penyimpanan data dalam database MySQL. Pada bagian kedua, kita akan membuat formulir login dan menggunakannya untuk mengizinkan pengguna mengakses di area aman.

Unduh kodenya

Anda dapat mengunduh seluruh kode sumber untuk sistem registrasi/login dari tautan di bawah ini:

Konfigurasi & Unggah
File ReadMe berisi instruksi rinci.

Buka sumber\include\membersite_config.php file dalam editor teks dan perbarui konfigurasi. (Login basis data, nama situs web Anda, alamat email Anda, dll).

Unggah seluruh isi direktori. Uji register.php dengan mengirimkan formulir.

Formulir pendaftaran

Untuk membuat akun pengguna, kita perlu mengumpulkan informasi dalam jumlah minimal dari pengguna. Kami membutuhkan namanya, alamat emailnya dan nama pengguna serta kata sandi yang diinginkannya. Tentu saja, kami dapat meminta lebih banyak informasi pada saat ini, namun formulir yang panjang selalu tidak menguntungkan. Jadi mari kita batasi diri kita hanya pada bidang-bidang itu saja.

Berikut formulir pendaftarannya:

Daftar

Jadi, kami memiliki kolom teks untuk nama, email, dan kata sandi. Perhatikan bahwa kami menggunakan untuk kegunaan yang lebih baik.

Validasi formulir

Pada titik ini adalah ide bagus untuk menempatkan beberapa kode validasi formulir, jadi kami memastikan bahwa kami memiliki semua data yang diperlukan untuk membuat akun pengguna. Kita perlu memeriksa apakah nama dan email, serta kata sandi sudah diisi dan apakah email dalam format yang benar.

Menangani penyerahan formulir

Sekarang kita harus menangani data formulir yang dikirimkan.

Berikut urutannya (lihat file fg_membersite.php di sumber yang diunduh):

fungsi RegisterUser() ( if(!isset($_POST["dikirim"])) ( 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); mengembalikan nilai true; )

Pertama, kami memvalidasi pengiriman formulir. Kemudian kami mengumpulkan dan 'membersihkan' data pengiriman formulir (selalu lakukan ini sebelum mengirim email, menyimpan ke database, dll). Pengiriman formulir kemudian disimpan ke tabel database. Kami mengirim email ke pengguna meminta konfirmasi. Kemudian kami memberitahukan kepada admin bahwa pengguna telah terdaftar.

Menyimpan data dalam database

Sekarang kita sudah mengumpulkan semua data, kita perlu menyimpannya ke dalam database.
Inilah cara kami menyimpan pengiriman formulir ke database.

function SaveToDatabase(&$formvars) ( if(!$this->DBLogin()) ( $this->HandleError("Login database gagal!"); return false; ) if(!$this->Ensuretable()) ( return false; ) if(!$this->IsFieldUnique($formvars,"email")) ( $this->HandleError("Email ini sudah terdaftar"); return false; ) if(!$this->IsFieldUnique( $formvars,"nama pengguna")) ( $this->HandleError("Nama Pengguna ini sudah digunakan. Silakan coba nama pengguna lain"); return false; ) if(!$this->InsertIntoDB($formvars)) ( $this- >HandleError("Gagal memasukkan ke Database!"); return false; ) return true; )

Perhatikan bahwa Anda telah mengkonfigurasi detail login Database di file membersite_config.php. Dalam sebagian besar kasus, Anda dapat menggunakan “localhost” untuk host database.
Setelah login, kita pastikan tabel tersebut sudah ada. (Jika tidak, script akan membuat tabel yang diperlukan).
Kemudian kami pastikan bahwa nama pengguna dan emailnya unik. Jika tidak unik, kami mengembalikan kesalahan kepada pengguna.

Struktur tabel database

Ini adalah struktur tabelnya. Fungsi CreateTable() di file fg_membersite.php membuat tabel. Ini kodenya:

function CreateTable() ( $qry = "Buat Tabel $this->tablename (". "id_user INT NOT NULL AUTO_INCREMENT ," "name VARCHAR(128) NOT NULL ," "email VARCHAR(64) NOT NULL ," " "phone_number VARCHAR(16) BUKAN NULL ," "nama pengguna VARCHAR(16) BUKAN NULL ," "kata sandi VARCHAR(32) BUKAN NULL ," "kode konfirmasi VARCHAR(32) ," "KUNCI UTAMA (id_pengguna)." ")"; if( !mysql_query($qry,$this->koneksi)) ( $this->HandleDBError("Kesalahan saat membuat tabel \nquery tadi\n $qry"); return false; ) return true; )

Bidang id_user akan berisi id unik pengguna, dan juga merupakan kunci utama tabel. Perhatikan bahwa kami mengizinkan 32 karakter untuk bidang kata sandi. Kami melakukan ini karena, sebagai langkah keamanan tambahan, kami akan menyimpan kata sandi dalam database yang dienkripsi menggunakan MD5. Harap dicatat bahwa karena MD5 adalah metode enkripsi satu arah, kami tidak akan dapat memulihkan kata sandi jika pengguna lupa.

Memasukkan registrasi ke tabel

Berikut adalah kode yang kita gunakan untuk memasukkan data ke dalam database. Kami akan memiliki semua data kami tersedia di array $formvars.

function InsertIntoDB(&$formvars) ( $confirmcode = $this->MakeConfirmationMd5($formvars["email"]); $insert_query = "masukkan ke dalam ".$this->namatabel."(nama, email, nama pengguna, kata sandi, kode konfirmasi) nilai("" . $this->SanitizeForSQL($formvars["name"]) . "", "" . $this->SanitizeForSQL($formvars["email"]) . "", "" . $ this->SanitizeForSQL($formvars["nama pengguna"]) . "", "" .md5($formvars["password"]) . "", "" . $confirmcode . "")"; if(! mysql_query( $insert_query ,$this->koneksi)) ( $this->HandleDBError("Kesalahan saat memasukkan data ke tabel\nquery:$insert_query"); return false; ) return true; )

Perhatikan bahwa kita menggunakan fungsi PHP md5() untuk mengenkripsi kata sandi sebelum memasukkannya ke dalam database.
Kami juga membuat kode konfirmasi unik dari alamat email pengguna.

Mengirim email

Sekarang kami memiliki pendaftaran di database kami, kami akan mengirimkan email konfirmasi kepada pengguna. Pengguna harus mengklik link di email konfirmasi untuk menyelesaikan proses pendaftaran.

fungsi SendUserConfirmationEmail(&$formvars) ( $mailer = new PHPMailer(); $mailer->CharSet = "utf-8"; $mailer->AddAddress($formvars["email"],$formvars["name"]) ; $mailer->Subject = "Pendaftaran Anda dengan ".$this->sitename; $mailer->From = $this->GetFromAddress(); $confirmcode = urlencode($this->MakeConfirmationMd5($formvars["email" ])); $confirm_url = $this->GetAbsoluteURLFolder()."/confirmreg.php?code=".$confirmcode; $mailer->Body ="Halo ".$formvars["name"]."\r\ n\r\n". "Terima kasih atas pendaftaran Anda dengan ".$this->sitename."\r\n". "Silakan klik tautan di bawah untuk mengonfirmasi pendaftaran Anda.\r\n." "$confirm_url\r \n". "\r\n". "Salam,\r\n". "Webmaster\r\n". $ini->nama situs; if(!$mailer->Kirim()) ( $ini-> HandleError("Gagal mengirimkan email konfirmasi pendaftaran."); return false; ) return true; )

Pembaruan

9 Januari 2012
Fitur Reset Kata Sandi/Ubah Kata Sandi ditambahkan
Kode tersebut sekarang dibagikan di GitHub.

Selamat Datang kembaliNama Lengkap Pengguna(); ?>!

Lisensi


Kode ini dibagikan di bawah lisensi LGPL. Anda dapat dengan bebas menggunakannya di situs komersial atau non-komersial.

Tidak ada postingan terkait.

Komentar pada entri ini ditutup.

Untuk membagi pengunjung situs menjadi kelompok-kelompok tertentu, sebuah sistem kecil harus dipasang di situs pendaftaran di php. Dengan cara ini, Anda secara kondisional membagi pengunjung menjadi dua kelompok pengunjung acak dan menjadi kelompok pengguna yang lebih memiliki hak istimewa kepada siapa Anda memberikan informasi yang lebih berharga.

Dalam kebanyakan kasus, sistem registrasi yang lebih sederhana digunakan, yang ditulis dalam php dalam satu file daftar.php.

Jadi, kita menyimpang sedikit, dan sekarang kita akan melihat lebih dekat file pendaftarannya.

Daftarkan file.php

Untuk memastikan bahwa hal ini tidak menyita banyak waktu Anda, kami akan membuat sistem yang akan mengumpulkan pengguna, menerima informasi kontak minimal dari mereka. Dalam hal ini, kita akan memasukkan semuanya ke dalam database mysql. Untuk kecepatan database tertinggi, kami akan membuat tabel pengguna dalam format MyISAM dan pengkodean utf-8.

Catatan! Semua skrip harus selalu ditulis dalam pengkodean yang sama. Semua file situs dan database MySql harus dalam pengkodean yang sama. Pengkodean yang paling umum adalah UTF-8 dan Windows-1251.

Mengapa Anda perlu menulis semuanya dalam satu pengkodean, kita akan membicarakannya nanti. Untuk saat ini, anggaplah informasi ini sebagai aturan ketat untuk membuat skrip, jika tidak, Anda akan mengalami masalah dengan skrip di masa mendatang. Tentu saja tidak apa-apa, tetapi Anda hanya akan kehilangan banyak waktu untuk mencari kesalahan dalam skrip.

Bagaimana cara kerja skrip itu sendiri?

Kami ingin menyederhanakan segalanya dan mendapatkan hasil yang cepat. Oleh karena itu, kami hanya akan menerima login, email, dan kata sandi dari pengguna. Dan untuk melindungi dari robot spam, kami akan memasang captcha kecil. Jika tidak, beberapa anak laki-laki dari London akan menulis robot parser kecil yang akan mengisi seluruh database dengan pengguna palsu dalam beberapa menit, dan akan bersukacita atas kejeniusan dan impunitasnya.

Ini skripnya sendiri. Semuanya dicatat dalam satu file daftar.php:

! `; // tanda tanya merah $sha=$sh."scripts/pro/"; //jalur ke folder utama $bg=` bgcolor="#E1FFEB"`; // warna latar belakang baris?> Contoh skrip registrasi register.php style.css" />

Dalam hal ini, skrip merujuk pada dirinya sendiri. Dan itu adalah formulir dan pengolah data yang dimasukkan ke dalam formulir. Harap dicatat bahwa file tersebut dikompresi sebagai arsip zip dan berisi file konfigurasi config.php, dump database pengguna, file yang berisi fungsi tambahan function.php, file gaya style.css dan file register.php itu sendiri. Ada juga beberapa file yang bertanggung jawab atas pengoperasian dan pembuatan simbol captcha.

Halo! Sekarang kita akan mencoba menerapkan registrasi paling sederhana di situs menggunakan PHP + MySQL. Untuk melakukan ini, Apache harus diinstal di komputer Anda. Prinsip kerja skrip kami ditunjukkan di bawah ini.

1. Mari kita mulai dengan membuat tabel pengguna di database. Ini akan berisi data pengguna (login dan kata sandi). Ayo buka phpmyadmin (jika Anda membuat database di PC Anda http://localhost/phpmyadmin/). Buat tabel pengguna, itu akan memiliki 3 bidang.

Saya membuatnya di database mysql, Anda bisa membuatnya di database lain. Selanjutnya, atur nilainya seperti pada gambar:

2. Diperlukan koneksi ke tabel ini. Mari kita membuat file bd.php. Isinya:

$db = mysql_connect("server MySQL Anda","login untuk server ini","kata sandi untuk server ini");
mysql_select_db("nama database yang kita sambungkan", $db);
?>

Dalam kasus saya, tampilannya seperti ini:

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

Menyimpan bd.php.
Besar! Kami memiliki tabel di database dan koneksi ke sana. Sekarang Anda dapat mulai membuat halaman di mana pengguna akan meninggalkan datanya.

3. Buat file reg.php dengan isi (semua komentar di dalamnya):



Registrasi


Registrasi


















4. Buat file, yang akan memasukkan data ke dalam database dan menyimpan pengguna. simpan_pengguna.php(komentar di dalam):



{
}
//jika login dan password dimasukkan, maka kami proses sehingga tag dan skrip tidak berfungsi, Anda tidak pernah tahu apa yang mungkin dimasukkan orang


//hapus spasi tambahan
$login = potong($login);
$kata sandi = trim($kata sandi);
// terhubung ke database
// memeriksa keberadaan pengguna dengan login yang sama
$hasil = mysql_query("PILIH id DARI pengguna WHERE login="$login"",$db);
jika (!kosong($barissaya["id"])) (
exit("Maaf, login yang Anda masukkan sudah terdaftar. Silakan masukkan login yang lain.");
}
// jika tidak, simpan datanya
$result2 = mysql_query("MASUKKAN KE pengguna (login,kata sandi) VALUES("$login","$kata sandi")");
// Periksa apakah ada kesalahan
jika ($hasil2=="BENAR")
{
echo "Anda telah berhasil mendaftar! Sekarang Anda dapat masuk ke situsnya. Halaman Beranda";
}
kalau tidak(
echo "Error! Anda belum terdaftar.";
}
?>

5. Sekarang pengguna kami dapat mendaftar! Selanjutnya, Anda perlu membuat “pintu” bagi pengguna yang sudah terdaftar untuk memasuki situs tersebut. indeks.php(komentar di dalam):

// seluruh prosedur bekerja dalam sesi. Di sinilah data pengguna disimpan saat dia berada di situs. Sangat penting untuk meluncurkannya di awal halaman!!!
sesi_mulai();
?>


Halaman beranda


Halaman beranda











Daftar



// Periksa apakah variabel login dan user id kosong
if (kosong($_SESSION["login"]) atau kosong($_SESSION["id"]))
{
// Jika kosong, maka kami tidak menampilkan linknya
echo "Anda login sebagai tamu
Tautan ini hanya tersedia untuk pengguna terdaftar";
}
kalau tidak
{

Dalam berkas indeks.php Kami akan menampilkan tautan yang hanya terbuka untuk pengguna terdaftar. Inilah inti dari skrip ini - untuk membatasi akses ke data apa pun.

6. Masih ada file verifikasi login dan password yang dimasukkan. testreg.php (komentar di dalam):

session_start();// seluruh prosedur bekerja pada sesi. Di sinilah data pengguna disimpan saat dia berada di situs. Sangat penting untuk meluncurkannya di awal halaman!!!
if (isset($_POST["login"])) ( $login = $_POST["login"]; if ($login == "") ( unset($login);) ) //masukkan login yang dimasukkan oleh pengguna ke dalam variabel $login, jika kosong, maka hancurkan variabel tersebut
if (isset($_POST["password"])) ( $password=$_POST["password"]; if ($password =="") ( unset($password);) )
//masukkan kata sandi yang dimasukkan oleh pengguna ke dalam variabel $password, jika kosong maka musnahkan variabel tersebut
if (empty($login) or blank($password)) //jika pengguna belum memasukkan login atau kata sandi, maka kami mengeluarkan kesalahan dan menghentikan skrip
{
exit("Anda belum memasukkan semua informasi, kembali dan isi semua kolom!");
}
//jika login dan password dimasukkan, maka kami proses sehingga tag dan skrip tidak berfungsi, Anda tidak pernah tahu apa yang mungkin dimasukkan orang
$login = garis miring($login);
$login = htmlkarakter khusus($login);
$kata sandi = garis miring($kata sandi);
$kata sandi = htmlkarakter khusus($kata sandi);
//hapus spasi tambahan
$login = potong($login);
$kata sandi = trim($kata sandi);
// terhubung ke database
include("bd.php");// file bd.php harus berada di folder yang sama dengan yang lain, jika tidak maka ubah saja pathnya

$hasil = mysql_query("PILIH * DARI pengguna WHERE login="$login"",$db); //mengambil dari database semua data tentang pengguna dengan login yang dimasukkan
$baris saya = mysql_fetch_array($hasil);
if (kosong($baris saya["kata sandi"]))
{
//jika pengguna dengan login yang dimasukkan tidak ada
}
kalau tidak(
//jika ada, periksa kata sandinya
if ($baris saya["kata sandi"]==$kata sandi) (
//jika kata sandinya cocok, maka kami meluncurkan sesi untuk pengguna! Anda bisa memberi selamat padanya, dia masuk!
$_SESSION["login"]=$baris saya["login"];
$_SESSION["id"]=$myrow["id"];//data ini sangat sering digunakan, sehingga pengguna yang login akan “membawanya”
echo "Anda telah berhasil masuk ke situs! Halaman Beranda";
}
kalau tidak(
//jika kata sandi tidak cocok

Exit("Maaf, login atau kata sandi yang Anda masukkan salah.");
}
}
?>

Oke semuanya sudah berakhir Sekarang! Pelajarannya mungkin membosankan, tapi sangat bermanfaat. Hanya ide pendaftaran yang ditampilkan di sini, lalu Anda dapat memperbaikinya: menambahkan perlindungan, desain, bidang data, memuat avatar, keluar dari akun Anda (untuk melakukan ini, cukup hancurkan variabel dari sesi dengan fungsi tersebut tidak disetel) dan seterusnya. Semoga beruntung!

Saya memeriksa semuanya, berfungsi dengan baik!

Hari ini kita akan melihat eksploitasi kerentanan kritis 1 hari di CMS Joomla yang populer, yang meledak di Internet pada akhir Oktober. Kami akan berbicara tentang kerentanan dengan angka CVE-2016-8869, CVE-2016-8870 Dan CVE-2016-9081. Ketiganya berasal dari satu bagian kode yang mendekam di kedalaman kerangka kerja selama lima tahun, menunggu di sayap, hanya untuk kemudian melepaskan diri dan membawa serta kekacauan, situs yang diretas, dan air mata pengguna Joomla yang tidak bersalah. Hanya pengembang yang paling gagah berani dan berani, yang matanya merah karena cahaya monitor, dan keyboardnya dipenuhi remah roti, yang mampu menantang roh jahat yang mengamuk dan meletakkan kepala mereka di altar perbaikan.

PERINGATAN

Semua informasi disediakan untuk tujuan informasi saja. Baik editor maupun penulis tidak bertanggung jawab atas segala kemungkinan kerugian yang disebabkan oleh materi artikel ini.

Dimana semuanya dimulai

Pada tanggal 6 Oktober 2016, Demis Palma membuat topik di Stack Exchange di mana dia bertanya: mengapa sebenarnya di Joomla versi 3.6 ada dua metode untuk mendaftarkan pengguna dengan nama yang sama register()? Yang pertama ada di pengontrol UsersControllerRegistration dan yang kedua ada di pengontrol UsersControllerUser. Damis ingin tahu apakah metode UsersControllerUser::register() digunakan di suatu tempat, atau apakah itu hanya anakronisme evolusioner yang tersisa dari logika lama. Kekhawatirannya adalah meskipun metode ini tidak digunakan oleh tampilan apa pun, metode ini dapat dipanggil oleh kueri yang dibuat. Yang saya terima tanggapan dari pengembang dengan nama panggilan itoctopus, yang mengkonfirmasi: masalahnya benar-benar ada. Dan mengirimkan laporan ke pengembang Joomla.

Kemudian peristiwa berkembang paling pesat. Pada tanggal 18 Oktober, pengembang Joomla menerima laporan dari Damis, yang pada saat itu telah menyusun PoC yang memungkinkan pendaftaran pengguna. Dia menerbitkan catatan di situsnya, di mana dia berbicara secara umum tentang masalah yang dia temukan dan pemikirannya tentang masalah ini. Pada hari yang sama, versi baru Joomla 3.6.3 dirilis, yang masih berisi kode rentan.

Setelah ini, Davide Tampellini memutar bug tersebut hingga mendaftarkan bukan pengguna sederhana, tetapi administrator. Dan pada tanggal 21 Oktober, sebuah kasus baru masuk ke tim keamanan Joomla. Ini sudah berbicara tentang peningkatan hak istimewa. Pada hari yang sama, muncul pengumuman di situs Joomla bahwa pada hari Selasa, 25 Oktober, versi berikutnya dengan nomor seri 3.6.3 akan dirilis, yang memperbaiki kerentanan kritis pada kernel sistem.

25 Oktober Tim Serangan Keamanan Joomla menemukan masalah terbaru yang disebabkan oleh potongan kode yang ditemukan oleh Damis. Kemudian komit tertanggal 21 Oktober dengan nama yang tidak mencolok Siapkan 3.6.4 Rilis Stabil dimasukkan ke dalam cabang utama repositori resmi Joomla, yang memperbaiki bug yang tidak menguntungkan tersebut.

Setelah pengumuman ini, banyak individu yang tertarik bergabung dengan komunitas pengembang - mereka mulai mempromosikan kerentanan dan menyiapkan eksploitasi.

Pada tanggal 27 Oktober, peneliti Harry Roberts mengunggah eksploitasi siap pakai ke repositori Xiphos Research yang dapat mengunggah file PHP ke server dengan CMS yang rentan.

Detail

Nah, latar belakangnya sudah selesai, mari kita beralih ke bagian yang paling menarik - analisis kerentanan. Saya menginstal Joomla 3.6.3 sebagai versi uji, jadi semua nomor baris akan relevan untuk versi ini. Dan semua jalur ke file yang akan Anda lihat di bawah akan ditunjukkan relatif terhadap root CMS yang diinstal.

Berkat penemuan Damis Palma, kita mengetahui bahwa ada dua metode yang melakukan registrasi pengguna di sistem. Yang pertama digunakan oleh CMS dan terletak di file /components/com_users/controllers/registration.php:108. Yang kedua (yang perlu kita panggil) ada di /components/com_users/controllers/user.php:293. Mari kita lihat lebih dekat.

286: /** 287: * Metode untuk mendaftarkan pengguna. 288: * 289: * @return boolean 290: * 291: * @since 1.6 292: */ 293: fungsi publik register() 294: ( 295: JSession::checkToken("post") atau jexit(JText::_ ("JINVALID_TOKEN")); ... 300: // Ambil data formulir. 301: $data = $this->input->post->get("user", array(), "array"); . .. 315: $return = $model->validate($form, $data); 316: 317: // Periksa kesalahan. 318: if ($return === false) 319: ( ... 345: / / Selesaikan registrasi 346: $return = $model->register($data);

Di sini saya hanya menyisakan baris-baris yang menarik. Versi lengkap dari metode rentan dapat dilihat di repositori Joomla.

Mari kita cari tahu apa yang terjadi selama registrasi pengguna normal: data apa yang dikirim dan bagaimana pemrosesannya. Jika pendaftaran pengguna diaktifkan di pengaturan, formulir dapat ditemukan di http://joomla.local/index.php/component/users/?view=registration.


Permintaan pendaftaran pengguna yang sah terlihat seperti tangkapan layar berikut.


Komponen com_users bertanggung jawab untuk bekerja dengan pengguna. Perhatikan parameter tugas dalam permintaan. Ini memiliki format $controller.$method . Mari kita lihat struktur filenya.

Nama skrip dalam folder pengontrol sesuai dengan nama pengontrol yang dipanggil. Karena permintaan kita sekarang berisi $controller = "registration" , file tersebut akan dipanggil pendaftaran.php dan metode register()-nya.

Perhatian, pertanyaan: bagaimana cara mentransfer proses pendaftaran ke tempat yang rentan dalam kode? Anda mungkin sudah dapat menebaknya. Nama metode yang rentan dan metode yang sebenarnya sama (daftar), jadi kita hanya perlu mengubah nama pengontrol yang dipanggil. Di manakah lokasi pengontrol rentan kita? Itu benar, di dalam file pengguna.php. Ternyata $controller = "pengguna" . Dengan menggabungkan semuanya, kita mendapatkan task = user.register . Sekarang permintaan pendaftaran diproses sesuai metode yang kita butuhkan.


Hal kedua yang perlu kita lakukan adalah mengirimkan data dalam format yang benar. Semuanya sederhana di sini. Register yang sah() mengharapkan dari kami sebuah array bernama jform , di mana kami meneruskan data pendaftaran - nama, login, kata sandi, email (lihat tangkapan layar dengan permintaan).

  • /components/com_users/controllers/registration.php: 124: // Dapatkan data pengguna. 125: $requestData = $ini->input->post->get("jform", array(), "array");

Klien kami mendapatkan data ini dari array yang disebut pengguna.

  • /components/com_users/controllers/user.php: 301: // Dapatkan data formulir. 302: $data = $ini->input->post->get("pengguna", array(), "array");

Oleh karena itu, kami mengubah nama semua parameter dalam permintaan dari jfrom menjadi user .

Langkah ketiga kami adalah menemukan token CSRF yang valid, karena tanpanya tidak akan ada pendaftaran.

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

Sepertinya hash MD5, dan Anda dapat mengambilnya, misalnya, dari formulir otorisasi di situs /index.php/component/users/?view=login.


Sekarang Anda dapat membuat pengguna menggunakan metode yang diinginkan. Jika semuanya berhasil, selamat - Anda baru saja mengeksploitasi kerentanan CVE-2016-8870"Pemeriksaan izin tidak ada untuk mendaftarkan pengguna baru."

Ini adalah tampilan metode register() yang “berfungsi” dari pengontrol UsersControllerRegistration:

  • /components/com_users/controllers/registration.php: 113: // Jika pendaftaran dinonaktifkan - Redirect ke halaman login. 114: if (JComponentHelper::getParams("com_users")->get("allowUserRegistration") == 0) 115: ( 116: $this->setRedirect(JRoute::_("index.php?option=com_users&view= login", salah)); 117: 118: kembali salah; 119: )

Dan rentan:

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

Ya, tidak mungkin.

Untuk memahami masalah kedua yang jauh lebih serius, mari kirimkan permintaan yang kita buat dan lihat bagaimana permintaan tersebut dijalankan di berbagai bagian kode. Berikut adalah bagian yang bertanggung jawab untuk memvalidasi data yang dikirimkan pengguna dalam metode pekerja:

Kelanjutan hanya tersedia untuk anggota

Opsi 1. Bergabunglah dengan komunitas “situs” untuk membaca semua materi di situs

Keanggotaan dalam komunitas dalam periode yang ditentukan akan memberi Anda akses ke SEMUA materi Peretas, meningkatkan diskon kumulatif pribadi Anda dan memungkinkan Anda mengumpulkan peringkat Skor Xakep profesional!

Di artikel ini Anda akan belajar cara membuat formulir pendaftaran dan otorisasi menggunakan HTML, JavaScript, PHP dan MySql. Formulir seperti itu digunakan di hampir setiap situs web, apa pun jenisnya. Mereka dibuat untuk forum, toko online, jejaring sosial (seperti Facebook, Twitter, Odnoklassniki) dan banyak jenis situs lainnya.

Jika Anda memiliki situs web di komputer lokal Anda, saya harap Anda sudah memilikinya server lokal diinstal dan dijalankan. Tanpanya, tidak ada yang akan berhasil.

Membuat tabel di Database

Untuk mengimplementasikan registrasi pengguna, pertama-tama kita membutuhkan Database. Jika Anda sudah memilikinya, maka bagus, jika tidak, Anda perlu membuatnya. Dalam artikel tersebut, saya menjelaskan secara rinci bagaimana melakukan ini.

Jadi, kita memiliki Database (disingkat DB), sekarang kita perlu membuat tabel pengguna di mana kami akan menambahkan pengguna terdaftar kami.

Cara membuat tabel di database juga sudah saya jelaskan di artikel. Sebelum membuat tabel, kita perlu menentukan field apa yang akan dikandungnya. Bidang-bidang ini akan sesuai dengan bidang-bidang dari formulir pendaftaran.

Jadi, kami berpikir, membayangkan bidang apa yang akan dimiliki formulir kami dan membuat tabel pengguna dengan bidang ini:

  • pengenal- Pengenal. Bidang pengenal Setiap tabel di database harus memilikinya.
  • nama depan- Untuk menyimpan nama.
  • nama keluarga- Untuk melestarikan nama keluarga.
  • surel- Untuk menyimpan alamat pos. Kami akan menggunakan email sebagai login, jadi field ini harus unik yaitu memiliki indeks UNIK.
  • email_status- Bidang untuk menunjukkan apakah surat dikonfirmasi atau tidak. Jika email dikonfirmasi, maka akan bernilai 1, jika tidak maka nilainya 0.
  • kata sandi- Untuk menyimpan kata sandi.


Jika Anda ingin formulir pendaftaran Anda memiliki beberapa kolom lain, Anda juga dapat menambahkannya di sini.

Itu saja, meja kita pengguna siap. Mari kita lanjutkan ke tahap berikutnya.

Koneksi Basis Data

Kami telah membuat database, sekarang kami perlu menghubungkannya. Kami akan terhubung menggunakan ekstensi PHP MySQLi.

Di folder situs kami, buat file dengan nama dbconnect.php, dan tulis skrip berikut di dalamnya:

Kesalahan koneksi DB. Deskripsi kesalahan: ".mysqli_connect_error()."

"; exit(); ) // Atur pengkodean koneksi $mysqli->set_charset("utf8"); // Untuk kenyamanan, tambahkan variabel di sini yang akan berisi nama situs kita $address_site = "http://testsite .lokal" ; ?>

File ini dbconnect.php perlu dihubungkan ke penangan formulir.

Perhatikan variabelnya $alamat_situs, di sini saya menunjukkan nama situs pengujian yang akan saya kerjakan. Harap tunjukkan nama situs Anda yang sesuai.

Struktur situs

Sekarang mari kita lihat struktur HTML situs kita.

Kami akan memindahkan header dan footer situs ke dalam file terpisah, header.php Dan footer.php. Kami akan menyertakannya di semua halaman. Yaitu pada halaman utama (file indeks.php), ke halaman dengan formulir pendaftaran (file form_register.php) dan ke halaman dengan formulir otorisasi (file form_auth.php).

Blokir dengan tautan kami, Registrasi Dan otorisasi, tambahkan ke header situs agar ditampilkan di semua halaman. Satu tautan akan dimasukkan di halaman formulir pendaftaran(mengajukan form_register.php) dan yang lainnya ke halaman dengan formulir otorisasi(mengajukan form_auth.php).

Isi file header.php:

Nama situs kami

Hasilnya, halaman utama kami terlihat seperti ini:


Tentu saja, situs Anda mungkin memiliki struktur yang sangat berbeda, tetapi ini tidak penting bagi kami saat ini. Yang penting ada link (tombol) untuk registrasi dan otorisasi.

Sekarang mari kita beralih ke formulir pendaftaran. Seperti yang sudah Anda pahami, kami menyimpannya di file form_register.php.

Masuk ke Database (di phpMyAdmin), buka struktur tabel pengguna dan lihat bidang apa yang kita perlukan. Artinya kita memerlukan kolom untuk memasukkan nama depan dan belakang, kolom untuk memasukkan alamat pos (Email) dan kolom untuk memasukkan kata sandi. Dan untuk alasan keamanan, kami akan menambahkan kolom untuk memasukkan captcha.

Di server, akibat pemrosesan formulir pendaftaran, berbagai kesalahan dapat terjadi sehingga pengguna tidak dapat mendaftar. Oleh karena itu, agar pengguna memahami mengapa pendaftaran gagal, pesan tentang kesalahan ini perlu ditampilkan.

Sebelum menampilkan formulir, tambahkan blok untuk menampilkan pesan kesalahan dari sesi tersebut.

Dan satu hal lagi, jika pengguna sudah diotorisasi, dan karena penasaran ia langsung menuju ke halaman pendaftaran dengan menulis di bilah alamat browser alamat_situs/form_register.php, maka dalam hal ini, alih-alih formulir pendaftaran, kami akan menampilkan header yang menyatakan bahwa dia sudah terdaftar.

Secara umum kode file form_register.php kami mendapatkan ini:

Anda sudah terdaftar

Di browser, halaman formulir pendaftaran terlihat seperti ini:


Dengan menggunakan atribut yang diperlukan, kami telah mewajibkan semua bidang.

Perhatikan kode formulir pendaftaran dimana captcha ditampilkan:


Kami menentukan jalur ke file dalam nilai atribut src untuk gambar captcha.php, yang menghasilkan captcha ini.

Mari kita lihat kode filenya captcha.php:

Kode ini dikomentari dengan baik, jadi saya akan fokus pada satu hal saja.

Di dalam suatu fungsi gambarTtfTeks(), jalur ke font ditentukan verdana.ttf. Jadi agar captcha dapat berfungsi dengan benar, kita harus membuat folder font, dan letakkan file font di sana verdana.ttf. Anda dapat menemukannya dan mendownloadnya dari Internet, atau mengambilnya dari arsip dengan bahan artikel ini.

Kita sudah selesai dengan struktur HTML, saatnya melanjutkan.

Memeriksa validitas email menggunakan jQuery

Formulir apa pun perlu memeriksa keabsahan data yang dimasukkan, baik di sisi klien (menggunakan JavaScript, jQuery) maupun di sisi server.

Kita harus memberikan perhatian khusus pada bidang Email. Sangat penting bahwa alamat pos yang dimasukkan valid.

Untuk kolom masukan ini, kami menetapkan jenis email (type = "email"), ini sedikit memperingatkan kami terhadap format yang salah. Namun ini belum cukup, karena melalui pemeriksa kode yang disediakan browser, kita dapat dengan mudah mengubah nilai atribut jenis Dengan surel pada teks, dan hanya itu, cek kami tidak lagi valid.


Dan dalam hal ini, kita harus melakukan pemeriksaan yang lebih andal. Untuk melakukan ini, kita akan menggunakan perpustakaan jQuery dari JavaScript.

Untuk menghubungkan perpustakaan jQuery, di file header.php antar tag , sebelum tag penutup , tambahkan baris ini:

Segera setelah baris ini, kami akan menambahkan kode validasi email. Disini kita akan menambahkan kode untuk mengecek panjang password yang dimasukkan. Panjangnya minimal harus 6 karakter.

Dengan menggunakan skrip ini, kami memeriksa validitas alamat email yang dimasukkan. Jika pengguna memasukkan Email yang salah, kami menampilkan pesan kesalahan tentang hal ini dan menonaktifkan tombol kirim formulir. Jika semuanya baik-baik saja, maka kami menghilangkan kesalahan tersebut dan mengaktifkan tombol kirim formulir.

Jadi, kita selesai dengan validasi formulir di sisi klien. Sekarang kita dapat mengirimkannya ke server, di mana kita juga akan melakukan beberapa pemeriksaan dan menambahkan data ke database.

Pendaftaran pengguna

Kami mengirimkan formulir ke file untuk diproses daftar.php, melalui metode POST. Nama file pengendali ini ditentukan dalam nilai atribut tindakan. Dan metode pengiriman ditentukan dalam nilai atribut metode.

Buka berkas ini daftar.php dan hal pertama yang perlu kita lakukan adalah menulis fungsi peluncuran sesi dan menghubungkan file yang kita buat sebelumnya dbconnect.php(Dalam file ini kami membuat koneksi ke database). Dan juga, mari kita segera mendeklarasikan selnya pesan_kesalahan Dan pesan_sukses dalam array sesi global. DI DALAM pesan_kesalahan kami akan mencatat semua pesan kesalahan yang terjadi selama pemrosesan formulir, dan masuk sukses_pesan, kami akan merekam pesan-pesan gembira.

Sebelum kita melanjutkan, kita harus memeriksanya apakah formulir sudah diserahkan?. Seorang penyerang dapat melihat nilai atribut tindakan dari formulir, dan cari tahu file mana yang memproses formulir ini. Dan dia mungkin punya ide untuk langsung membuka file ini dengan mengetikkan alamat berikut di bilah alamat browser: http://site_address/register.php

Jadi kita perlu memeriksa sel dalam array POST global yang namanya cocok dengan nama tombol "Daftar" dari formulir. Dengan cara ini kita memeriksa apakah tombol "Daftar" sudah diklik atau belum.

Jika penyerang mencoba membuka langsung file ini, mereka akan menerima pesan kesalahan. Izinkan saya mengingatkan Anda bahwa variabel $address_site berisi nama situs dan dideklarasikan dalam file dbconnect.php.

Kesalahan! halaman Utama.

"); } ?>

Nilai captcha dalam sesi ditambahkan saat dibuat, di file captcha.php. Sebagai pengingat, saya akan menunjukkan lagi potongan kode dari file ini captcha.php, tempat nilai captcha ditambahkan ke sesi:

Sekarang mari kita lanjutkan ke verifikasi itu sendiri. Dalam berkas daftar.php, di dalam blok if, tempat kami memeriksa apakah tombol "Daftar" telah diklik, atau lebih tepatnya di mana komentar " ditunjukkan" // (1) Spasi untuk potongan kode berikutnya"kami menulis:

//Periksa captcha yang diterima //Pangkas spasi dari awal dan akhir baris $captcha = trim($_POST["captcha"]); if(isset($_POST["captcha"]) && !empty($captcha))( //Bandingkan nilai yang diterima dengan nilai dari sesi. if(($_SESSION["rand"] != $captcha) && ($_SESSION ["rand"] != ""))( // Jika captcha salah, maka kita kembalikan pengguna ke halaman pendaftaran, dan di sana kita akan menampilkan pesan kesalahan kepadanya bahwa dia memasukkan captcha yang salah .$pesan_kesalahan = "

Kesalahan! Anda salah memasukkan captcha

"; // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] = $error_message; // Kembalikan pengguna ke halaman pendaftaran header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: " .$address_site ."/form_register.php"); //Hentikan skrip exit(); ) // (2) Tempatkan potongan kode berikutnya )else( //Jika captcha tidak dilewati atau kosong, exit ("

Kesalahan! Tidak ada kode verifikasi, yaitu kode captcha. Anda bisa pergi ke halaman utama.

"); }

Selanjutnya, kita perlu memproses data yang diterima dari array POST. Pertama-tama, kita perlu memeriksa isi array POST global, yaitu apakah ada sel di sana yang namanya sesuai dengan nama kolom input dari formulir kita.

Jika sel tersebut ada, maka kami memotong spasi dari awal dan akhir baris dari sel ini, jika tidak, kami mengarahkan pengguna kembali ke halaman dengan formulir pendaftaran.

Selanjutnya, setelah kita memangkas spasi, kita menambahkan baris ke variabel dan memeriksa variabel ini apakah ada yang kosong, jika tidak kosong, maka kita lanjutkan, jika tidak kita arahkan pengguna kembali ke halaman dengan formulir pendaftaran.

Rekatkan kode ini ke lokasi yang ditentukan" // (2) Spasi untuk potongan kode selanjutnya".

/* Periksa apakah ada data yang dikirim dari formulir dalam array global $_POST dan gabungkan data yang dikirimkan dalam variabel reguler.*/ if(isset($_POST["first_name"]))( //Pangkas spasi dari awal dan akhir string $first_name = trim($_POST["first_name"]); //Periksa kekosongan variabel if(!empty($first_name))( // Demi keamanan, ubah karakter khusus menjadi entitas HTML $first_name = htmlspecialchars($first_name, ENT_QUOTES) ; )else( // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] .= "

Masukkan nama Anda

Bidang nama tidak ada

"; //Kembalikan pengguna ke halaman pendaftaran header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip exit(); ) if( isset($_POST["last_name"]))( //Pangkas spasi dari awal dan akhir baris $last_name = trim($_POST["last_name"]); if(!empty($last_name)) ( // Demi keamanan, ubah karakter khusus menjadi entitas HTML $last_name = htmlspecialchars($last_name, ENT_QUOTES); )else( // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] .= "

Silakan masukkan nama belakang Anda

"; //Kembalikan pengguna ke halaman pendaftaran header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip exit(); ) )else ( // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] .= "

Bidang nama belakang tidak ada

"; //Kembalikan pengguna ke halaman pendaftaran header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip exit(); ) if( isset($_POST["email"]))( //Memangkas spasi dari awal dan akhir baris $email = trim($_POST["email"]); if(!empty($email)) ( $email = htmlspecialchars ($email, ENT_QUOTES); // (3) Lokasi kode untuk memeriksa format alamat email dan keunikannya )else( // Menyimpan pesan kesalahan ke sesi. $_SESSION["error_messages"] .= "

Masukkan email Anda

"; //Kembalikan pengguna ke halaman pendaftaran header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip exit(); ) )else ( // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] .= "

"; //Kembalikan pengguna ke halaman pendaftaran header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip exit(); ) if( isset($_POST["password"]))( //Memangkas spasi dari awal dan akhir string $password = trim($_POST["password"]); if(!empty($password)) ( $password = htmlspecialchars ($password, ENT_QUOTES); //Enkripsi kata sandi $password = md5($password."top_secret"); )else( // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] .= "

Masukkan kata sandi Anda

"; //Kembalikan pengguna ke halaman pendaftaran header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip exit(); ) )else ( // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] .= "

"; //Kembalikan pengguna ke halaman pendaftaran header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip exit(); ) // (4) Tempat kode untuk menambahkan pengguna ke database

Yang paling penting adalah bidangnya surel. Kita harus memeriksa format alamat pos yang diterima dan keunikannya di database. Artinya, apakah ada pengguna dengan alamat email yang sama yang sudah terdaftar?

Di lokasi yang ditentukan" // (3) Kode lokasi untuk mengecek format alamat pos dan keunikannya"tambahkan kode berikut:

//Periksa format alamat email yang diterima menggunakan ekspresi reguler $reg_email = "/^**@(+(*+)*\.)++/i"; //Jika format alamat email yang diterima tidak cocok dengan ekspresi reguler if(!preg_match($reg_email, $email))( // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] .= "

Anda memasukkan email yang salah

"; //Kembalikan pengguna ke halaman pendaftaran header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip exit(); ) // Kami memeriksa apakah alamat tersebut sudah ada di database. $result_query = $mysqli->query("SELECT `email` FROM `users` WHERE `email`="".$email."""); / /Jika jumlah yang diterima tepat satu baris, berarti pengguna dengan alamat email ini sudah terdaftar if($result_query->num_rows == 1)( //Jika hasil yang diperoleh tidak salah if(($row = $result_query->fetch_assoc()) != false) ( // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] .= "

Pengguna dengan alamat email ini sudah terdaftar

"; //Kembalikan pengguna ke halaman pendaftaran header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_register.php"); )else( // Simpan pesan kesalahan ke sesi .$_SESSION["error_messages"] .= "

Kesalahan dalam kueri basis data

"; //Kembalikan pengguna ke halaman pendaftaran header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_register.php"); ) /* menutup pilihan */ $ result_query-> close(); //Hentikan skrip exit(); ) /* menutup pilihan */ $result_query->close();

Jadi, kita sudah selesai dengan semua pemeriksaan, saatnya menambahkan pengguna ke database. Di lokasi yang ditentukan" // (4) Tempat kode untuk menambahkan pengguna ke database"tambahkan kode berikut:

//Permintaan untuk menambahkan pengguna ke database $result_query_insert = $mysqli->query("INSERT INTO `users` (nama_depan, nama_belakang, email, kata sandi) VALUES ("".$nama_pertama."", "".$nama_akhir ." ", "".$email.", "".$kata sandi."")"); if(!$result_query_insert)( // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] .= "

Kesalahan dalam permintaan untuk menambahkan pengguna ke database

"; //Kembalikan pengguna ke halaman pendaftaran header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip exit(); )else( $_SESSION["pesan_sukses"] = "

Pendaftaran berhasil diselesaikan!!!
Sekarang Anda dapat login menggunakan nama pengguna dan kata sandi Anda.

"; //Kirim pengguna ke halaman otorisasi header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_auth.php"); ) /* Menyelesaikan permintaan */ $ result_query_insert-> close(); //Tutup koneksi ke database $mysqli->close();

Jika terjadi kesalahan dalam permintaan untuk menambahkan pengguna ke database, kami menambahkan pesan tentang kesalahan ini ke sesi dan mengembalikan pengguna ke halaman pendaftaran.

Sebaliknya, jika semuanya berjalan baik, kami juga menambahkan pesan ke sesi tersebut, namun kali ini lebih menyenangkan yaitu kami memberi tahu pengguna bahwa pendaftaran berhasil. Dan kami mengarahkannya ke halaman dengan formulir otorisasi.

Script untuk memeriksa format alamat email dan panjang kata sandi ada di file header.php, jadi ini juga akan berlaku pada kolom dari formulir ini.

Sesi juga dimulai di file header.php, jadi di file form_auth.php Tidak perlu memulai sesi, karena kita akan mendapatkan error.


Seperti yang sudah saya katakan, skrip untuk memeriksa format alamat email dan panjang kata sandi juga berfungsi di sini. Oleh karena itu, jika pengguna salah memasukkan alamat email atau kata sandi pendek, ia akan langsung menerima pesan kesalahan. Sebuah tombol untuk masuk akan menjadi tidak aktif.

Setelah memperbaiki kesalahan, tombol untuk masuk menjadi aktif, dan pengguna akan dapat mengirimkan formulir ke server, tempat formulir tersebut akan diproses.

Otorisasi pengguna

Untuk mengatribusikan nilai tindakan cacat otorisasi memiliki file yang ditentukan auth.php, ini berarti formulir akan diproses di file ini.

Jadi, buka file tersebut auth.php dan menulis kode untuk memproses formulir otorisasi. Hal pertama yang perlu Anda lakukan adalah memulai sesi dan menghubungkan file dbconnect.php untuk terhubung ke database.

//Deklarasikan sel untuk menambahkan kesalahan yang mungkin terjadi saat memproses formulir. $_SESSION["pesan_kesalahan"] = ""; //Deklarasikan sel untuk menambahkan pesan yang berhasil $_SESSION["success_messages"] = "";

/* Periksa apakah formulir telah dikirimkan, yaitu apakah tombol Login telah diklik. Jika ya maka kita lanjutkan, jika tidak maka kita akan menampilkan pesan error kepada pengguna yang menandakan bahwa dia mengakses halaman ini secara langsung. */ if(isset($_POST["btn_submit_auth"]) && !empty($_POST["btn_submit_auth"]))( //(1) Spasi untuk potongan kode berikutnya )else( exit("

Kesalahan! Anda telah mengakses halaman ini secara langsung, jadi tidak ada data untuk diproses. Anda bisa pergi ke halaman utama.

"); }

//Periksa captcha yang diterima if(isset($_POST["captcha"]))( //Pangkas spasi dari awal dan akhir baris $captcha = trim($_POST["captcha"]); if(! kosong($captcha ))( //Bandingkan nilai yang diterima dengan nilai dari sesi. if(($_SESSION["rand"] != $captcha) && ($_SESSION["rand"] != "")) ( // Jika captcha salah , maka kita kembalikan pengguna ke halaman otorisasi, dan di sana kita akan menampilkan pesan kesalahan kepadanya bahwa dia memasukkan captcha yang salah. $error_message = "

Kesalahan! Anda salah memasukkan captcha

"; // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] = $error_message; // Kembalikan pengguna ke halaman otorisasi header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: " .$address_site ."/form_auth.php"); //Hentikan skrip exit(); ) )else( $error_message = "

Kesalahan! Bidang entri captcha wajib diisi.

"; // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] = $error_message; // Kembalikan pengguna ke halaman otorisasi header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: " .$address_site ."/form_auth.php"); //Hentikan skrip exit(); ) //(2) Tempat pemrosesan alamat email //(3) Tempat pemrosesan kata sandi //(4) Tempat pemrosesan membuat query ke database )else ( //Jika captcha tidak diteruskan exit("

Kesalahan! Tidak ada kode verifikasi, yaitu kode captcha. Anda bisa pergi ke halaman utama.

"); }

Jika pengguna memasukkan kode verifikasi dengan benar, maka kami melanjutkan, jika tidak, kami mengembalikannya ke halaman otorisasi.

Memeriksa alamat surat

//Memangkas spasi dari awal dan akhir baris $email = trim($_POST["email"]); if(isset($_POST["email"]))( if(!empty($email))( $email = htmlspecialchars($email, ENT_QUOTES); //Periksa format alamat email yang diterima menggunakan ekspresi reguler $ reg_email = " /^**@(+(*+)*\.)++/i"; //Jika format alamat email yang diterima tidak cocok dengan ekspresi reguler if(!preg_match($reg_email, $email ))( // Simpan ke pesan kesalahan sesi. $_SESSION["error_messages"] .= "

Anda memasukkan email yang salah

"; //Kembalikan pengguna ke halaman otorisasi header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_auth.php"); //Hentikan skrip exit(); ) )else ( // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] .= "

Kolom untuk memasukkan alamat pos (email) tidak boleh kosong.

"; //Kembalikan pengguna ke halaman pendaftaran header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip exit(); ) )else ( // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] .= "

Bidang masukan email tidak ada

"; //Kembalikan pengguna ke halaman otorisasi header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_auth.php"); //Hentikan skrip exit(); ) // (3) Area pemrosesan kata sandi

Jika pengguna memasukkan alamat email dalam format yang salah atau nilai kolom alamat email kosong, maka kami mengembalikannya ke halaman otorisasi tempat kami menampilkan pesan tentang hal ini.

Verifikasi kata sandi

Bidang berikutnya yang diproses adalah bidang kata sandi. Ke tempat yang ditentukan" //(3) Tempat pemrosesan kata sandi", kami menulis:

If(isset($_POST["password"]))( //Memotong spasi dari awal dan akhir string $password = trim($_POST["password"]); if(!empty($password))( $password = htmlspecialchars($password, ENT_QUOTES); //Enkripsi kata sandi $password = md5($password."top_secret"); )else( //Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] . = "

Masukkan kata sandi Anda

"; //Kembalikan pengguna ke halaman pendaftaran header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_auth.php"); //Hentikan skrip exit(); ) )else ( // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] .= "

Bidang kata sandi tidak ada

"; //Kembalikan pengguna ke halaman pendaftaran header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_auth.php"); //Hentikan skrip exit(); )

Di sini kami menggunakan fungsi md5() untuk mengenkripsi kata sandi yang diterima, karena kata sandi kami dalam bentuk terenkripsi di database. Kata rahasia tambahan dalam enkripsi, dalam kasus kami " sangat rahasia" harus yang digunakan saat mendaftarkan pengguna.

Sekarang Anda perlu membuat kueri ke database untuk memilih pengguna yang alamat emailnya sama dengan alamat email yang diterima dan kata sandinya sama dengan kata sandi yang diterima.

//Query dalam database berdasarkan pilihan pengguna. $result_query_select = $mysqli->query("PILIH * DARI `pengguna` WHERE email = "".$email."" DAN kata sandi = "".$kata sandi."""); if(!$result_query_select)( // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] .= "

Kesalahan kueri saat memilih pengguna dari database

"; //Kembalikan pengguna ke halaman pendaftaran header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_auth.php"); //Hentikan skrip exit(); )else( //Periksa apakah tidak ada pengguna dengan data seperti itu di database, lalu tampilkan pesan kesalahan if($result_query_select->num_rows == 1)( // Jika data yang dimasukkan cocok dengan data dari database, simpan login dan kata sandi ke array sesi. $_SESSION["email"] = $email; $_SESSION["password"] = $password; //Kembalikan pengguna ke header halaman utama("HTTP/1.1 301 Dipindahkan Secara Permanen" ); header("Lokasi: ".$address_site ."/index.php"); )else( // Simpan pesan kesalahan ke sesi. $_SESSION["error_messages"] .= "

Login dan/atau kata sandi salah

"; //Kembalikan pengguna ke halaman otorisasi header("HTTP/1.1 301 Dipindahkan Secara Permanen"); header("Lokasi: ".$address_site."/form_auth.php"); //Hentikan skrip exit(); ) )

Keluar dari situs

Dan hal terakhir yang kami terapkan adalah prosedur untuk meninggalkan lokasi. Saat ini, di header kami menampilkan link ke halaman otorisasi dan halaman pendaftaran.

Di header situs (file header.php), menggunakan sesi ini kami memeriksa apakah pengguna sudah diotorisasi. Jika tidak, maka kami menampilkan link pendaftaran dan otorisasi, sebaliknya (jika dia diotorisasi), maka alih-alih link registrasi dan otorisasi kami menampilkan link tersebut KELUAR.

Sepotong kode yang dimodifikasi dari file header.php:

Registrasi

KELUAR

Saat Anda mengeklik tautan keluar dari situs, kita dibawa ke sebuah file logout.php, di mana kita cukup menghancurkan sel dengan alamat email dan kata sandi dari sesi tersebut. Setelah ini, kami mengembalikan pengguna ke halaman tempat tautan diklik KELUAR.

Kode berkas logout.php:

Itu saja. Sekarang Anda tahu caranya melaksanakan dan memproses formulir pendaftaran dan otorisasi pengguna di situs web Anda. Formulir ini ditemukan di hampir setiap situs web, jadi setiap programmer harus mengetahui cara membuatnya.

Kita juga belajar cara memvalidasi data input, baik di sisi client (di browser, menggunakan JavaScript, jQuery) maupun di sisi server (menggunakan PHP). Kami juga belajar menerapkan prosedur untuk meninggalkan lokasi.

Semua skrip telah diuji dan berfungsi. Anda dapat mengunduh arsip dengan file situs kecil ini dari tautan ini.

Kedepannya saya akan menulis artikel yang akan saya uraikan. Dan saya juga berencana untuk menulis artikel yang akan saya jelaskan (tanpa memuat ulang halaman). Jadi, agar tetap mendapat informasi tentang rilis artikel baru, Anda dapat berlangganan situs web saya.

Jika Anda memiliki pertanyaan, silakan hubungi saya, dan jika Anda melihat ada kesalahan dalam artikel, beri tahu saya.

Rencana Pembelajaran (Bagian 5):

  1. Membuat struktur HTML untuk formulir otorisasi
  2. Kami memproses data yang diterima
  3. Kami menampilkan salam pengguna di header situs

Apakah Anda menyukai artikelnya?



Baru di situs

>

Paling populer