Kutipan ajaib adalah pertanyaan umum bagi PHPer. Saya tidak sengaja melihat artikel hari ini, dikombinasikan dengan Manual PHP dan balasannya, saya akan membuat ringkasan sederhana di sini.
Singkatnya, Magic quotes akan secara otomatis keluar dari data yang dimasukkan saat dihidupkan. Diantaranya, semua tanda kutip tunggal ('), tanda kutip ganda ("), garis miring terbalik, dan karakter NULL akan di-escape (garis miring terbalik ditambahkan). Faktanya, operasi ini pada dasarnya memanggil fungsi garis miring terbalik.
Mengapa menggunakan tanda kutip Ajaib
Nyaman dan cepat
Perancang PHP membayangkan pemrograman yang cepat dan nyaman sejak awal. Misalnya, saat memasukkan ke dalam database, Kutipan ajaib akan secara otomatis keluar dari data, yang sangat memudahkan.
Bagus untuk pemula
Kutipan ajaib, sampai batas tertentu, dapat membantu pemula menghindari risiko keamanan skrip. Misalnya, dalam kode tanpa tindakan perlindungan apa pun, mengaktifkan tanda kutip Ajaib akan mengurangi banyak risiko, seperti masalah injeksi. Tentu saja, menggunakan metode ini saja tidak dapat sepenuhnya mencegah masalah keamanan tersebut.
"Saya tidak punya izin untuk menutupnya"
Tentu saja Anda mungkin menyadari masalah ini, namun ruang host tidak sepenuhnya berada di bawah kendali Anda.
Mengapa tidak menggunakan kutipan Ajaib
Portabilitas Diaktifkan atau tidaknya fitur ini akan memengaruhi portabilitas skrip karena memengaruhi operasi kami selanjutnya dalam memfilter data.
Masalah Kinerja Semua data eksternal akan di-escape sebelum diambil, yang tentunya akan meningkatkan biaya runtime (dan tidak semua data perlu di-escape).
Menyebabkan Kebingungan Seperti disebutkan di atas, tidak semua data perlu di-escape. Salah satu situasi yang mungkin muncul adalah ketika Anda menggunakan fungsi striplashes secara "gila" untuk mendapatkan data yang tidak lolos.
PHP6 tidak lagi didukung
Para perancang PHP rupanya menyadari "kesalahan" mereka, sehingga mereka tidak lagi menggunakannya di PHP6.
Cara menonaktifkan kutipan Ajaib
Menurut pendapat saya, yang paling dapat diandalkan adalah menggunakan file konfigurasi php.ini untuk menonaktifkan kutipan Ajaib secara global. Lihat kode di bawah ini
; Kutipan ajaib;; Kutipan ajaib untuk data GET/POST/Cookie.magic_quotes_gpc = Nonaktif; Kutipan ajaib untuk data yang dihasilkan waktu proses, misalnya data dari SQL, dari exec(), dll.magic_quotes_runtime = Nonaktif; Kutipan ajaib gaya Sybase (escape ' dengan '' alih-alih ').magic_quotes_sybase = Nonaktif Namun, host online mungkin tidak mengizinkan Anda mengubah file php.ini, jadi Anda dapat menggunakan file .htaccess untuk menonaktifkannya dan menambahkan kode berikut
php_flag magic_quotes_gpc Off Di atas bisa Untuk kode porting, data harus tetap konsisten terlepas dari apakah magic_quotes dinonaktifkan. Maka kode berikut dapat membantu Anda
<?phpif (get_magic_quotes_gpc()) {function striplashes_deep($value) {$value = is_array($value) ?array_map('stripslashes_deep', $value) :stripslashes($value);return $ nilai;}$_GET = array_map('stripslashes_deep', $_GET);$_POST = array_map('stripslashes_deep', $_POST);$_COOKIE = array_map('stripslashes_deep', $_COOKIE);$_REQUEST = array_map('stripslashes_deep' , $_PERMINTAAN);}