Bersahabat Dengan Single Quotes

Jika 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 :

<?php
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?

Comments

kalau aku malah kebalikannya, ndak suka wandering around dengan magic_quotes di variabel. fungsi untuk stripslashes:

function g($x) { return isset($_GET[$x])?(get_magic_quotes_gpc()?stripslashes($_GET[$x]):$_GET[$x]):''; }

function p($x) { return isset($_POST[$x])?(get_magic_quotes_gpc()?stripslashes($_POST[$x]):$_POST[$x]):''; }

function c($x) { return isset($_COOKIE[$x])?(get_magic_quotes_gpc()?stripslashes($_COOKIE[$x]):$_COOKIE[$x]):''; }

// quote sql
// usage:
// list($uname, $pwd) = q($uname, $pwd);
// $sql = "INSERT INTO users VALUES ('$uname', '$pwd')";
function q() {
$args=func_get_args(); $r=array();
foreach($args as $arg) $r[] = mysql_escape_string($arg);
return count($arg) == 1 ? $r[0] :$r;
}

alasan: biar kita tau kalau slash itu dari magic_quotes atau slash dari addslashes

Kirim Komentar

Tidak akan dipublikasikan
  • Alamat web dan email dirubah menjadi hyperlink secara otomatis
  • Tag HTML yang diizinkan: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Baris baru maupun paragraph dipisahkan secara otomatis

Informasi lebih lanjut tentang format pesan