ไฟล์ SVG ไม่ได้อัปโหลดตั้งแต่อัปเดต WP ล่าสุด


16

ฉันมีตัวอย่างในไฟล์ PHP ของฟังก์ชั่นที่อนุญาตให้ฉันอัปโหลดไฟล์ SVG ตั้งแต่อัปเกรดเป็นรุ่นล่าสุดของ WP วันนี้ฉันไม่สามารถอัปโหลด svgs อีกต่อไป ฉันยังได้ลองใช้โค้ดตัวอย่างที่สองจากเว็บไซต์ CSS และนั่นก็ไม่ได้ผลเช่นกัน

ไม่มีใครรู้ก) สิ่งที่อาจทำให้สิ่งนี้เกิดขึ้นเมื่อมีการอัพเดทครั้งล่าสุดและข) มีใครรู้บ้างเกี่ยวกับการทำงาน

นี่คือรหัสที่ฉันใช้ตามปกติ:

function svg_mime_types( $mimes ) {
   mimes['svg'] = 'image/svg+xml';
   return $mimes;}
add_filter( 'upload_mimes', 'svg_mime_types' );  

ขอบคุณมาก

พอล

คำตอบ:


16

ใน WordPress 4.7.1 มีการแนะนำการเปลี่ยนแปลงที่จะตรวจสอบประเภท mime จริงของไฟล์ที่อัพโหลด การแบ่งประเภทของการอัพโหลดไฟล์เช่น SVG หรือ DOCX มีตั๋วสำหรับปัญหานี้แล้วใน WordPress Core ซึ่งคุณสามารถอ่านเพิ่มเติมเกี่ยวกับสิ่งนี้:

ชั่วคราวแก้ปัญหาและแนะนำ (ในเวลานั้นจนกว่าปัญหานี้ได้รับการแก้ไข) เป็นปลั๊กอินต่อไปนี้:
ตรวจสอบการปิดการใช้งานจริงไมม์

หากคุณไม่ต้องการใช้ปลั๊กอินนั้นนี่คือฟังก์ชันการทำงานเดียวกัน:

add_filter( 'wp_check_filetype_and_ext', function($data, $file, $filename, $mimes) {
    global $wp_version;

    if ( '4.7.2' !== $wp_version ) {
       return $data;
    }

    $filetype = wp_check_filetype( $filename, $mimes );

    return [
        'ext'             => $filetype['ext'],
        'type'            => $filetype['type'],
        'proper_filename' => $data['proper_filename']
    ];

}, 10, 4 );

โปรดสังเกตว่า snipped นี้มีการตรวจสอบรุ่นรวมอยู่เพื่อปิดใช้งานการแก้ไขทันทีที่มีการอัปเดต WordPress

แก้ไข

เริ่มแรกปัญหาได้รับการแก้ไขใน 4.7.2 แต่เนื่องจาก4.7.2 เป็นรุ่นที่มีการรักษาความปลอดภัยอย่างเร่งด่วนการแก้ไขไม่ได้ทำให้เป็นเวอร์ชั่นนั้น ตอนนี้ควรได้รับการแก้ไขใน 4.7.3


2
วิธีแก้ปัญหาทางเลือกสำหรับการพัฒนาสภาพแวดล้อม: เพิ่มไปdefine( 'ALLOW_UNFILTERED_UPLOADS', true ); สิ่งนี้ไม่ปลอดภัยสำหรับการผลิต wp-config.php
ทิมมาโลน

1
เพียงรวบรวมข้อมูลทั้งหมดในที่เดียวนี่เป็นกระทู้ในฟอรัมที่เกี่ยวข้องด้วยเช่นกัน: wordpress.org/support/topic/wp-4-7-1-kills-svg
Tim Malone

ขอบคุณสำหรับสิ่งนี้. มันไม่ใช่สถานการณ์เร่งด่วนในขณะนี้ แต่เป็นการดีที่จะรู้ว่ามีการแก้ไข ชื่นชมมาก
Paul12_

แนะนำเอฟเฟกต์ที่หลากหลายเกินไปเว้นแต่จะมีการตรวจสอบโดยเฉพาะ'svg' === strtolower($filetype['ext']);และแนะนำการทำงานเพิ่มเติมในกรณีที่ไม่จำเป็นต้องใช้งาน (ส่วนใหญ่) หรือไฟล์ไม่ใช่ประเภท svg ...
MrMesees

4

ดูเหมือนว่าสิ่งนี้อาจเกี่ยวข้องกับตั๋วนี้https://core.trac.wordpress.org/ticket/39552ดูเหมือนว่ามีบางสิ่งที่แตกหักใน 4.7.1


