Apabila anda adalah seorang administrator sebuah website atau seorang programmer web anda harus jeli dengan berbagai teknik penyerangan seorang Hacker atau Cracker. Ingat seorang programmer yang baik adalah programmer yang dapat meminimalisir kesalahan yang dibuat user baik itu yang disengaja atau tidak. dalam kasus ini saya akan menjelaskan sedikit bagaimana seseorang menyerang dengan teknik SQL Injection, saya memang pemula dan saya hanya mencoba mngingatkan kepada anda yang sudah <i>jago</i> dalam hal ini.

SQL Injection adalah teknik serangan yang menyisipkan query ke dalam suatu sistem, sehingga orang lain (penyerang) dapat mengakses database anda. Tetapi ingat bukan sembarang query yang dimasukkan. Contohnya anda memiliki kode berikut untuk login :

$match=false;
if(isset($POST[‘submit’])){
$nama=$_POST[‘nama’];
$pass=$_POST[‘password’];
$sql=”SELECT nama, password FROM user WHERE nama=’$nama’ AND password=’$pass'”;
$res=mysql_query($sql);
if($res && mysql_num_rows($res)==1){
$match=true;
mysql_free_result($res);
}
if($match==true){
echo “Account Match”;
}else{
echo “Invalid Account”;
}
}

Kode program tersebut memang melakukan verifikasi data, tetapi sangat rapuh. Penyerang bisa mengunakan query-query berikut untuk mendapatkan akses secara tidak sah.

admin’#
‘OR 1=1 INTO DUMPFILE ‘/path/ke_lokasi/file.txt’#
‘OR 1=1 INTO OUTFILE ‘/path/ke_lokasi/file.txt’#

Contoh SQL Injection di atas adalah contoh yang umum. Dan untuk mencegahnya, gunakan fungsi mysql_real_escape_string() atau addslashes(), seperti pada fungsi myMagic()

$nama=myMagic($_POST[‘nama’]);
$pass=myMagic($_POST[‘password’]);

Contoh lainnya dari SQL Injection adalah dengan menggunakan multiple query, seperti berikut:

$sql=”SELECT * FROM buku WHERE kode={$id}”; //$id dari method GET/POST
0; DELETE FROM user //menghapus isi tabel
0; GRANT ALL ON *.* to ‘xxx@%’

Ini sangat berbahaya apabila anda menggunakan server database seperti PostgreSQL atau SQLite. Untuk solusinya harus melakukan casting untuk memastikan id bertipe integer.

//simulasi nilai $_POST[‘id’]
$id=(int) myMagic($_POST[‘id’]);

Lalu untuk memeriksa apakah input mengabdung karakter tertentu, gunakan fungsi strpos()

$nama=myMagic($id);
if(strpos($nama, ‘;’)) die(‘Naughty..Naughty..Naughty’); //periksa apakah karakter ; terdapat pada $nama

Nah sekian solusi yang dapat saya berikan, dan pesan saya tetap berhati-hati karena website Kaspersky jebol karena teknik serangan ini. Terima kasih..