Harap dicatat bahwa proyek ini tidak lagi dikelola secara aktif.
Proyek ini dimulai sebagai tugas sekolah sederhana untuk beberapa kursus PHP yang saya ikuti. Kemudian saya membutuhkan sistem seperti ini untuk beberapa situs web yang saya buat dan memutuskan untuk mulai mengembangkannya. Peringatan: Proyek ini/akan sangat berpendirian, artinya saya hanya akan menambahkan fitur-fitur yang menurut saya berguna atau cukup menarik untuk dikembangkan.
password_hash() PHP untuk meng-hash dan memberi garam pada kata sandi. Nama pengguna disimpan sebagai teks biasa.PASSWORD_DEFAULT yang pada saat penulisan menggunakan BCRYPT.AKA 'Kenapa filenya banyak sekali?'
Panel admin akan ada di sini. Mirip dengan banyak aplikasi web lainnya (seperti WordPress), panel admin dapat diakses dengan mudah dengan mengetik [host]/admin .
Folder ini berisi dua file yang digunakan untuk mengatur beberapa opsi konfigurasi. Info lebih lanjut di bawah.
Hanya beberapa barang CSS untuk UI.
Pemasang otomatis berada di sini.
Folder ini berisi semua file .js yang diperlukan agar antarmuka pengguna dapat berfungsi.
Folder ini berisi tulang punggung sistem. Ini memiliki file .php untuk menghubungkan ke database, login masuk dan keluar, mendaftar/membuat akun baru dan memodifikasi akun yang ada. Ada juga scripts.js yang memiliki beberapa kelebihan JavaScript umum untuk antarmuka pengguna. Anda perlu memasukkan info database Anda ke credential.php, periksa bagian pengaturan di bawah untuk mendapatkan bantuan.
Anda harus membaca ini sebelum menggunakan ini. Itu hanya lisensi MIT biasa.
berkas ini.
Ini adalah halaman manajemen akun. Pengguna dapat mengubah nama pengguna dan kata sandinya di sini.
File ini di sini hanya untuk demo. Pengguna hanya dapat mengakses halaman ini jika mereka login. Jika tidak, mereka akan diarahkan ke halaman login.
Pendapat saya tentang membuat formulir login sederhana dengan Bootstrap. Jangan ragu untuk memodifikasinya agar sesuai dengan kebutuhan Anda.
Pendapat saya tentang membuat formulir pendaftaran sederhana dengan Bootstrap. Jangan ragu untuk memodifikasinya agar sesuai dengan kebutuhan Anda.
Ini digunakan oleh penginstal otomatis untuk menghapus dirinya sendiri setelah instalasi selesai.
Ini adalah daftar kata-kata bahasa Inggris yang paling umum. Ini digunakan oleh pemberi saran nama pengguna. Anda dapat mengganti daftar tersebut dengan file .txt Anda sendiri. Setiap kata dalam daftar harus diikuti dengan jeda baris.
Harap dicatat bahwa opsi konfigurasi dapat berubah. Sering-seringlah memeriksa kembali.
Jika Anda memeriksa folder /config, Anda akan melihat ada dua file berbeda di sana. Apa yang menyebabkannya? File konfigurasi utama adalah config.php . Ini mencakup pengaturan yang diterapkan di tingkat server. Anda sebaiknya mengedit file ini.
Jika Anda juga menggunakan antarmuka pengguna front-end yang saya sediakan, maka Anda juga dapat/harus mengedit config.js Di sana Anda dapat mengatur tampilan untuk pengguna rata-rata. Harap diingat bahwa pengaturan ini hanya berlaku di sisi klien dan tidak diterapkan dengan cara apa pun sehingga dapat diedit oleh pengguna.
| Nama opsi | Keterangan | Nilai bawaan | Nilai-nilai yang didukung |
|---|---|---|---|
| $disableUserSelfRegistration | Cegah pengguna mendaftar | PALSU | Boolean |
| $nama penggunaMinLength | Nama pengguna terpendek yang diizinkan | 3 | 1 -> |
| $namapenggunaMaxLength | Nama pengguna terpanjang yang diizinkan | 30 | 1 -> |
| $passwordMinLength | Panjang minimum kata sandi | 8 | 1 -> |
| $namapenggunaRegExp | Semua nama pengguna harus cocok dengan ekspresi reguler ini | regExp apa pun | |
| $kata sandiRegExp | Semua kata sandi harus cocok dengan ekspresi reguler ini | regExp apa pun | |
| $tingkatAccessAccountAccountbaru | Berguna untuk membuat akun admin pertama Anda | "pengguna" | "pengguna", "admin" |
| $debugMode | Memungkinkan Anda menonaktifkan koneksi dabase (hanya untuk debug) | "TIDAK" | "TIDAK" |
| $debugAdminNama Pengguna | Memungkinkan Anda masuk saat dalam mode debug | "admin" | string apa pun |
| $debugAdminPassword | Memungkinkan Anda masuk saat dalam mode debug | "" | string apa pun |
| $debugSkipInstall | Ini hanya untuk tujuan debug | PALSU | PALSU |
| $batas waktu | Waktu tidak aktif (dalam detik) diperlukan untuk mengeluarkan pengguna | 900 | bilangan bulat apa pun |
| $adminPanelWaktu habis | Waktu tidak aktif diperlukan untuk mengeluarkan pengguna dari panel admin | 450 | bilangan bulat apa pun |
| $pesan kesalahan | Tampilkan lebih banyak pesan kesalahan yang panjang lebar. Mungkin membocorkan informasi sensitif! | bawaan | "default", "bertele-tele" |
| $allowUsernameChange | Haruskah pengguna dapat mengubah nama penggunanya | BENAR | Boolean |
| $forceHTTPS | Mengalihkan semua koneksi non-HTTPS ke HTTPS dan mengirimkan HSTS | PALSU | Boolean |
Pada tahun 2019, tidak menggunakan HTTPS saat menangani segala jenis informasi sensitif (seperti kata sandi) dianggap sebagai risiko keamanan yang sangat besar. Oleh karena itulah sangat sangat disarankan untuk hanya menggunakan solusi hosting yang mendukungnya dan ubah opsi ini menjadi true. Saat ini Anda bahkan bisa mendapatkan sertifikat SSL gratis dari Let's Encrypt, jadi tidak ada alasan untuk tidak menggunakannya. Namun, pada beberapa lingkungan (yang dikonfigurasi dengan buruk) SERVER["HTTPS"] superglobal tidak ditentukan bahkan ketika HTTPS sebenarnya digunakan. Hal ini menghasilkan pengalihan yang tidak ada habisnya. Saya sendiri mempelajarinya dengan cara yang sulit.
| Nama opsi | Keterangan | Nilai bawaan | Nilai-nilai yang didukung |
|---|---|---|---|
| nonaktifkan Pendaftaran PenggunaSelf | Menonaktifkan elemen UI apa pun yang terkait dengan pendaftaran | PALSU | benar, salah |
| nama penggunaMinLength | Nama pengguna terpendek yang diterima UI | 3 | 1 -> |
| nama penggunaMaxLength | Nama pengguna terpanjang yang diterima UI | 30 | 1 -> |
| kata sandiMinLength | Kata sandi terpendek yang diterima UI | 8 | 1 -> |
| nama penggunaAturan | String ini ditampilkan jika nama pengguna tidak cocok dengan regExp | string apa pun | |
| aturan kata sandi | String ini ditampilkan jika kata sandi tidak cocok dengan regExp | string apa pun | |
| aktifkan Saran Nama Pengguna | Memungkinkan Anda menonaktifkan atau mengaktifkan saran nama pengguna | BENAR | Boolean |
| izinkan Perubahan Nama Pengguna | Haruskah pengguna dapat mengubah nama penggunanya (khusus UI) | BENAR | Boolean |
| aktifkanLoginMessage | Tampilkan pesan apa pun di halaman login | PALSU | Boolean |
| loginPesan | Tentukan pesan yang akan ditampilkan ketika EnableLoginMessage benar | "" | string apa pun |
Seperti yang dinyatakan sebelumnya, Anda memerlukan database MySQL. Basis data tidak memerlukan banyak ruang (kecuali jika Anda memiliki BANYAK pengguna) dan versi MySQl yang terbaru akan berfungsi. Anda dapat mengatur database dan membuat akun admin secara manual, atau Anda dapat menggunakan penginstal otomatis saya.
Selama langkah pertama instalasi, penginstal perlu menulis file ke drive host Anda. Jika Anda tidak memiliki izin yang tepat untuk itu, Anda harus melakukan instalasi secara manual. Lihat instruksi di bawah ini.
users dengan lima kolom: username , password , accessLevel , lastLogin dan rememberMeToken . Gunakan tipe data string seperti CHAR. Saya pribadi suka menggunakan VARCHAR. Untuk lastLogin saya merekomendasikan INT(11). Saya juga akan menambahkan bidang id yang bertambah secara otomatis sebagai kunci utama tetapi itu tidak sepenuhnya diperlukan.Jika Anda menggunakan VARCHAR atau tipe data lain dengan panjang string maksimum yang bervariasi, maka tabel di bawah ini akan berguna.
| Bidang | Panjang yang dibutuhkan (minimum) |
|---|---|
| nama belakang | Sama seperti $usernameMaxLength di config.php |
| kata sandi | Saya sarankan menggunakan 255 agar aman (Karena metode enkripsi default PHP mungkin berubah) |
| tingkat akses | 5 |
| Login terakhir | 11 |
| ingatMeToken | 255 |
Jangan khawatir, hal seperti ini akan membantu Anda:
CREATE TABLE IF NOT EXISTS users (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR ( 64 ) NOT NULL UNIQUE,
password VARCHAR ( 255 ) NOT NULL ,
accessLevel VARCHAR ( 10 ) NOT NULL ,
lastLogin INT ( 11 ),
rememberMeToken VARCHAR ( 255 )
);Setelah menyiapkan database, Anda harus membuat akun admin pertama Anda. Ada dua cara untuk melakukannya:
admin dan kata sandi yang dibuat secara acak. (Jika Anda mengikuti contoh SQL saya di atas dan menetapkan batasan UNIK pada bidang nama pengguna, maka akun tidak akan dibuat jika sudah ada. Anda tidak akan mendapatkan pesan kesalahan) Setelah Anda membuat akun admin, Anda harus menghapus (atau ganti nama) folder /install. Terakhir, masuk ke akun yang baru dibuat dan ubah kata sandi menggunakan halaman manajemen akun.ATAU
$newAccountAccessLevel di config/config.php menjadi "admin" dan kemudian membuat akun baru menggunakan formulir pendaftaran biasa. Anda perlu menghapus folder /install untuk dapat mengakses halaman login. Ingatlah untuk mengubah nilainya kembali menjadi "pengguna" setelahnya.PENTING! Saya mengingatkan Anda lagi bahwa Anda HARUS menghapus folder /install sebelum menggunakan ini di lingkungan produksi langsung. Jika tidak, siapa pun dapat melihat kredensial basis data Anda!
Setelah pengaturan, Anda dapat membuat akun baru (admin atau normal) menggunakan panel admin.
Ini berarti penginstal memperhatikan bahwa fungsinya random_bytes(int) tidak ada atau berfungsi dengan baik. Jika Anda menggunakan PHP versi lebih lama dari 7.0, Anda harus menggunakan perpustakaan pihak ketiga yang mengimplementasikan fungsi tersebut. Untuk PHP 5.x saya merekomendasikan yang ini.
Standar MySQLnya adalah 3306.
Hal ini terjadi ketika wizard gagal menghapus dirinya sendiri. Hal ini biasanya disebabkan oleh beberapa izin terbatas pada host. Perbaiki masalah dengan menghapus folder /install secara manual.
Periksa tip pemecahan masalah pada FAQ umum di bawah.
Panel admin sedang dalam tahap awal pengembangan. Banyak hal yang mungkin rusak.
Lebih banyak lagi yang akan ditambahkan di masa depan.
/admin
Baca config.php lebih teliti.
Itu berarti PDOException terjadi ketika mencoba menyambung ke database. Anda dapat mengaktifkan lebih banyak pesan kesalahan verbose di /config/config.php . Penyebab paling umum adalah:
PDO_MYSQL tidak tersedia atau dikonfigurasi dengan benar.PDO_MYSQL . Tidak, tidak, dan itu sudah terjadi terlalu lama, saya tahu. Saya berencana untuk segera melakukannya™. Pembaruan: Ini berfungsi sekarang. Harap dicatat bahwa ia hanya mengingat login selama 30 hari (Untuk alasan keamanan).
Ya, saya tahu penerapan hal seperti itu selalu membuka celah keamanan baru. Namun, saya tidak memaksa pengguna untuk menggunakannya atau apa pun. Jika pengguna tidak mencentang kotak tersebut, tidak ada token akses yang dibuat sehingga tidak ada risiko keamanan bagi pengguna tersebut.
random_bytes() yang aman secara kriptografis. Token itu disimpan ke database dan dua cookie dikirim ke browser. Nilai cookie pertama adalah nama pengguna pengguna sebagai teks biasa. Cookie kedua jauh lebih penting. Nilainya adalah token yang dibuat.Masalah utamanya adalah jika "orang jahat" entah bagaimana bisa mendapatkan akses ke token pengguna, mereka dapat dengan mudah memalsukan cookie dan masuk sebagai pengguna tersebut. Ada dua cara bagi penjahat untuk mendapatkan akses ke token pengguna: Entah bagaimana (misalnya injeksi SQL) mendapatkannya dari database atau dengan mencuri cookie dan/atau nilainya dari pengguna.
Saya menganggapnya sebagai risiko keamanan karena beberapa orang cenderung menggunakan kata sandi yang terlalu sederhana atau sama. Namun, saya mungkin mengizinkan ini di versi mendatang melalui opsi konfigurasi.