Support Idiot Attacker dengan klik subscribe di channel Disini, Banyak konten-konten Idiot attacker yg di upload disana.

Cara Menutup Bug SQL Injection

Rio Setyawan 12:59 PM
Cara Menutup Bug SQL Injection
Artikel ini saya dapat dari Blog sebelah, sebagai pengingat saya juga , saya buat artikel disini. Karena saya menulis untuk saya baca kembali :)
bukan 100% saya copas semua gan, masih saya edit-edit lagi biar rapi dan  lebih jelas bacanya :D


Injeksi SQL atau SQL Injection memiliki makna dan arti yaitu sebuah teknik yang menyalahgunakan sebuah celah keamanan yang terjadi dalam lapisan basis data sebuah aplikasi. Celah ini terjadi ketika masukan pengguna tidak disaring secara benar dari karakter-karakter pelolos bentukan string yang diimbuhkan dalam pernyataan SQL atau masukan pengguna tidak bertipe kuat dan karenanya dijalankan tidak sesuai harapan. Ini sebenarnya adalah sebuah contoh dari sebuah kategori celah keamanan yang lebih umum yang dapat terjadi setiap kali sebuah bahasa pemrograman atau skrip diimbuhkan di dalam bahasa yang lain. (Wikipedia)



Cara Menutup Bug SQL Injection

1. Dengan cara menjadikan variabel get menjadi absolute integer
    Penjelasan:
    Biasanya para hacker melakukan penetrasi terhadap variabel id yang kita letakkan pada url..
  
    Contoh:
    pada url http://webkamu/berita.php?id=1
    ketika akan membaca isi dari variabel id biasanya kita menggunakan syntak
   
    $id = $_GET['id'];
    jadi setiap isi dari id pada url akan disimpan pada variable $id..
   
    dan untuk query ke database :
    "SELECT * FROM tbl_berita WHERE id='$id'"
    Nah melalui variabel $id ini lah para hacker menggunakan teknik SQL Injection, dengan   memasukkan    perintah2 SQL yang dapat mengeksploitasi database..
Solusinya:
kita buat id menjadi absolute integer dengan mengubah sintaks pembacaan variabel get id menjadi:
    $id = abs((int)$_GET['id']);
 fungsi abs() digunakan untuk menghilangkan tipe data minus dan int digunakan untuk mengubah tipe data menjadi integer (hanya mengijinkan tipe data integer). jadi ketika variabel id pada url di rubah secara manual dan diisi dengan sintak SQL yang berupa string maka tetap dibaca 0. 
2. Dengan menambahkan variabel get berisi enkripsi md5 yg divariasi pada url
 Jika awal url adalah
     http://webkamu/berita.php?id=1
 Maka kita akan menambahkan variabel yg berisi enkripsi dari id yg kita modifikasi dengan string acak menjadi
     http://webkamu/berita.php?id=1&token=9b0443e36affedbafe882a4bbb90eaec
nah sekilas terlihat mirip sama url facebook.. wahh kereeen :)

ok, saya jelaskan maksud dari variabel token diatas, jadi ketika awal kita memberikan link untuk next berita or previous berita atau berita lainnya.. pokok nya yang menampilkan berita lain dah.. kita isi
$token = md5(md5($id_berita).md5('kata acak'));
jadi href nya menjadi : berita.php?id=$id_berita&token=$token
sekarang pada halaman tampil berita kita tambahkan pengecekan apakah id berita diganti/diinject manual oleh user dengan cara :
$id_berita=$_GET['id_berita'];
$token=$_GET['token'];
$cek=md5(md5($id_berita).md5('kata acak'));
if($token==$cek){
   //syntak menampilkan berita disini
}
else{
   echo "SQL Injection detected..!!!!";
}
3. Khusus untuk form login, dengan melakukan enkripsi password atau merubah algoritma autentikasi login.
 Biasanya kita melakukan pengecekan ketika user login yaitu dengan melakukan query kedatabase:
$input_username=$_POST[username];
$input_password=$_POST[password];
$q="SELECT * FROM tbl_user where username='$input_username' and password='$input_passsword'";
$r=mysql_query($q);
$jml_row=mysql_num_rows($r);
if($jml_row > 0){
     echo "login sukses";
}
else{
     echo "login gagal";
}
nah algoritma autentikasi login seperti diatas sangat rentan terhadap penetrasi SQL Injection..
solusi pertama dengan melakukan enkripsi pada password yaitu dengan mengganti
skrip berikut :
$input_password=$_POST[password]; menjadi:
$input_password=md5(md5($_POST[password]).md5('karakter acak'));
tentunya yang berakibat dengn mengenkripsi semua password di database sesuai enkripsi diatas.. :)
(semoga ga pada pusing yah :D)
solusi kedua yaitu dengan merubah algoritma menjadi
$d=mysql_fetch_array($r);
if($jml_row >0 && ($d[password]==$input_password))           


di tambah pengecekan inputan password terhadap password di database



Arpns1986x
Previous
Next Post »
0 Komentar