Coretan yang tak sengaja ku tulis..
Sekarang Blog Ini Pindah Ke: Dark Generation dan untuk Update seputar tentang RPL bisa masuk ke blog => RPL4rt...

Cara Mencegah SQL Injection

Cara Mencegah SQL Injection

Pernah denger SQL Injection? Pasti pernah dong.. :)
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=1
ketika 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=1
Maka 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=9b0443e36affedbafe882a4bbb90eaec
Saya 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=$token
Sekarang pada halaman tampil berita kita tambahkan pengecekan apakah id berita diganti atau 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! Fuck lamers!";
}
selsai.

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";
}
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. :)

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 di dtabase

Selesai, sekian tips mengatasi SQL Injection, semoga bermanfaat. :)


share this article to: Facebook Twitter Google+ Linkedin Technorati Digg
Posted by Dika, Published at Minggu, Desember 02, 2012 and have 0 komentar

Tidak ada komentar:

Posting Komentar

Komentar yang tidak baik akan dihapus :*