Wordpress และคำพูดมายากล


12

ฉันกำลังเขียนปลั๊กอิน Wordpress และฉันมีปัญหากับ Wordpress ที่ใส่เครื่องหมายคำพูดเวทมนต์บนข้อมูล POST และ GET

โดยเฉพาะอย่างยิ่งฟังก์ชั่น "wp_magic_quotes" ใน \ wp-include \ load.php ซึ่งเรียกว่า (สมมุติว่าตอบกลับทุกครั้ง) ใน wp-settings.php ฟังก์ชั่นนี้จะเพิ่มราคามายากลลงในข้อมูลแม้ว่าฉันจะปิดราคามายากลในการตั้งค่า 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 );
}

ฉันปลอดภัยหรือไม่ที่จะแสดงความคิดเห็นกับการโทร wp_magic_quotes () ใน wp-settings.php นั่นคือมันจะส่งผลเสียต่อรหัส Wordpress ปกติและ / หรือเปิดการแสวงหาผลประโยชน์จากเวกเตอร์หรือไม่? ถ้าเป็นเช่นนั้นมีวิธีอื่นที่จะทำนอกเหนือจากการแก้ไขรหัส WP (ดังนั้นฉันไม่ต้องจัดการกับเรื่องนี้ทุกครั้งที่มีการปรับปรุง)


ใครสามารถบอกฉันที่ / เมื่อwp_magic_quotes()มีการดำเนินการฟังก์ชั่น ฉันหาการประมวลผลใน wp-core ไม่พบ
T.Todua


ปัญหานี้ยังคงมีอยู่ในปี 2019 มากกว่า 8 ปีต่อมา (เช่นกับ PHP 7.1.33 (2019-10-23) และ WordPress 5.2.4 (2019-10-14))
ปีเตอร์มอร์เทนเซ่น

คำตอบ:


8

เพียงแค่ทำให้ WP เปลี่ยนสถานการณ์ที่ไม่ทราบแน่ชัด (อัญประกาศเวทมนต์อาจหรืออาจไม่ได้เปิดใช้งานในการกำหนดค่าเซิร์ฟเวอร์) ให้กลายเป็นเด็ดขาด (อัญประกาศเวทมนต์อยู่เสมอ

แทนที่จะยุ่งกับสิ่งนี้สำหรับคอร์ WP ทั้งหมดมันเหมาะสมกว่าที่จะตัดสแลชในโค้ดของคุณกับตัวแปรของคุณเองเมื่อคุณต้องการ


7
นี่มันบ้าถ้าฉันทำได้ คำพูดเวทมนต์ถือว่าเป็นสิ่งเลวร้ายโดย coder ที่มีสติใด ๆ และนี่เป็นทางเลือกที่ไม่มีความรับผิดชอบโดย Wordpress ไม่ใช่ว่าฉันประหลาดใจ
o0 '

5
@Lohoris ทราบว่า WP ไม่ได้อยู่ที่นี่และตอนนี้ มันมีอยู่หลายปีแล้ว หากคำพูดเวทมนต์มีความคิดที่ไม่ดีโดยเนื้อแท้ ในขณะที่เวลาเปลี่ยนไปและเป็นเรื่องง่ายที่จะกรีดร้องความคิดที่ไม่ดีตอนนี้ - การเปลี่ยนแปลงพฤติกรรมที่มีอยู่ในฐานรหัสมาพร้อมกับความปลอดภัยขนาดใหญ่และความหมายของความเข้ากันได้ย้อนหลัง
Rarst

3

พฤติกรรมปัจจุบันใน WordPress เป็นแนวปฏิบัติที่ดีที่สุดโดยพิจารณาจากความเข้ากันได้ของระบบ PHP และการกำหนดค่าทั้งหมด WordPress ใช้ $ _GET, $ _POST, $ _COOKIE และ $ _SERVER ปกติเพื่อเฉือนและคาดว่าจะยังคงทำเช่นนั้นต่อไป

ดังนั้นเพื่อแยกพารามิเตอร์ POST หรือ GET เราต้องเขียน:

$value = stripslashes_deep($_POST['name']); หรือ

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


0

ฉันเขียนวิธีแก้ปัญหาการจัดการกับอาร์เรย์ superglobal เหล่านี้ในคำถามที่คล้ายกันใน Stack Overflow

มันประกอบด้วยการเขียนหนึ่งเดียว "วิธีการเข้าถึง" (รับ / ชุด) สำหรับแต่ละ superglobal อย่างเจ็บแสบและลอกอย่างโปร่งใส ตัวอย่างเช่นคุณจะใช้:

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

วิธีนี้คุณสามารถหลีกเลี่ยงการเลอะเทอะกับ superglobals มากขึ้นและเพลิดเพลินไปกับวิธีแก้ปัญหาที่จะทำงาน "ในพื้นที่" สำหรับโค้ดของคุณโดยไม่มีผลข้างเคียงใด ๆ สำหรับฉันมันเป็นทางออกที่ดีที่สุด


-3

ฉันเพิ่งมีปัญหานี้และในที่สุดฉันก็คิดออก โดยทั่วไปแล้วฉันค้นหาเกือบทุกเว็บไซต์ด้วยคำพูดเวทมนต์บน WordPress และไม่มีใครช่วยอะไร

นี่คือวิธีแก้ไข:

  1. ไปที่ wp-settings.php ของคุณ

  2. ค้นหา wp_magic_quotes ();

  3. เพียงแสดงความคิดเห็นออกมาและควรจะใช้งานได้ในขณะนี้

สิ่งนี้ได้ผลเพราะถ้าคุณดูรหัสนั้นคุณจะเห็น:

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

คำพูดวิเศษที่เพิ่มเข้ามาในภายหลังโดยใช้ wpdb คือสิ่งที่ทำให้คนส่วนใหญ่สับสนและมันเกิดขึ้นเป็น wp_magic_quotes () เพียงแค่แสดงความคิดเห็นว่าการออกจะป้องกันไม่ให้คำพูดมายากลเลอะคุณ


6
แนวคิดที่ไม่ดี: หลังจากการอัปเกรดครั้งถัดไปการเปลี่ยนแปลงนี้จะสูญหายไป
fuxia

Altough นี่เป็นความคิดที่ไม่ดี™มันเป็นทางออกเดียวที่ฉันพบว่าใช้งาน WordPress และ Magento พร้อมกันโดยไม่ต้องให้ปัญหาคุณภาพเยี่ยมเมื่อบันทึกเนื้อหา
forsvunnet

1
นี่เป็นความคิดที่ไม่ดีเช่นกันเนื่องจากมีปลั๊กอินจำนวนมากที่เขียนไม่ดีและไม่สามารถหลีกเลี่ยง SQL ได้อย่างถูกต้องดังนั้นเว็บไซต์ของคุณอาจเสี่ยงต่อการถูกโจมตีจากการฉีด SQL และปลั๊กอินใด ๆ ที่ทำสิ่งที่ถูกต้องโดยการเรียกใช้ striplashes / stripslashes_deep บน $ _GET / $ _ POST จะทำให้อินพุตของผู้ใช้เสียหายโดยการลบแบ็กสแลช
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.