Wordpress ve Sihirli Alıntılar


12

Bazı Wordpress eklentileri yazıyorum ve Wordpress'in POST ve GET verilerine sihirli alıntılar koymada sorun yaşıyorum.

Özellikle, wp-settings.php dosyasında (muhtemelen her yanıtta) çağrılan \ wp-include \ load.php dosyasındaki "wp_magic_quotes" işlevi. Bu işlev, PHP ayarlarında sihirli tırnak işaretlerini kapatsam bile verilere sihirli tırnak işaretleri ekler.

/**
 * 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 );
}

Wp-settings.php içindeki wp_magic_quotes () çağrısını yorumlamak benim için güvenli mi? Yani, normal Wordpress kodunu olumsuz yönde etkileyecek ve / veya bazı istismar vektörlerini açacak mı? Öyleyse, WP kodunu değiştirmenin yanı sıra bunu yapmanın başka bir yolu var mı (bu yüzden her güncelleme olduğunda bununla uğraşmak zorunda değilim)?


Biri bana fonksiyonun nerede / ne zaman wp_magic_quotes()yürütüldüğünü söyleyebilir mi? Ben wp-core idameyi bulamadım.
T.Todua


Bu sorun, 8 yıldan fazla bir süre sonra 2019'da hala var (örn. PHP 7.1.33 (2019-10-23) ve WordPress 5.2.4 (2019-10-14) ile.
Peter Mortensen

Yanıtlar:


8

Basitçe WP belirsiz durum (sunucu yapılandırmasında sihirli tırnak olabilir veya olmayabilir) belirleme (sihirli tırnak her zaman mevcuttur ve sunucu yapılandırması önemli değildir).

Tüm WP çekirdeği için bununla uğraşmak yerine, ihtiyacınız olduğunda, kodunuzdaki eğik çizgileri basitçe kendi değişkenleriniz üzerinde şeritlemek çok daha mantıklıdır.


7
Bu delilik, eğer yapabilirsem. Sihirli alıntılar herhangi bir aklı başında kodlayıcı tarafından kötü kabul edilir ve bu Wordpress tarafından gerçekten sorumsuz bir seçimdir. Şaşırdığım için değil.
o0 '.

5
@Lohoris, WP'nin sadece burada ve şimdi var olmadığını unutmayın. Uzun yıllar var. Sihirli alıntılar doğal olarak kötü fikir olsaydı, ilk etapta var olamazlardı. Zaman değişirken ve şu anda ne kadar kötü bir fikir olduğunu çığlık atmak kolay olsa da - kod tabanındaki mevcut davranışı değiştirmek büyük güvenlik ve geriye dönük uyumluluk sonuçlarıyla birlikte geliyor.
Rarst

3

WordPress'teki mevcut davranış, tüm PHP sistemlerinin ve yapılandırmalarının uyumluluğuna dayanan en iyi uygulamadır. WordPress, her zaman $ _GET, $ _POST, $ _COOKIE ve $ _SERVER öğelerinin kesilmesini normalleştirdi ve bunu yapmaya devam etmesini bekliyor.

Bu nedenle, bir POST veya bir GET parametresi çıkarmak için şunu yazmalıyız:

$value = stripslashes_deep($_POST['name']); veya

$value = stripslashes_deep($_GET['name']);


0

Stack Overflow'daki benzer bir soruda bu süper küresel dizilerle başa çıkmak için bir çözüm yazdım.

Her süper küresel için tek bir "erişim yöntemi" (get / set) yazmayı, kesik kesmeyi ve saydam sıyırmayı içerir. Yani, örneğin:

echo _get('username');    // echo stripslashes_deep($_GET['username']);
_cookie('name', 'value'); // $_COOKIE['name'] = addslashes_deep('value');

Bu şekilde süper küresellerle daha fazla uğraşmaktan kaçınabilir ve herhangi bir yan etkisi olmadan kodunuz için "yerel olarak" çalışacak bir çözümün tadını çıkarabilirsiniz. Benim için nihai çözüm buydu.


-3

Son zamanlarda bu problemi yaşadım ve sonunda anladım. Temelde WordPress'teki sihirli alıntılarda neredeyse her web sitesini araştırıyordum ve hiçbiri yardımcı olmadı.

Bunu düzeltmek için:

  1. Wp-settings.php dosyasına gidin

  2. Wp_magic_quotes () için arama yapın;

  3. Sadece yorum yap ve şimdi çalışmalı

Bu işe yarar çünkü koddan önce bakarsanız şunları görürsünüz:

// Disable magic quotes at runtime. Magic quotes are added using wpdb later in //wp-settings.php.

@ini_set( 'magic_quotes_runtime', 0 );
@ini_set( 'magic_quotes_sybase',  0 );

Daha sonra wpdb kullanıldığında eklenen Magic alıntıları çoğu insanı karıştırıyor ve wp_magic_quotes () oluyor. Sadece bunu yorumlamak sihirli tırnak sizi berbat önleyecektir.


6
Kötü fikir: bir sonraki yükseltmeden sonra bu değişiklik kaybolur.
fuxia

Bu kötü bir fikir ™ ​​olmasına rağmen, içeriği kaydederken Magento sorunları vermeden WordPress ve Magento'yu aynı anda çalıştırdığımı bulduğum tek çözüm.
forsvunnet

1
Bu aynı zamanda kötü bir fikirdir çünkü birçok eklenti kötü yazılmıştır ve sitenizin SQL enjeksiyon saldırılarına karşı savunmasız hale gelebilmesi için SQL'den doğru şekilde çıkmaz. Ve $ _GET / $ _ POST üzerinde stripslashes / stripslashes_deep çalıştırarak doğru şeyi yapan tüm eklentiler ters eğik çizgileri kaldırarak kullanıcı girişini bozar.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.