QrEn’S bLoG

ANTI SQL-INJECTION DI PHP

Kategori: Komputer - ekaqren @ 2:53 pm

February 8, 2008

Beberapa hari lagi liat2 tentang SQL Injection nih…
ada salah satu method yang disediakan php… berikut penjelasannya tentang fungsi tersebut yang aku kutip dari http://www.itn.ac.id/webbaru/news/lihat.php?hal=26&id=14

Terkadang kita menganggap bahwa mencegah Tag-Tag HTML sudah cukup untuk mencegah SQL-Injection. Apalagi kita merunut perintah - perintah pencegahan seperti :

* ereg_replace,
* mysql_real_escape_string,
* htmlentities,
* addslashes,
* dan htmlspecialchars.

Ternyata tetap saja ada yang lolos, khususnya tanda “=” (Sama Dengan) dan “;” (Petik dua). Benarkan?. Mari kita lihat bersama, sebenarnya SQL-Injection suka sekali dengan dua alur, yakni jalur form LOGIN dan QUERY yang ada pada kotak address.

Jalur Form LOGIN

Dasar dari form login ini adalah validasi, dimana bila username dan password sama dengan yang ada dalam database, maka akses login akan diperoleh. Sudah menjadi aturan umum bahwa username dan password dapat berupa huruf dan angka. Tapi tidak untuk karakter khusus. SQL Injection biasanya memberikan variasi tanda mulai dari “=” (Sama dengan), “%” (Persen), “;” (Titik Koma), “\’” (Petik satu), “”" (Petik Dua) dan lain sebagainya. Berarti perlu adanya validasi anti karakter khusus.

Jalur QUERY

Jalur ini juga cukup rawan, cukup dengan memberikan tanda “;” (Titik Koma) kemudian perintah SQL dimasukkan, maka data yang ada dalam database akan berubah. Misal :

http://localhost/admin/bukutamu.php?kd=12hg356;. . . (perintah SQL dengan WHERE kd=12hg356)

Lihat. Untuk melakukan aksi tersebut pasti akan diperlukan tanda petik dua kan?. Sudah saatnya kita mencegahnya.

Kenali Solusinya

Untuk username dan password harus berciri khas huruf dan angka saja serta tanpa ada spasi. Sedangkan untuk mencegah masalah QUERY, diupayakan selain nilai yang diberikan (misal kd=12hg356), alangkah baiknya semua kode - kode tersebut juga harus huruf, berangka dan tanpa spasi. Caranya adalah dengan menambahkan !ctype_alnum untuk mengecek nilai - nilai tersebut supaya tidak boleh selain angka dan huruf. Misalnya :

//Mengambil nilai - nilai dari form
$username = trim($_POST[”username”]);
$password = trim($_POST[”password”]);

//apakah bernilai huruf dan angka.
if (!ctype_alnum($username) OR !ctype_alnum($password))
{
echo “Dilarang Macam - Macam”;
}
else
{
echo “Login Berhasil”;
}
?>


12 Komentar »

  1. Gravatar Image

    wew.. makasih atas infonya.. ridu juga lagi dikit2 belajar php! :mrgreen:

    Comment by ridu — February 8, 2008 @ 3:40 pm

  2. Gravatar Image

    wah, jago PHP neh mbak eka..:)

    Comment by tehaha — February 8, 2008 @ 3:49 pm

  3. Gravatar Image

    @ridu: semoga berguna yaa… :)
    @tehaha: kayaknya ada yg lebih jago deh…

    Comment by ekaqren — February 8, 2008 @ 3:57 pm

  4. Gravatar Image

    Asik..

    Belajar juga ah….
    [situs favorit buat belajar: achmatim.net :) ]

    Comment by Labyrinth — February 9, 2008 @ 11:05 am

  5. Gravatar Image

    wahh..Mba Eka aie juga punya tuch..esia yang nomornya di-inject..tu sama ga?hehehe…

    Jadi pengen tau nich cara kerjanya gimana??

    Comment by aie — February 11, 2008 @ 10:16 am

  6. Gravatar Image

    sql injection emang berbahaya. Makanya kalo bikin web dicek dulu baru dipublish. Kan gawat kalo websitenya dihack

    Comment by away — February 11, 2008 @ 10:42 am

  7. Gravatar Image

    @aie:wadooh.. kalo esia kyknya beda deh.. :P
    @away: iya way… masih banyak yg harus dipelajari.. :)

    Comment by ekaqren — February 11, 2008 @ 12:02 pm

  8. Gravatar Image

    Tambahan nich :

    Top 7 PHP Security Blunders
    http://www.sitepoint.com/article/php-security-blunders

    Comment by achmatim — February 12, 2008 @ 8:27 am

  9. Gravatar Image

    @achmatim: thanks nih bang lichin :)

    Comment by ekaqren — February 12, 2008 @ 9:22 am

  10. Gravatar Image

    Sejauh ini mysql_real_escape_string() cukup efektif melawan SQL Injection. Lihat contoh penggunaannya disini http://id.php.net/mysql_real_escape_string

    Dari contoh penggunaan tersebut, data yang masuk sudah di filter berdasarkan tipe data yang diinginkan.

    Comment by Dolly Aswin Hrp — February 15, 2008 @ 9:04 am

  11. Gravatar Image

    @Dolly: trims banget nih infonya, mau kulihat n ku pelajari aaah… :)

    Comment by ekaqren — February 15, 2008 @ 9:18 am

  12. Gravatar Image

    wah…saya lagi nyari script yag tidak boleh ada spasinya pada form saya, ternyata anak BL juga yah…thanks ya….

    /hadi FTI BL 03

    Comment by hadi — April 17, 2008 @ 9:40 pm

RSS feed for comments on this post.

Leave a comment

Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>


Blog ini dipersembahkan oleh Blogsome dan dimodifikasi oleh pemiliknya