SQL Injection yaitu trik hacking dengan cara mengedit isi dari variabel get yang ada di url untuk melakukan penetrasi kedalam database. Teknik SQL Injection juga bisa di lakukan pada form login dengan metode baypass atau melewati autentikasi login dengan syntax SQL.
SQL injection sering digunakan para hacker/defacer untuk memasukan shell atau backdoor untuk mengganti index suatu website..
1. Cara untuk dapat mengantisipasi SQL Injection adalah dengan cara menjadikan variabel get menjadi absolute integer.
Penjelasan: Biasanya para hacker melakukan penetrasi terhadap variabel id yang kita letakkan pada url.
Contoh:
http://www.situskorban.com/berita.php?id=1ketika akan membaca isi dari variabel id biasanya kita menggunakan syntax
$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 perintah - perintah SQL yang dapat mengeksploitasi database.
Solusinya: kita buat id menjadi absolute integer dengan mengubah syntax 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 syntax SQL yang berupa string maka tetap dibaca nol (0).
2. Dengan menambahkan variabel get berisi enkripsi md5 yg divariasi pada url
jika awal url adalah:
http://www.situskorban.com/berita.php?id=1Maka kita akan menambahkan variabel yang berisi enkripsi dari id yang kita modifikasi dengan string acak menjadi:
http://www.situskorban.com/berita.php?id=1&token=9b0443e36affedbafe882a4bbb90eaecSaya jelaskan maksud dari variabel token diatas, jadi ketika awal kita memberikan link untuk berita selanjutnya atau berita sebelumnya. Intinya nya yang menampilkan berita lain. Kita isi:
$token = md5(md5($id_berita).md5('kata acak'));Jadi href nya menjadi:
berita.php?id=$id_berita&token=$tokenSekarang pada halaman tampil berita kita tambahkan pengecekan apakah id berita diganti atau diinject manual oleh user dengan cara:
$id_berita=$_GET['id_berita'];selsai.
$token=$_GET['token'];
$cek=md5(md5($id_berita).md5('kata acak'));
if($token==$cek){
//syntak menampilkan berita disini
}
else{
echo "SQL Injection detected! Fuck lamers!";
}
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];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];
$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";
}
$input_password=$_POST[password]; menjadi:Tentunya yang berakibat dengn mengenkripsi semua password di database sesuai enkripsi diatas. :)
$input_password=md5(md5($_POST[password]).md5('karakter acak'));
Solusi kedua yaitu dengan merubah algoritma menjadi:
$d=mysql_fetch_array($r);di tambah pengecekan inputan password di dtabase
if($jml_row >0 && ($d[password]==$input_password))
Selesai, sekian tips mengatasi SQL Injection, semoga bermanfaat. :)
Posted by Minggu, Desember 02, 2012 and have
0
komentar
, Published at
Tidak ada komentar:
Posting Komentar
Komentar yang tidak baik akan dihapus :*