Algoritma dan teknik menangkal SQL injection

hacking

Tidak dipungkiri lagi, SQL injection adalah salah satu teknik hacking yg sangat berbahaya. Jika diamati, SQL injection berawal dari satu hal yg sebenarnya sangat sederhana sekali. Kali ini kita akan membahas teknik dan algoritma menangkal SQL injection yg dilakukan melalui methode $_GET.

 

Tulisan ini diawali kepada kesadaran bahwa atas banyaknya kasus SQL injection. Disamping sedikitnya kesadaran dari programmer dan kebingungan programmer untuk membenahi skripnya. Dikarenakan sedikitnya resource yg membahas bagaimana mencegah SQL injection. Sementara tips dan trik untuk melakukannya sangat banyak.

 

Mari kita lihat bersama: http://target.com/berita.php?task=detail&id=9

Pada kebanyakan aplikasi yg dibuat oleh programmer pemula, kode program pada berita.php adalah sebagai berikut

 

<?php

require_once(“connection.php”);

$sql = “SELECT * FROM berita WHERE id=”.$_GET[‘id’];

$result = mysql_query($sql);

while($data = mysql_fetch_array()){

     echo “<h2>”.$data[‘judul’].”</h2>”;

     echo “Posting pada tanggal: “.$data[‘tanggal_posting’];

     echo $data[‘isi’];

}

?>

Coba kita lihat lagi, betapa programmer, entah karena ketidak tahuan atau malas membenahi(nah ini yg susah) tidak memberikan filter pada input $_GET[‘id’]. Padahal ini sangat berbahaya jika attacker mencoba melakukan teknik ini.

 

Disana ada 2 kesalahan fatal.

1. Tidak memberikan filter atas variable $_GET[‘id’]. Sehingga MySQL Server akan memberikan signal kesalahan ke browser(Jika pada PHP error_message=ON).

2. Tidak melakukan checking terhadap hasil dari Query.

 

Lantas, bagaimana cara penanggulangannya. Cara mudahnya kita modifikasi skrip diatas seperti berikut ini:

 

<?php

require_once(“connection.php”);

// –> validasi $_GET[‘id’]

if(!ctype_digit($_GET[‘id’])){

    die(“<script>alert(‘Jangan coba-coba ya.’);window.history.go(-1);</script>”);

}

$sql = “SELECT * FROM berita WHERE id=”.$_GET[‘id’];

$result = mysql_query($sql);

// –> validasi hasil query

if(mysql_num_rows($result)<0){

    while($data = mysql_fetch_array()){

         echo “<h2>”.$data[‘judul’].”</h2>”;

         echo “Posting pada tanggal: “.$data[‘tanggal_posting’];

         echo $data[‘isi’];

    }

} else { echo “Berita tidak ditemukan.”; }

?>

Nah, skrip diatas kira-kira mempunyai arti algoritma seperti ini:

1. Pertama-tama, validasi $_GET[‘id’], jika ia bernilai Integer(angka), maka lanjutkan. Jika tidak, tampilkan peringatan “Jangan coba-coba ya.” dan kembali kehalaman selanjutnya.

2. Lakukan Query

3. Cek hasil query. Jika hasil lebih besar dari 0(1,2,dst), ambil hasil query dan tampilkan ke layar browser. Jika tidak tampilkan pesan “Berita tidak ditemukan.”.

 

Nah, dengan begitu aplikasi kita sudah lumayan aman. Tunggu terus kelanjutannya ya.

 

Catatan: algoritma ini bisa dipakai tidak hanya pada PHP saja, tetapi bisa untuk bahasa pemrograman web yg lain. Tentu saja dengan syntax masing-masing. Untuk database selain MySQL tinggal mencari fungsi yg sama atau setara dengan fungsi-fungsi MySQL. (_zapto dikutip dari srandal.com)

About the Author

has written 26 stories on this site.

