En son WP güncellemesinden bu yana SVG dosyaları yüklenmiyor


16

İşlevlerim PHP dosyasında SVG dosyalarını yüklememe izin veren bir parçacık var. Bugün WP'nin en son sürümüne yükseltme yaptığımdan beri artık svgs yükleyemiyorum. Ayrıca CSS hileleri web sitesinden ikinci bir kod snippet'i denedim ve bu da çalışmıyor.

A) Son güncelleme ile buna neyin sebep olabileceğini bilen var mı ve b) Etrafta bir çalışma yapan var mı?

İşte normalde kullandığım kod:

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

Çok teşekkürler

Paul.

Yanıtlar:


16

WordPress 4.7.1'de , yüklenen bir dosyanın gerçek mime türünü kontrol eden bir değişiklik getirildi . Bu, SVG veya DOCX gibi dosya türlerini yüklemeyi keser. Bu konuda daha fazla bilgi edinebileceğiniz WordPress Core'da zaten biletler var:

Bir geçici (bu sorun çözülene kadar süre) ve tavsiye edilen geçici çözüm aşağıdaki eklentidir:
Devre Dışı MIME Kontrol

Bu eklentiyi kullanmak istemiyorsanız, aynı işlev aşağıdadır:

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

Bu pasajın WordPress güncellenir güncellenmez düzeltmeyi devre dışı bırakmak için bir sürüm kontrolü içerdiğine dikkat edin.

Düzenle

Sorun başlangıçta 4.7.2'de düzeltilecek şekilde ayarlandı. Ancak 4.7.2 acil bir güvenlik sürümü olduğundan, düzeltme bu sürüme geçmedi. Şimdi 4.7.3'te düzeltilmesi gerekiyordu.


2
Geliştirme ortamları için alternatif çözüm: eklenti define( 'ALLOW_UNFILTERED_UPLOADS', true );için wp-config.php. Bu üretim için güvenli değildir.
Tim Malone

1
Sadece tek bir yerde tüm bilgileri toplamak için, ilgili bir forum iş parçacığı da: wordpress.org/support/topic/wp-4-7-1-kills-svg
Tim Malone

Bunun için teşekkürler. Şu anda acil bir durum değil, ama etrafta bir iş olduğunu bilmek güzel. Çok müteşekkirim.
Paul12_

Özellikle kontrol etmediği 'svg' === strtolower($filetype['ext']);ve daha fazla iş gerektirmediği durumlarda (çoğunlukla) veya dosya svg türünde değilse, çok geniş kapsamlı efektler sunar
MrMesees


2

Kimse ne ile çalışmamış gibi görünüyor ve bu çok kötü, bu yüzden işte böyle idare ediyorum ...

Tarih / Arka Plan

2015 yılında, ne olduğuna bakarak bir CSS-Tricks makalesine dayanarak bir SVG yükleyicisi oluşturdum. Ayrıca görüntü önizleme için ızgara var ve başka birkaç düzeltme kullandım. Basit eklenti (IMO dosya türü eklentileri basit olmalıdır)

Çözüm

4.7 için birkaç değişiklik oldu. Asıl PITA, image/mim türleri için WP'nin görüntülerde GD kullanmasıydı. Bunu atlamak svgiçin application/svg+xmlGD'yi dosyayla uğraşmayacak şekilde kullanmak için uzantıyı ayarladım .

Güncelleme: 4.7.2'den itibaren bazı durumlarda da bazı parlak kıvılcımlar kırıldı

Sonra daha sonra kanca ile geri hotwire image/svg+xml. Diğer cevaplarda kullanılanla aynıdır, ancak öncelikle efektleri ortadan kaldırmak için özel durumumuza kilitleriz (bir SVG dosyası mıdır); okumaya güvenebiliriz $data['ext'](sadece tek bir karşılaştırma ve bir dizi / karma erişimi olarak dosya bilgilerini almak için işlevden daha ucuz olmalıdır).

Güncelleme: 4.7.2'den itibaren $data['ext']her zaman ayarlanmadı, bu yüzden artık uzunluğu kullanarak dosya adından <1 özü (potansiyel olarak güvenli olmayan) uzantı kullanıyoruz strtolower(end(explode('.', $filename))). FileInfo'yu kullanarak gerçekten savaşmamın nedeni, aslında bir PHP uzantısına güvenmenin çok opak olması ve her zaman herkes için çalışmayacak olmasıdır (özellikle, uzantılar etkinleştirilemediğinde veya erişim olmadan derlemeyenler). Bir uzantının yerine çalışan bir şey rica ediyorum. Artık doğru bilgilere sahip olma meselesi değil, bu yüzden çıktısına güvenen FileInfove uzantıya sahip olanlar için (5.6+ sürümünde varsayılan olduğuna inanıyorum) çalışmalıdır. Ayrıca bu bir eklenti olduğu için, bu kodu kapatabilir veya kancayı kaldırabilirsiniz.

