2011-09-08 9 views
15

यह प्रश्न विभिन्न स्थानों पर कुछ बार देखा गया है, लेकिन मुझे एक निश्चित और स्पष्ट उत्तर नहीं मिला है। अधिकांश समाधानों में लोगों को php.ini फ़ाइल (जो मैंने किया) पर कोर कोट्स को अक्षम करने या कोर WP फ़ाइलों को संशोधित करने के लिए कह रहे हैं।

वैसे भी, सवाल यह है: यह हर बार क्यों होता है जब मैं $ wpdb-> डालने या $ wpdb-> किसी भी एकल उद्धरण से पहले स्लैश अपडेट हो जाता है। तो उदाहरण के लिए: एक ही समस्या

$id = $_POST['id']; 
$title = $_POST['title']; 
$message = $_POST['message']; 

$wpdb->update('table_name', array('id'=>$id, 'title'=>$title, 'message'=>$message), array('id'=>$id)) 

गया था:

मैं स्ट्रॉबेरी खाया गया हैमैं \ 'स्ट्रॉबेरी

यहाँ है मैं प्रयोग किया जाता एक नमूना कोड खाया गया है हो जाता है यहां: Wordpress Database Output - Remove SQL Injection Escapes लेकिन इसे कभी भी "अक्षम जादू उद्धरण" से अलग नहीं किया गया था

+0

क्या आप वाकई मैजिक कोट निष्क्रिय कर दिया है कर रहे हैं? आप 'phpinfo() में यह जांच की है' – zerkms

+0

हां, यहां phpinfo से अंश है -> magic_quotes_gpc \t \t बंद बंद magic_quotes_runtime \t बंद magic_quotes_sybase \t \t बंद \t बंद –

+0

बंद कर रहे हैं में उन अतिरिक्त/लापता उद्धरण ' अद्यतन() 'कॉल टाइपो या वास्तव में अपने कोड में? – Phil

उत्तर

39

इस पर दिन बिताने के बाद, उत्तर निम्नानुसार है:

वर्डप्रेस $ _POST घोषणा में भाग गया, वास्तविक प्रविष्टि पर नहीं, जो विचित्र है।

$id = stripslashes_deep($_POST['id']); //added stripslashes_deep which removes WP escaping. 
$title = stripslashes_deep($_POST['title']); 
$message = stripslashes_deep($_POST['message']); 

$wpdb->update('table_name', array('id'=>$id, 'title'=>$title, 'message'=>$message), array('id'=>$id)); 

ऐसा करने का अर्थ यह होगा कि WP किसी भी उद्धरण से पहले स्लेश नहीं जोड़ पाएगा।

+0

में स्लेश के साथ डेटा संग्रहीत कर रहा है बहुत आसान! धन्यवाद! – geilt

+3

जीवन बचतकर्ता। धन्यवाद @ जे ली। अगर यह यहां नहीं था तो यह निश्चित रूप से डीबग करने के लिए कुछ समय लेगा। – Nick

+0

यह ठीक काम करता है .... धन्यवाद दोस्त – kuldipem

5

थोड़ा और जानकारी - वर्डप्रेस ने लोगों को यह सोचने का फैसला किया कि वे 'जादू उद्धरण' जोड़कर पागल हो रहे हैं, भले ही आपने इसे संस्करण 3.0 में शुरू कर दिया हो। $ _REQUEST, $ _GET, $ _POST, $ _COOKIE, या $ _SERVER तक कोई भी पहुंच प्रभावित होगी। wp-includes/load.php देखें।

/* Add magic quotes to $_GET, $_POST, $_COOKIE, and $_SERVER. 
* @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); 
} 
2

वर्डप्रेस php जादू की स्थापना उद्धरण और get_magic_quotes_gpc() का मूल्य में बनाया गया है और हमेशा मैजिक कोट जोड़ देगा ( के बाद भी सुविधा 5.4 में पीएचपी से निकाल दिया जाता) पर ध्यान नहीं देता।

आप इस का उपयोग कर सकते बजाय

//replace $_POST with $POST 
$POST  = array_map('stripslashes_deep', $_POST); 
$wpdb->insert( 
     'wp_mytable', 
     array( 
      'field_name'  => $POST['field_name'], 
      'type'    => $POST['type'], 
      'values'   => serialize($POST['values']), 
      'unanswered_link' => $POST['unanswered_link'], 
     ), 
     array( 
      '%s','%s','%s','%s' 
     ) 
    ); 

वर्डप्रेस करता है क्योंकि बहुत अधिक कोर और प्लगइन कोड लिए आ गया है उद्धरण वहाँ जा रहा है, तो सुपर वैश्विक पर उद्धरण अक्षम करने पर भरोसा करते हैं (जैसा कि "मूल उदाहरण" और "अच्छा कोडिंग अभ्यास" उपरोक्त उदाहरणों में किया गया है) सुरक्षा छेद का कारण बन सकता है।

http://codex.wordpress.org/Function_Reference/stripslashes_deep

संबंधित मुद्दे