อาขอบคุณมาร์ค ฉันคิดว่ามีบางอย่างผิดปกติ หวังว่ามันจะได้รับการแก้ไขในไม่ช้า
Paul12_

2

ดูเหมือนจะไม่มีใครทำงานกับสิ่งที่เป็นและนั่นก็แย่เกินไปดังนั้นนี่คือวิธีที่ฉันจัดการ ...

ประวัติ / ความเป็นมา

ฉันสร้างตัวอัปโหลด SVG ในปี 2558 ตามบทความ CSS-Tricks เพื่อดูว่าเกิดอะไรขึ้น ฉันยังมีกริดที่ทำงานเพื่อดูตัวอย่างรูปภาพและใช้การแก้ไขอื่น ๆ ปลั๊กอินอย่างง่าย (ปลั๊กอินชนิดไฟล์ IMO ควรเป็นแบบง่าย)

วิธีการแก้

มีการเปลี่ยนแปลงเล็กน้อยสำหรับ 4.7 PITA ที่แท้จริงคือสำหรับimage/ประเภท mime WP กำลังใช้ GD บนภาพ เพื่อหลีกเลี่ยงสิ่งนี้ฉันได้ตั้งค่าsvgส่วนขยายให้ใช้application/svg+xmlดังนั้น GD จะไม่ยุ่งกับไฟล์

อัปเดต:ณ 4.7.2 จุดประกายที่สว่างบางจุดก็ทำเช่นเดียวกันในบางกรณี

จากนั้นก็ผ่านเบ็ดเรา Hotwire image/svg+xmlมันกลับไป มันเป็นแบบเดียวกันกับที่ใช้ในคำตอบอื่น ๆ แต่ก่อนอื่นเราล็อกมันไว้กับเคสของเราเพื่อกำจัดเอฟเฟกต์ (มันเป็นไฟล์ SVG); เราสามารถพึ่งพาการอ่านได้$data['ext'](ควรถูกกว่าฟังก์ชั่นเพื่อรับข้อมูลไฟล์เป็นการเปรียบเทียบเพียงครั้งเดียวและการเข้าถึงอาเรย์ / แฮชหนึ่งรายการ)

ปรับปรุง:ณ 4.7.2 $data['ext']ไม่ได้ตั้งค่าเสมอดังนั้นเราตอนนี้ถ้ามันยาว <1 สารสกัด (อาจไม่ปลอดภัย) strtolower(end(explode('.', $filename)))ส่วนขยายจากชื่อไฟล์โดยใช้ เหตุผลที่ฉันต่อสู้โดยใช้ FileInfo คือการพึ่งพาส่วนขยาย PHP นั้นทึบเกินไปและไม่สามารถทำงานได้กับทุกคน (โดยเฉพาะอย่างยิ่งไม่ใช่การคอมไพล์ที่ไม่มีหรือไม่มีการเข้าถึงเพื่อเปิดใช้งานส่วนขยายหากไม่มี) ฉันต้องการบางสิ่งบางอย่างที่ทำงานแทนส่วนขยาย มันไม่ได้เป็นเรื่องของการมีข้อมูลที่ถูกต้องอีกต่อไปดังนั้นสำหรับผู้ที่เชื่อมั่นในผลลัพธ์FileInfoและการมีส่วนขยาย (ฉันเชื่อว่ามันเป็นค่าเริ่มต้นใน 5.6+) มันควรจะทำงานได้ และเนื่องจากเป็นปลั๊กอินจึงไม่ได้แก้ไขคอร์ที่คุณสามารถปิดรหัสนี้หรือยกเลิกการลงทะเบียนฮุก

https://github.com/Lewiscowles1986/WordPressSVGPlugin

ดู

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

การอนุญาตให้อัปโหลดที่ไม่มีการกรองเป็นวิธีการที่น่ากลัวเพราะอย่างที่คนอื่นบอกว่าการลิงก์ไปยังเธรดนี้ผู้คนสามารถอัปโหลดไฟล์ php ผ่านตัวอัปโหลดสื่อได้ (ไม่ดีและถ้าคุณทำได้คุณควรหยุดและคิด!)

