Bersahabat Dengan Single Quotes
Thursday, June 14th, 2007Jika tidak diescape, Single Quotes (tanda kutip satu) yang dikirim melalui form pada aplikasi web dapat menimbulkan masalah yang besar. Masalah yang ditimbulkannya bermacam - macam, dari SQL Injection sampai gagalnya data di insert ke database.
Dari PHP sendiri sebenarnya sudah ada setingan untuk mengescape single quotes, yaitu dengan menset magic_quotes_gpc menjadi On di php.ini. Tetapi kita tidak bisa mengandalkan hal ini, karena setingan server web hosting belum tentu sama dengan setingan di PC tempat anda mendevelop aplikasi tersebut. Dan anda tidak mempunyai akses untuk merubah setingan php.ini di server web hosting, kecuali server tersebut milik anda.
Cara lain yang sering digunakan adalah dengan mengescape single quotes secara manual dengan fungsi addslashes(). Sebenarnya cara ini kurang bijaksana dalam hal mengescape single quotes. Jika magic_quotes_gpc diaktifkan di server tersebut, maka single quotes ini akan otomatis diescape sehingga menghasilkan karakter berikut \’ . Jika kita menambahkan lagi addslashes() maka akan menghasilkan karakter \\\’ , karena yang diescape bukan hanya single quotes tapi backslash juga ikut di escape.
Jika anda pernah melihat karakter \’ (\’ adalah display dari karakter \\\’) pada suatu situs, maka hal diatas adalah penyebabnya.
Saya mempunyai cara tersendiri untuk mengatasi hal ini, yaitu dengan membuat satu fungsi yang melakukan pengecekan terlebih dahulu apakah magic_quotes_gpc diaktifkan atau tidak dengan menggunakan fungsi get_magic_quotes_gpc(). Jika magic_quotes_gpc diaktifkan maka single quotes tidak perlu di escape secara manual. Jika tidak aktif maka escape single quotes dengan fungsi addslashes().
Berikut ini contoh scriptnya :
function magic_quotes_gpc_on($string) { return (get_magic_quotes_gpc()) ? $string : addslashes($string) ; }
// Contoh penggunaan
$nama = isset($_POST[’nama’]) ? magic_quotes_gpc_on($_POST[’nama’]) : ‘’ ;
Sangat simpel kan? Apakah anda mempunyai cara yang lain dalam mengatasi single quotes ini?

