1 Trik Keamanan Halaman Login Berita Halaman login adalah sesuatu yang menarik dari sebuah webite bagi hacker. Mengapa demikian? Karena halaman login ...
Trik Keamanan Halaman Login Berita Halaman login adalah sesuatu yang “menarik” dari sebuah webite bagi hacker. Mengapa demikian? Karena halaman login berinteraksi dengan database dan dalam database itu berisi macam-macam data bahkan data yang sangat penting seperti username dan password terutama untuk admin. Bila database itu jatuh ke tangan yang salah, bayangkan sendiri akibatnya! Membuat halaman login itu gampang-gampang susah. Pada tutorial ini, saya akan membuat halaman login untuk menambah berita pada website lengkap dengan trik keamanannya menggunakan PHP dan MySQL. Oke langsung saja kita mulai! Pertama, kita buat database test dan rencananya kita akan membuat tabel admin dan tabel berita dalam database tersebut. 1. Ketikkan listing berikut: CREATE DATABASE test; USE test; CREATE TABLE `admin` ( `id` int(11) NOT NULL auto_increment, `username` varchar(20) NOT NULL, `password` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Tabel AUTO_INCREMENT=3 ; INSERT INTO `admin` VALUES (1, 'romtoni', 'coolman!');
Admin'
CREATE TABLE `berita` ( `id` int(10) unsigned NOT NULL auto_increment, `tanggal` date NOT NULL, `judul` text NOT NULL, `isi` text NOT NULL, `sumber` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Tabel Berita' AUTO_INCREMENT=9 ; INSERT INTO `berita` VALUES (1, '2009-01-23', 'Microsoft Internet Explorer 8 akan segera diluncurkan.', 'Microsoft akan segera merilis IE8 dengan versi RTW (Release To Web). Rencananya, paling lambat IE8 (versi final) akan segera dirilis ke publik pada pertengahan kedua tahun 2009.', 'http://news.softpedia.com\r\n');
2. Selanjutnya, simpan listing tersebut dengan nama loginberita.sql lalu lakukan import pada PhpMyAdmin Bila sudah selesai, selanjutnya kita akan membuat file-file php-nya. Saya akan membuat file-file php tersebut menjadi bagian-bagian kecil agar kita dapat lebih memahami konsepnya. Sebagai permulaan, kita akan buat file untuk menampilkan berita ke pengunjung terlebih dahulu.
Listingnya adalah sebagai berikut: 1. Listing index.php Black Green Force - Berita
Berita Terkini
Penjelasan : Kode digunakan untuk meload file lihatberita.php ke dalam index.php. Jadi, seolah-olah file lihatberita.php menjadi satu dengan index.php. Anda akan melihat hal-hal sejenis dalam tutorial kali ini. Selanjutnya, kita akan membuat file lihatberita.php. Let's Check It's Out! 2. Listing lihatberita.php <style type="text/css">
{ $page = 1; } $totalpage = ceil ($jumlah/$limit); if ($page!=1) { $prev = $page -1; echo "«"; } for($a=1;$a<=totalpage;$a++) { if($a==$page) { echo ("[$a]"); } else { echo ("[$a]"); } } if ($page!=$totalpage) { $next = $page + 1; echo "»"; } $star = ($page-1)*$limit; $sql = mysql_query("SELECT * FROM berita ORDER BY id DESC LIMIT $star, $limit"); while($data = mysql_fetch_array($sql)) { include("tabelberita.php"); } ?>
Penjelasan : Pada file ini, kita menggunakan inline CSS untuk mengatur tampilan file. File lihatberita.php ini juga membutuhkan file external lain yaitu config.php untuk mengkoneksikannya ke database dan tabelberita.php untuk menampung hasil dari data Sumber yang didapatkan. Jadi, file ini hanya digunakan untuk memproses data untuk membatasi jumlah berita yang akan ditampilkan, dalam hal ini berita yang tampil dibatasi sebanyak 2 buah berita saja. Selanjutnya, kita buat file config.php 3. Listing config.php
Penjelasan : Seperti yang sudah saya katakan tadi, file ini digunakan untuk koneksi ke database. Sesuaikan konfigurasi host, user, password, dan database dengan yang Anda gunakan. Bila berhasil koneksi maka database tersebut akan dipakai. Jika tidak, maka akan muncul pesan kesalahan “Tidak bisa koneksi ke database”. Selanjutnya kita buat file tabelberita.php 4. Listing tabelberita.php
<span><span><span> =$data[tanggal]?>
<span><span><span> =$data[isi]?> <span>
Sumber
:
<span> =$data[sumber]?>
Penjelasan : Seperti yang sudah saya katakan di atas, file ini digunakan untuk menampung hasil query yang dimasukkan. Kode =$data[tanggal]?> digunakan untuk mengambil data dari field tanggal. Sama logikanya untuk mengambil data isi dan sumber. Selanjutnya, kita akan buat file yang ditunggu-tunggu yaitu halaman login untuk Admin. Sama seperti file untuk menampilkan berita ke pengunjung, saya juga akan membaginya menjadi beberapa file. 1. Listing login.php Black Green Force - Zona Admin
Zona Admin - Halaman Login
Penjelasan: File ini adalah file induk untuk login Admin. Halaman ini membutuhkan file formadmin.php sebagai isi file. Oke, tanpa lama-lama kita buat filenya. 2. Listing formadmin.php
Penjelasan : File ini adalah hanya sebuah tempat untuk menginput username dan password. Oleh karena itu, maka file ini hanya terdiri dari dua textbox dan dua tombol sebagai intinya. Untuk proses (action), saya memakai file admin.php untuk menangani proses inputan. 3. Listing admin.php
$hasil = mysql_query($query); $hasil_cek = mysql_num_rows($hasil); if ($hasil_cek == 0){ require ("erroradmin.php"); } else { require("tambahberita.php"); } ?>
Penjelasan: File ini adalah file inti dari keseluruhan file-file yang sudah kita buat dan akan kita buat untuk halaman login Admin. Mengapa bisa dikatakan demikian? Karena file inilah yang menangani input dari user pada file formadmin.php tadi. Kita memakai statemen mysql_real_escape_string untuk username dan password agar halaman login ini terhindar dari yang namanya SQL Injection. Lalu, untuk mencari apakah username DAN password ada dalam tabel admin kita menggunakan mysql_num_rows. Akan tetapi, yang lebih menarik dari halaman login ini atau tepatnya pada file ini adalah sebuah teknik baru saya temukan dan ini yang akan saya tekankan pada tutorial kali ini, yaitu cara menggunakan statement if. Perhatikan blok kondisi IF di atas! Saya memanfaatkan statement if untuk menyeleksi halaman yang muncul. Awalnya saya kira tidak bisa. Namun, ya gitu deh! Bisa. Yang lucu atau kerennya alamat pada address bar tidak berubah yaitu tetap menunjuk admin.php. Namun, pada saat Anda mencoba untuk menuliskan secara manual file admin.php maka yang terjadi adalah browser langsung menjalankan statement true yang artinya meload file erroradmin.php ke dalam file ini. Ini tidak akan terjadi bila kita memanggil file admin.php memakai tombol Login pada file formadmin.php. Yang terjadi bisa saja statement false yang dijalankan dan artinya meload file tambahberita.php ke file ini. Bingung, ya? Maklum masih newbie sih, jadi gitu deh jelasinnya susah :). Anda masih bersamaku, 'kan? [emangnya di telepon :) ] Ok, kembali ke inti permasalahan. Yang perlu dicermati atau bahasa gampangnya, “pada intinya” adalah bila ada seseorang yang mem-bookmark alamat halaman admin.php untuk menginput data (melewati halaman login.php yang meload halaman formadmin.php) yaitu maka bookmark-nya itu sia-sia belaka karena seperti sudah saya singgung di atas bila Anda mem-bookmark halaman tersebut sama artinya Anda menulis manual alamat tersebut. Tahukan yang terjadi selanjutnya? Kalau sudah tahu kasih tahu yang belum tahu. Enggak deng, becanda :). Yang terjadi adalah halaman erroradmin.php yang di-load ke file admin.php bukan tambahberita.php. Akan tetapi, trik ini juga memiliki kelemahan bila Pengunjung mengetahui bahwa alamat yang sebenarnya untuk menginput berita adalah tambahberita.php lalu membookmarknya atau membukanya maka halaman tersebut akan muncul tanpa bisa dicegah. Tips saya, licik-liciklah dalam menggunakannya. Jujur saja, Trik ini masih saya pakai di website saya. Alamatnya? Ada deh 'ntar kalo dikasih tau dihack lagi :) piss! Sebenarnya hanya itu, inti dari tutorial yang ingin saya sampaikan. Tetapi, show must go on! Ok, kita lanjutkan saja untuk membahas file-file yang dibutuhkan sisanya, dimulai dari erroradmin.php.
4. Listing erroradmin.php Black Green Force - Berita
ERROR!
Maaf, Anda tidak mendapat akses untuk menambah berita.
Penjelasan: File ini berfungsi sebagai halaman error dan memaksa Anda untuk kembali ke halaman index.php. 5. Listing tambahberita.php Black Green Force - Zona Admin (Tambah Berita)
Zona Admin - Tambah Berita
Penjelasan: File ini membutuhkan formberita.php untuk isi. File tambahberita.php ini hanyalah “halaman master” untuk file tersebut. 6. Listing formberita.php <style type="text/css">
Penjelasan: Inilah halaman untuk menginput berita yang harus kita lindungi. File ini, tepatnya pada form kita memakai action tampil.php untuk memproses tombol Simpan. 7. Listing tampil.php Black Green Force - Berita
Penjelasan: File ini membutuhkan simpan.php untuk isi. File tampil.php ini hanyalah “halaman master” untuk file tersebut. 8. Listing simpan.php "; } if ($error) { if (empty($judul)) { echo ("
"); } else { echo "Maaf, berita tidak dapat disimpan"; } } ?>
Penjelasan: File simpan.php ini digunakan untuk menyimpan hasil masukan dari form pada file formberita.php. Logika sederhana untuk file ini adalah bila salah satu dari area yang diberi bintang tidak diisi, maka akan muncul pesan kesalahan dari file ini. Sedangkan, bila semua area yang diberi bintang diisi, maka akan muncul pesan sukses dari file ini
dan apapun yang dimasukkan tadi pada form akan disimpan ke dalam database. Bila sudah, maka akan ditampilkan pula link untuk kembali ke halaman index.php. Sekian tutorial dari saya kali ini. Semoga bermanfaat! Oh, iya untuk mempermudah nalar Anda, perhatikan hierarki dari file-file di atas pada gambar di bawah ini.
Hierarki dari file-file yang digunakan pada trik keamanan di atas.