Pada artikel Cara Bobol Password Admin dengan MySQL Injection kita sudah mengetahui bagaimana para peretas melakukan injeksi terhadap halaman login admin, sehingga bisa berakibat fatal terhadap keamanan situs web. Sekarang kita akan membahas bagaimana cara mengatasi masalah ini, dengan cara membuat Anti SQL Injection.

Artikel ini diberi judul Anti MySQL Injection untuk keamanan situs web. Dalam artikel ini akan dibahas bagaimana cara mengatasi SQL Injection, bagaimana cara melindungi situs web dari peretas membobol pasword admin situs web menggunakan SQL Injection. Sehingga diharapkan dapat melakukan tindakan antisipasi agar celah SQL Injection dapat di atasi .


Daftar Isi


Langkah 1 - Desain Tablel Admin

Berikut adalah contoh desain tabel admin, yang mana tabel ini akan digunakan untuk menyimpan informasi login admin situs web. Contoh berikut hanya ada beberapa field saja namun pada kenyataan mungkin saja tabel admin berisi banyak field. Kita asumsikan saja desain tabel admin sebagai berikut:

MariaDB [detik]> describe admin;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| userId     | int(11)     | NO   | PRI | NULL    | auto_increment |
| userName   | varchar(20) | NO   |     | NULL    |                |
| userPwd    | varchar(33) | NO   |     | NULL    |                |
| userStatus | varchar(10) | NO   |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

Pada tabel di atas kita asumsikan nama pengguna akan disimpan pada field UserName dan password akan disimpan dalam field userPwd. Selanjutnya kita lihat bagaimana query mysql untuk form login.


Langkah 2 - Modul Login

Pertama, sebelum melakukan query ke database, pastikan melakukan pembershan inputan dari perintah sql injection:

$userName = mysql_real_escape_string($_POST['userName']);
$userPwd = mysql_real_escape_string($_POST['userPwd']);

Kemudian setalah hasil query ke database, hasil nya lakukan kembali proses validasi, dengan mencocokan kembali hasil query dengan inputan

if($items[0]['userPwd']==md5($userPwd)){

}
else
{
echo "Username/Pwd salah";
}

Berikut skrip lengkap

<?php 
$userName = mysql_real_escape_string($_POST['userName']);
$userPwd = mysql_real_escape_string($_POST['userPwd']);
//query untuk mendapatkan informasi login
$sql = "SELECT * FROM admin where userPwd='".md5($userPwd)."' and  userName='".$userName."'";
$result =mysqli_query($conn,$sql);
while($r=mysqli_fetch_assoc($result))
{
 $items[]=$r; 
}
//jika hasil query tidak ada data
if(empty($items))
{
  $msq="User Name atau Password salah";
}
//jika hasil query ditemukan data
else
{
  $_SESSION['userName']=$items[0]['userName']; 
  header('location:/admin/');
}

Langkah 3 - Bobol Form Login

Sekarang kita lakukan pengujian form login dengan melakukan SQL Injection, ada beberapa perintah SQL injection yang sering digunakan para peretas:

 //perintah injeksi 
or 1=1--	
" or "1"="1	
' or '1'='1
") or ("a"="a
" or 1=1--	
' or 1=1--	
tes " or "a"="a
or 0=0#	' 
or = 0=0#	
tes' or 'a'='a
" or 0=0#	
or 1=1--	
tes") or ("a"="a
' or '0'='0	
') or ('a'='a	
tes') or ('a'='a

Silahkan kunjungi situs target http://kampung.my.id/admin/, kemudian lakukan SQL Injection pada form login Admin. Untuk username gunakan ' or '1'='1 dan untuk password masukan angka 1 atau terserah juga bisa. Ketika kita melakukan injeksi maka query form login akan menjadi seperti berikut:

select * from admin where  userPwd='1'  and userName='' or '1'='1'

Ketika query seperti ini dijalankan maka hasil akan selalu bernilai benar (true), sehingga inputan password tidak ada fungsinya lagi, apapun yang diinput pada form akan selalu diabaikan. Dengan demikian password Admin akan dibaypass dan halaman admin web site akan bisa diakses oleh peretas .


Langkah 4 - Anti SQL Injection


Demikian artikel tentang menambah user mysql melalui terminal, jika ada pertanyaan atau penjelasan yang kurang dimengerti, bisa langsung kirim pertanyaan melalui form komentar.