Saya telah menulis beberapa plugin Wordpress, dan saya mengalami masalah dengan Wordpress memberikan kutipan ajaib pada data POST dan GET.
Secara khusus, fungsi "wp_magic_quotes" di \ wp-include \ load.php, yang disebut (mungkin pada setiap respons) di wp-settings.php. Fungsi ini menambahkan kutipan ajaib ke data bahkan jika saya mematikan kutipan ajaib di pengaturan PHP.
/**
* Add magic quotes to $_GET, $_POST, $_COOKIE, and $_SERVER.
*
* Also forces $_REQUEST to be $_GET + $_POST. If $_SERVER, $_COOKIE,
* or $_ENV are needed, use those superglobals directly.
*
* @access private
* @since 3.0.0
*/
function wp_magic_quotes() {
// If already slashed, strip.
if ( get_magic_quotes_gpc() ) {
$_GET = stripslashes_deep( $_GET );
$_POST = stripslashes_deep( $_POST );
$_COOKIE = stripslashes_deep( $_COOKIE );
}
// Escape with wpdb.
$_GET = add_magic_quotes( $_GET );
$_POST = add_magic_quotes( $_POST );
$_COOKIE = add_magic_quotes( $_COOKIE );
$_SERVER = add_magic_quotes( $_SERVER );
// Force REQUEST to be GET + POST.
$_REQUEST = array_merge( $_GET, $_POST );
}
Apakah aman bagi saya untuk hanya berkomentar panggilan wp_magic_quotes () di wp-settings.php? Yaitu, apakah akan berdampak negatif pada kode Wordpress normal dan / atau membuka beberapa vektor eksploitasi? Jika demikian, apakah ada cara lain untuk melakukannya selain memodifikasi kode WP (jadi saya tidak harus berurusan dengan ini setiap kali ada pembaruan)?
wp_magic_quotes()
dijalankan? Saya tidak bisa menemukan eksekusi di wp-core.Jawaban:
Sederhananya WP mengubah situasi yang tidak ditentukan (tanda kutip sihir mungkin atau mungkin tidak diaktifkan dalam konfigurasi server) menjadi determinate (kutipan ajaib selalu ada dan konfigurasi server tidak masalah).
Daripada mengacaukan ini untuk semua inti WP, lebih masuk akal untuk menghapus garis miring pada kode Anda pada variabel Anda sendiri, saat Anda membutuhkannya.
sumber
Perilaku saat ini di WordPress adalah praktik terbaik berdasarkan kompatibilitas semua sistem dan konfigurasi PHP. WordPress selalu menormalkan $ _GET, $ _POST, $ _COOKIE, dan $ _SERVER untuk dipotong, dan berharap akan terus melakukannya.
Jadi, untuk mengekstrak parameter POST atau GET kita harus menulis:
$value = stripslashes_deep($_POST['name']);
atausumber
Saya pikir tautan berikut mungkin membantu:
sumber
Saya menulis solusi untuk berurusan dengan array superglobal ini dalam pertanyaan serupa di Stack Overflow.
Ini terdiri dari menulis satu "metode accessor" tunggal (dapatkan / set) untuk setiap superglobal, memotong dan menelanjangi secara transparan. Jadi, Anda akan menggunakan, misalnya:
Dengan cara ini Anda dapat menahan diri dari bermain-main lebih jauh dengan superglobals dan menikmati solusi yang akan bekerja "secara lokal" untuk kode Anda, tanpa efek samping. Bagi saya, itu adalah solusi utama.
sumber
Baru-baru ini saya memiliki masalah ini, dan akhirnya saya menemukan jawabannya. Saya pada dasarnya mencari hampir setiap situs web tentang kutipan sihir di WordPress dan tidak ada yang membantu.
Ini cara memperbaikinya:
Pergilah ke wp-settings.php Anda
Cari wp_magic_quotes ();
Komentari saja dan itu akan berfungsi sekarang
Ini berfungsi karena jika Anda melihat sebelum kode itu Anda akan melihat:
Kutipan ajaib yang ditambahkan kemudian menggunakan wpdb adalah apa yang mengacaukan kebanyakan orang, dan kebetulan itu adalah wp_magic_quotes (). Mengomentari saja akan mencegah kutipan sihir mengacaukan Anda.
sumber