https://github.com/Lewiscowles1986/WordPressSVGPlugin

Görmek

Diğer geçici çözümler

Filtrelenmemiş yüklemelere izin vermek korkunç bir çözümdür, çünkü diğerleri bu iş parçacığına bağlantı kurdukça insanlar medya yükleyici üzerinden php dosyaları yükleyebilir (bu kötü ve bunu yaparsanız, durup düşünmelisiniz!)

Her dosyayı kontrolsüz herhangi bir işlevle zorlamak (İronik bir şekilde image/mime tipinde varsa, basit bir ext kontrolüne sahip olamazsınız). Bu, nispeten niş bir sorunu çözmek için çok daha geniş kapsamlı efektler yaratma potansiyeline sahiptir ve genel olarak daha fazla iş sunar (eklentimin uyarısı ayrıca yönetici kullanıcıların yönetici medya kullanıcı arayüzünün çalışması için daha fazla çalışma sağlar)

Mime'i application / svg + xml olarak bırakıp görüntünün yükleyeceği mime türlerini filtrelediğimiz, ancak AFAIK'ın özellikli bir görüntü olarak kullanılması için düzeltmeler gerektirdiğini vb. savaşları dikkatlice seçmek.

Bu yardımcı olur umarım.


tüm bu şeyleri çeken temel sorun, yüklenen dosyalar yayınlanmadan önce herhangi bir denetimin olmamasıdır. temelde sadece bir uzantıya dayanarak bir dosyanın kötü olup olmadığını tahmin etmeye çalışmak her zaman kötü bir fikirdir. teoride, yönetici tarafından tüm yüklemelere izin vermede sorun yoktur, bu nedenle önerilen düzeltmelerin bazıları genellikle çok geniş olsa da, pratikte birçok insan için yeterince iyi olabilir. Yan not IMHO SVG, PDF kadar bir görüntüdür, teknik olarak değildir.
Mark Kaplun

MIME türleriyle gelenler, dünyadaki tarayıcı satıcıları ve yazılım üreticileri gibi sizinle aynı fikirde değiller. WordPress sadece uzantıları kontrol eder, çünkü bir ağ güvenliği parçası olarak tasarlanmamıştır ve bu tamamdır (aynı nedenle microsoft office arabanızı park etmez). En azından WP'nin yüzeyselden çok daha fazla kontrol yapması gerektiğini söylemek hiperbolik ama daha fazla güvenlik çalışması olması gerektiğini kabul ediyorum, sadece
WP'nin

aslında tarayıcılar her türlü durumdaki içeriği inceleyebilmektedir developer.mozilla.org/en-US/docs/Mozilla/… ve uzantıya asla bakmazlar. Ve evet kimse bu noktada wordpress'in sertleştirme güvenliğine odaklanmasını
beklemiyor

İlk şey, bir tarayıcının bir blog makalesi! = Tüm tarayıcılar. Chrome'un Mim'e dikkat ettiğini biliyorum. İkinci olarak, dosyaların içgözlemi kurallara uyar; gevşek dilin de belirttiği gibi serbest form değildir. Daha kapsamlı doğrulama, performansı esneklik için değiştirir (çok kullanıcılı halka açık tekliflerde değil, tek PC düzeyindeki istemcilerde çalışır). Bu açık Firefox'u kanıtlamak için 100 sekmeyi açın, bellek ve CPU kullanımına bakın. Bir web sitesi için 100 istekle de aynı şeyi deneyin! Son şey, lütfen eklenti eklemek için gerçek gerçekleriniz yoksa durun. Oldukça ağırlaştırıcıdır ve kimseye fayda sağlamaz.
MrMesees

yeni yüklenen bir dosyanın ilk 256 baytını incelemek, dosya büyük olasılıkla bellekte veya SSD önbelleğinde olduğundan neredeyse sıfır performans isabetine neden olur ve her durumda, dosyaları yeniden boyutlandırma, küçük resim oluşturma ve değil. Diğer tarayıcılara gelince, tam olarak aynı kod akışında değil, ancak bu stackoverflow.com/questions/1201945/… krom ve firefox'un çok uyumlu olduğunu varsaymak için çok fazla değil
Mark Kaplun
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.