15 Comments on “Algoritma dan teknik menangkal SQL injection”

  • Advent wrote on 12 June, 2009, 13:32

    Bagus bgt tekniknya buat pemula seperti saya..thnks

  • ryanaby wrote on 12 June, 2009, 18:14

    bagus juga artikelnya..^_^
    bisa sediain tempat khusus untuk tutorial PHP dunk..
    heheuw… :mrgreen: :mrgreen:

  • dhewa wrote on 14 June, 2009, 11:59

    bagus sekali ini artikelnya mas,,,,,
    apakah boleh saya meng-copy dan menyebarluaskannya?
    sebagai pembelajaran kita bersama….

  • MasSukma wrote on 14 June, 2009, 18:49

    bole2 monggo dicopy paste tapi tetap sumber dan link KabarIT.com tetep diserta ken ya…. ok bro…! 8) 8)

  • adiTya wrote on 15 June, 2009, 16:45

    Repot amat mas… pake aja (int)$_GET[‘var’]; jadi smua variabel akan bernila variabel. kalau tipe string:

    if(get_magic_quotes_gpc())
    {
    $var = stripslashes($_GET[‘var’]);
    }
    $var = mysql_real_escape_string($var);
    tpi teknik yang satu ini kita harus udah konek ke database dulu

  • Tomi wrote on 30 June, 2009, 11:33

    lebih aman pake stored procedure meskipun kita input petik satu ( ‘ ) hasil query g bakal jebol

  • imam wrote on 6 July, 2009, 13:46

    thanks infonya

  • d_anank wrote on 6 July, 2009, 19:21

    untuk MasSukma
    ini kalo gag salah dikutip dari srandal.com
    tapi kenapa kalo ngutip ini bilangnya dari kabarit.com?

  • kayangan wrote on 11 September, 2009, 9:13

    yang plig mantep itu,,,,,,
    klu ngk mau di gangu
    JANGAN PUNYA KOMPUTER!!!!!!!!!!!!!!! 😆 😆 😆 😆 😆 😆 😆 😆 😆 :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: 😈 😈
    Ha,, HA,, Ha,, Ha,,, HA,,,,

  • anas wrote on 23 November, 2009, 23:02

    thanks infonya…berguna banget buat pemula seperti saya… :mrgreen:

  • joko tole wrote on 9 January, 2010, 3:36

    yang plig mantep itu,,,,,,
    klu ngk mau di gangu
    JANGAN PUNYA KOMPUTER!!!!!!!!!!!!!!! 😆 😆 😆 😆 😆 😆 😆 😆 😆 :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: 😈 😈
    Ha,, HA,, Ha,, Ha,,, HA,,,,

  • haris wrote on 18 January, 2010, 17:10

    eh bedanya int() sama intval() apa ya…..
    heheehehe…
    newbie gan…
    😀

  • ryanaby wrote on 8 March, 2010, 14:46

    wew…
    udah nemu cara yang lumayan… =))

    $idx=$_GET[‘id’];
    if(!is_numeric($idx)){
    $idx=0; //terserah diisi angka brapa,..kalau bisa kasih jah berita/konten favorit
    }

  • maoel wrote on 18 November, 2010, 9:55

    bagus juga tuh tutorialya

  • Reky wrote on 4 October, 2011, 6:25

    Useful share, 🙂

Write a Comment

Gravatars are small images that can show your personality. You can get your gravatar for free today!

Isi dan komentar tanggung jawab masing masing pengirim. Gambar yang ditampilkan dalam artikel tidak selamanya mencerminkan isi artikel atau produk .Hanya dipakai sebagai Ilustrasi berita.





Web Security Made Easy         > | © 2009   > Hosted by : Web Developer Jogja | WebQilat |
2019 | kabarIT.com. All rights reserved.
KabarIT merupakan techno blog yang menyajikan informasi seputar IT yang hangat dan menarik. Isi dan komentar tanggung jawab masing-masing komentar. Selengkapnya...