ANTI SQL-INJECTION DI PHP
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”;
}
?>











wew.. makasih atas infonya.. ridu juga lagi dikit2 belajar php!
Comment by ridu — February 8, 2008 @ 3:40 pm
wah, jago PHP neh mbak eka..:)
Comment by tehaha — February 8, 2008 @ 3:49 pm
@ridu: semoga berguna yaa…
@tehaha: kayaknya ada yg lebih jago deh…
Comment by ekaqren — February 8, 2008 @ 3:57 pm
Asik..
Belajar juga ah….
]
[situs favorit buat belajar: achmatim.net
Comment by Labyrinth — February 9, 2008 @ 11:05 am
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
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
@aie:wadooh.. kalo esia kyknya beda deh..
@away: iya way… masih banyak yg harus dipelajari..
Comment by ekaqren — February 11, 2008 @ 12:02 pm
Tambahan nich :
Top 7 PHP Security Blunders
http://www.sitepoint.com/article/php-security-blunders
Comment by achmatim — February 12, 2008 @ 8:27 am
@achmatim: thanks nih bang lichin
Comment by ekaqren — February 12, 2008 @ 9:22 am
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
@Dolly: trims banget nih infonya, mau kulihat n ku pelajari aaah…
Comment by ekaqren — February 15, 2008 @ 9:18 am
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