Ketika
kita melakukan serangan SQL injection dah pasti langsung cari kolom dan
table yang berhubungan sama username dan password administrator.
Nah setelah itu pasti kita langsung mencari admin page-nya. Beberapa
dari kita lancar, mungkin dengan sedikit keberuntungan? Tebak – tebakan
atau menggunakan tools. Nah sisanya bakalan kebingungan dan nyerah gitu
aja (mungkin ini masalah yang sering dialami, saya juga gitu), karena
dah nyerah cuman posting di forum hasil injectnya doang. Entah ingin
sharing? Berharap orang lain menemukan admin pagenya? Atau cuman sekedar
pamer? Who knows?
Itulah salah satu proteksi yang dilakukan
oleh sang Administrator yaitu
membuat nama yang unik bagi halaman adminnya. Mungkin beberapa tools
yang bekerja secara Brute Force atau menyimpan list nama – nama halaman
admin yang biasa digunakan bakalan gak berguna cuman bagi tools seperti
Acunetix yang bekerja secara crawler?
Mungkin tips trik disini
gak terlalu berguna cuman menarik aja, sapa tau
ada ide – ide yang lebih bagus. Intinya walaupun admin pagenya telah di
dapat tetapi kita menambah beberapa proteksi lagi dan siapa tau membuat
sang attacker putus asa?
Langsung aja…
1.
Mengamakan Admin Page Dengan Proteksi IP Tertentu.
Disini kita menggunakan file .htaccess.
<Limit GET POST PUT>
order deny,allow
deny from all
allow from 192.168.1.5
</Limit>
Jadi letakkan file .htaccess tersebut di direktori tempat admin
pagenya berada. Hanya IP 192.168.1.5 yang bisa masuk.
Untuk
melihat alamat IP kalian bisa langsung cek disini atau lebih
jelasnya tentang .htaccess bisa dilihat disini.
2. Double Password.
WTF? Kok double? Kan
si Attacker dah liat isi database kita?
Gini, sebenernya ini
juga saya asal – asal mikir aja dan mungkin bisa
kita terapkan. Beberapa pikiran – pikiran saya cuman ini doang yang bisa
saya praktekkan (maklum hasrat kuat skill kurang). Intinya satu
password disimpan di database yang satu lagi enggak.
Berikut
contoh simplenya.
Pertama kita buat database latihan1 dengan table useradmin yang isinya id_user
(int(5), auto_increment, primary_key), username
(varchar(25)) dan password (varchar(25)).
Setelah itu kita buat dulu halaman login
adminnya ( index.php)
yang berisi kode berikut…
<form id="form1" name="form1" method="post" action="cek_user.php">
<table width="200" border="1">
<tr>
<td>Username</td>
<td><input name="username" type="text" id="username" /></td>
</tr>
<tr>
<td>Password</td>
<td><input name="password" type="password" id="password" /></td>
</tr>
<tr>
<td>Pass2</td>
<td><input name="password2" type="password" id="password2" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="Submit" value="Submit" /></td>
</tr>
</table>
</form>

Ketiga buat file cek_user.php
<?php
include "koneksi.php";
session_start();
$username = trim(strip_tags(mysql_real_escape_string($_POST['username'])));
$password = trim(strip_tags(mysql_real_escape_string($_POST['password'])));
$password2 = trim(strip_tags(mysql_real_escape_string($_POST['password2'])));
if(strlen($username)<1)
{
print "<script>alert('Username Masih Kosong');
javascript:history.go(-1);</script>";
exit;
}
else if(strlen($password)<1)
{
print "<script>alert('Password Masih Kosong!');
javascript:history.go(-1);</script>";
exit;
}
else if(strlen($password2)<1)
{
print "<script>alert('Password2 Masih Kosong!');
javascript:history.go(-1);</script>";
exit;
}
else {
$cari_dulu = "select username, password from useradmin where username = '$username' and password = '$password'";
$jalanin_sql = mysql_query($cari_dulu);
$cek_ada_gak = mysql_num_rows($jalanin_sql);
if ($cek_ada_gak == 1 and $password2 == 'cadangan')
{
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
header("location: berhasil.php");
}
else
header("location: index.php");
}
?>
Jangan lupa untuk membuat koneksi.php
<?php
$my['host'] = "localhost";
$my['user'] = "root";
$my['pass'] = "cruzenaldo";
$my['dbs'] = "latihan1";
$koneksi = mysql_connect($my['host'], $my['user'], $my['pass']);
if (! $koneksi) {
echo "Gagal Koneksi Bro....";
mysql_error();
}
mysql_select_db($my['dbs'])
or die ("Database Gak Ada".mysql_error());
?>
berhasil.php apabila kita berhasil melakukan login.
<?php
include "cek.session.php";
echo "Berhasil";
echo "<a href='logout.php'>Log Out</a>";
?>
cek.session.php untuk mencek apakah session ada.
Apabila
tidak ada akan menampilkan pesan error.
<?php
session_start();
if(! (session_is_registered('username') && session_is_registered('password')))
{
echo "<div align=center><b> PERHATIAN ..!!! </b><br>";
echo "KAMU HARUS LOGIN DULU :p <meta http-equiv='Refresh' content='2; URL=index.php'/></div>";
exit;
}
?>
Dan logout.php untuk menghapus session.
<?php
session_start();
if ($_REQUEST['logout'] == "yes")
session_unset();
session_destroy();
header("location: index.php");
?>
Pada cek_user.php password keduanya adalah "cadangan".
Jujur ini cuman sekedar iseng doang, gak
ada yang aman 100 persen
apalagi buat kalian yang dah pada jago – jago neh.
Mohon
tambahan dan kritiknya yang membangun… Sapa tau muncul ide – ide
baru bagi newbie seperti saya ini?
Capek kopas? Download aja
scriptnya…
Sumber artikel : http://www.jasakom.com/content.php?459-Cara-Lain-Lindungi-Halaman-Admin-Maybe
Copyright 2010 @ Klaten WEB.com