Fungsi PHP mysql_real_escape_string()
Definisi dan penggunaan
Fungsi mysql_real_escape_string() mengungkap karakter khusus di dalam string yang digunakan dalam pernyataan SQL.
Berikut karakter yang terpengaruh:
- \x00
- \n
- \r
- \
- '
- "
- \x1a
Jika berhasil, fungsi ini mengembalikan string yang diungkap. Jika gagal, mengembalikan false.
Sintaksis
mysql_real_escape_string(string,connection)
Parameter | Keterangan |
---|---|
string | Wajib. Tentukan string yang harus diungkap. |
connection | Pilihan. Tentukan koneksi MySQL. Jika tidak ditentukan, maka menggunakan koneksi terakhir. |
Keterangan
Fungsi ini akan string dari karakter khusus yang diungkap, dan memperhatikan set karakter yang terhubung saat ini, sehingga dapat digunakan dengan aman mysql_query().
Peringatan dan komentar
Peringatan:Dapat digunakan fungsi ini untuk mencegah serangan database.
Contoh
Contoh 1
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } // Kode untuk mendapatkan nama pengguna dan sandi // Eksisasi nama pengguna dan sandi, untuk digunakan dalam SQL $user = mysql_real_escape_string($user); $pwd = mysql_real_escape_string($pwd); $sql = "SELECT * FROM users WHERE user='" . $user . "' AND password='" . $pwd . "'" // Lebih banyak kode mysql_close($con); ?>
Contoh 2
Serangan database. Contoh ini menunjukkan apa yang akan terjadi jika kita tidak menerapkan fungsi mysql_real_escape_string() terhadap nama pengguna dan sandi pengguna:
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } $sql = "SELECT * FROM users WHERE user='{$_POST['user']}' AND password='{$_POST['pwd']}'" mysql_query($sql); // Tidak memeriksa nama pengguna dan sandi // Bisa berisi apa saja yang diinput pengguna, seperti: $_POST['user'] = 'john'; $_POST['pwd'] = '" OR ''='" // Beberapa kode... mysql_close($con); ?>
Lalu query SQL akan menjadi seperti ini:
SELECT * FROM users WHERE user='john' AND password='' OR ''=''
Artinya, setiap pengguna tidak perlu memasukkan sandi yang sah untuk masuk.
Contoh 3
Tindakan yang benar untuk mencegah serangan database:
<?php function check_input($value) { // Buang garis bawah if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // Jika bukan angka, tambahkan tanda kutip if (!is_numeric($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; } $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } // Melakukan SQL yang aman $user = check_input($_POST['user']); $pwd = check_input($_POST['pwd']); $sql = "SELECT * FROM users WHERE user=$user AND password=$pwd"; mysql_query($sql); mysql_close($con); ?>