บังคับให้ทุกไฟล์ผ่านฟังก์ชั่นใด ๆ โดยไม่มีการตรวจสอบ (แดกดันถ้าคุณมีimage/ในประเภท mime คุณไม่สามารถตรวจสอบ ext อย่างง่ายได้) สิ่งนี้มีศักยภาพในการสร้างเอฟเฟกต์ที่เข้าถึงได้กว้างขึ้นเพื่อแก้ปัญหาเฉพาะกลุ่มและแนะนำการทำงานโดยรวมให้มากขึ้น (ข้อควรระวังปลั๊กอินของฉันยังแนะนำการทำงานมากขึ้นสำหรับผู้ใช้ที่เป็นผู้ดูแลระบบ

ถ้าเราปล่อย mime เป็น application / svg + xml และเพียงแค่กรอง mime ที่ภาพจะอัพโหลด แต่ AFAIK ต้องการการแก้ไขที่จะใช้เป็นรูปภาพเด่น ฯลฯ มีงานอีกมากที่ต้องทำเพื่อให้มั่นใจถึงประสบการณ์ SVG ที่เป็นสากลดังนั้นฉันจึงเลือก เพื่อเลือกการต่อสู้อย่างระมัดระวัง

หวังว่านี่จะช่วยได้


ปัญหาหลักที่ผลักดันเรื่องทั้งหมดนี้คือความจริงที่ว่าไม่มีการกลั่นกรองก่อนที่ไฟล์ที่อัพโหลดจะถูกเผยแพร่ การพยายามเดาว่าไฟล์นั้นชั่วร้ายเพียงแค่ใช้นามสกุลไฟล์นั้นเป็นความคิดที่ไม่ดีอยู่เสมอ ในทางทฤษฎีแล้วไม่มีปัญหากับการอนุญาตให้อัพโหลดทั้งหมดโดยผู้ดูแลดังนั้นในขณะที่การแก้ไขที่แนะนำบางอย่างอาจกว้างเกินไปโดยทั่วไปในทางปฏิบัติพวกเขาอาจดีพอสำหรับคนจำนวนมาก หมายเหตุด้าน IMHO SVG เป็นภาพที่เป็น PDF มากในทางเทคนิคแล้วไม่ใช่
Mark Kaplun

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

จริง ๆ แล้วเบราว์เซอร์ทำการตรวจสอบเนื้อหาในสถานการณ์ทุกประเภทdeveloper.mozilla.org/en-US/docs/Mozilla/และพวกเขาไม่เคยดูส่วนขยาย และใช่ไม่มีใครคาดหวังว่า wordpress ณ จุดนี้จะมุ่งเน้นไปที่การรักษาความปลอดภัยที่แข็งแกร่ง;)
Mark Kaplun

สิ่งแรกบทความบล็อกหนึ่งของเบราว์เซอร์หนึ่ง! = เบราว์เซอร์ทั้งหมด ฉันรู้ว่า Chrome ให้ความสนใจกับละครใบ้ สิ่งที่สองการวิปัสสนาของไฟล์เป็นไปตามกฎ ไม่ใช่รูปแบบอิสระเนื่องจากภาษาที่หลวมแนะนำ การตรวจสอบความถูกต้องที่ครอบคลุมมากขึ้นทำให้เกิดความยืดหยุ่นในการซื้อขาย (ใช้ได้กับไคลเอนต์ระดับพีซีเครื่องเดียวไม่ใช่ข้อเสนอสำหรับผู้ใช้หลายคน) เพื่อเป็นหลักฐานเปิด Firefox นี้เปิด 100 แท็บดูที่การใช้งานหน่วยความจำและ CPU ลองทำเช่นเดียวกันกับ 100 คำขอสำหรับเว็บไซต์! สิ่งสุดท้ายโปรดหยุดเว้นเสียแต่ว่าคุณจะมีข้อเท็จจริงที่แท้จริงในการเพิ่มไม่แยกย่อย มันค่อนข้างรุนแรงและไม่เป็นประโยชน์ต่อใคร
MrMesees

การตรวจสอบ 256 ไบต์แรกของไฟล์ที่เพิ่งอัปโหลดจะทำให้ประสิทธิภาพการทำงานเกือบเป็นศูนย์เนื่องจากไฟล์นั้นอาจอยู่ในหน่วยความจำหรือแคช SSD และมันจะปรากฏในกรณีใด ๆ เมื่อคุณเปรียบเทียบกับประสิทธิภาพที่ได้จากการปรับขนาดไฟล์ ไม่. สำหรับเบราว์เซอร์อื่น ๆ ไม่ได้อยู่ในการไหลของรหัสเดียวกัน แต่จากstackoverflow.com/questions/1201945/นี้มันไม่ได้ไกลเกินกว่าที่จะถือว่า Chrome และ firefox มีความสอดคล้องกันมาก
Mark Kaplun
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.