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”;
}
?>










