SVG-Dateien werden seit dem letzten WP-Update nicht hochgeladen

16

Ich habe einen Ausschnitt in meiner Funktions-PHP-Datei, mit dem ich SVG-Dateien hochladen kann. Seit dem heutigen Upgrade auf die neueste Version von WP kann ich keine svgs mehr hochladen. Ich habe auch einen zweiten Codeausschnitt von der CSS-Tricks-Website ausprobiert, und das funktioniert auch nicht.

Kennt jemand a) was dies mit dem letzten Update verursacht haben könnte und b) kennt jemand eine Abhilfe?

Hier ist der Code, den ich normalerweise benutze:

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

Danke vielmals

Paul.

Paul12_
quelle

Antworten:

16

In WordPress 4.7.1 wurde eine Änderung eingeführt , die nach dem echten MIME-Typ einer hochgeladenen Datei sucht. Dadurch wird das Hochladen von Dateitypen wie SVG oder DOCX unterbrochen. Es gibt bereits Tickets für dieses Problem in WordPress Core, wo Sie mehr darüber lesen können:

Eine vorübergehende und empfohlene Problemumgehung (für die Zeit, bis dieses Problem behoben ist) ist das folgende Plugin:
Deaktivieren Sie Real MIME Check

Wenn Sie dieses Plugin nicht verwenden möchten, finden Sie hier die gleiche Funktionalität:

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

Beachten Sie, dass in diesem Snipping eine Versionsüberprüfung enthalten ist, um das Update zu deaktivieren, sobald WordPress aktualisiert wird.

Bearbeiten

Das Problem wurde ursprünglich in 4.7.2 behoben. Da es sich bei 4.7.2 jedoch um ein dringendes Sicherheitsupdate handelte , hat es der Fix nicht in diese Version geschafft. Es soll nun in 4.7.3 behoben sein.

Gchtr
quelle
2
Alternative Problemumgehung für Entwicklungsumgebungen: Hinzufügen define( 'ALLOW_UNFILTERED_UPLOADS', true );zu wp-config.php. Dies ist nicht sicher für die Produktion.
Tim Malone
1
Um alle Informationen an einem Ort zu sammeln, gibt es hier auch einen verwandten Forenthread: wordpress.org/support/topic/wp-4-7-1-kills-svg
Tim Malone
Danke dafür. Es ist im Moment keine dringende Situation, aber es ist gut zu wissen, dass es eine Lösung gibt. Sehr geschätzt.
Paul12_
Führt zu weitreichende Effekte ein, es sei denn, es prüft speziell auf 'svg' === strtolower($filetype['ext']);und führt mehr Arbeit ein, falls (meistens) keine Arbeit benötigt wird oder die Datei nicht vom Typ svg ist ...
MrMesees
4

Scheint so, als könnte dies mit diesem Ticket zusammenhängen https://core.trac.wordpress.org/ticket/39552 , sieht aus wie etwas, das in 4.7.1 kaputt gegangen ist

Mark Kaplun
quelle
Ah danke Mark. Ich dachte, etwas stimmt nicht. Hoffentlich wird es bald behoben.
Paul12_
2

Niemand scheint nur mit dem gearbeitet zu haben, was ist und das ist schade, also hier ist, wie ich gehandhabt habe ...

Geschichte / Hintergrund

Ich habe 2015 einen SVG-Uploader basierend auf einem CSS-Tricks-Artikel erstellt. Ich habe auch Gitter für die Bildvorschau arbeiten lassen und ein paar andere Korrekturen verwendet. Einfaches Plugin (IMO-Plugins sollten einfach sein)

Lösung

In 4.7 wurden einige Änderungen vorgenommen. Die wahre PITA war, dass image/WP für Pantomimetypen jetzt GD für die Bilder verwendet. Um dies zu umgehen, habe ich die svgErweiterung application/svg+xmlso eingestellt , dass GD nicht mit der Datei herumwirbelt.

Update: Ab 4.7.2 hat ein heller Funke das in einigen Fällen auch gebrochen

Dann später über Haken wir es zurück zu hotwire image/svg+xml. Es ist dasselbe, das in anderen Antworten verwendet wird, aber wir beschränken es zunächst auf unseren speziellen Fall, um Effekte zu eliminieren (ist es eine SVG-Datei); Wir können uns auf das Lesen verlassen $data['ext'](sollte billiger sein als die Funktion zum Abrufen von Dateiinformationen, da nur ein Vergleich und ein Array / Hash-Zugriff möglich sind).

Update: Ab 4.7.2 $data['ext']ist nicht immer festgelegt, daher wird jetzt, wenn die Länge <1 ist, die (möglicherweise unsichere) Erweiterung aus dem Dateinamen extrahiert strtolower(end(explode('.', $filename))). Der Grund, warum ich wirklich mit FileInfo kämpfe, ist, dass es im Wesentlichen zu undurchsichtig ist, sich auf eine PHP-Erweiterung zu verlassen, und nicht immer für alle funktioniert (insbesondere nicht für diejenigen, die ohne oder ohne Zugriff kompilieren, um Erweiterungen zu aktivieren, wenn sie nicht vorhanden sind). Ich hätte gerne etwas, das anstelle einer Erweiterung funktioniert. Es geht nicht mehr darum, die richtigen Informationen zu haben. Für diejenigen, die auf die Ausgabe von FileInfound die Erweiterung vertrauen (ich glaube, es ist Standard in 5.6+), sollte dies funktionieren. Auch weil es sich um ein Plugin handelt, das den Kern nicht verändert, können Sie diesen Code deaktivieren oder die Registrierung des Hooks aufheben.

https://github.com/Lewiscowles1986/WordPressSVGPlugin

Sehen

Andere Problemumgehungen

Ungefilterte Uploads zuzulassen, ist eine schreckliche Lösung, da, wie andere bereits gesagt haben, die Verlinkung zu diesem Thread dazu führen könnte, dass PHP-Dateien über den Media-Uploader hochgeladen werden (das ist schlecht, und wenn Sie es tun, sollten Sie innehalten und nachdenken!).

Erzwinge jede Datei durch irgendeine Funktion ohne Prüfung (Ironischerweise image/kann man nicht einfach eine Ext-Prüfung durchführen, wenn man den MIME-Typ hat). Dies hat das Potenzial, weitreichendere Effekte zu erzielen, um ein relativ nischenhaftes Problem zu lösen und insgesamt mehr Arbeit zu verursachen.

Wenn wir die MIME als application / svg + xml belassen und einfach die MIME-Typen gefiltert würden, die das Bild hochladen würde, aber AFAIK Korrekturen als empfohlenes Bild usw. benötigt. Es gibt mehr zu tun, um eine universelle SVG-Erfahrung zu gewährleisten Schlachten sorgfältig auswählen.

Hoffe das hilft.

MrMesees
quelle
Nun, das Hauptproblem, das diese ganze Sache antreibt, ist die Tatsache, dass es keine Moderation gibt, bevor hochgeladene Dateien veröffentlicht werden. Es ist immer eine schlechte Idee, zu erraten, ob eine Datei böse ist. Theoretisch ist es kein Problem, alle Uploads durch den Administrator zuzulassen. Während einige der vorgeschlagenen Korrekturen im Allgemeinen zu umfangreich sind, sind sie in der Praxis möglicherweise für viele Benutzer ausreichend. Randnotiz IMHO SVG ist so viel wie ein Bild als PDF, technisch ist es nicht.
Mark Kaplun
Wer MIME-Typen erfunden hat, ist mit Ihnen nicht einverstanden, ebenso wie Browser-Anbieter und Software-Hersteller auf der ganzen Welt. WordPress überprüft nur Erweiterungen, da dies nicht als Sicherheitsmaßnahme für das Netzwerk gedacht ist und dies in Ordnung ist (aus dem gleichen Grund parkt Microsoft Office Ihr Auto nicht). Es ist zumindest hyperbolisch zu sagen, dass WP viel mehr Kontrolle als oberflächlich leisten sollte, aber ich stimme zu, dass es mehr Sicherheitsarbeit geben muss, nur nicht, dass WP ein geeignetes Mittel für diese Arbeit ist (es ist fast zu groß wie es ist)
MrMesees
Tatsächlich überprüfen Browser den Inhalt in allen möglichen Situationen. developer.mozilla.org/en-US/docs/Mozilla/… und sie sehen sich die Erweiterung nie an. Und ja, niemand erwartet, dass WordPress an dieser Stelle einen Fokus auf die Verbesserung der Sicherheit
legt
Als erstes ein Blogartikel von einem Browser! = Alle Browser. Ich weiß, Chrome achtet auf Pantomime. Zweitens folgt die Introspektion von Dateien Regeln; Es ist keine freie Form, wie die lose Sprache nahelegt. Eine umfassendere Validierung tauscht Leistung gegen Flexibilität aus (sie funktioniert auf Clients auf Einzel-PC-Ebene, nicht auf öffentlichen Angeboten für mehrere Benutzer). Öffnen Sie 100 Registerkarten, um zu belegen, dass Firefox geöffnet ist, und überprüfen Sie die Speicher- und CPU-Auslastung. Versuchen Sie das gleiche mit 100 Anfragen für eine Website! Als letztes hören Sie bitte auf, es sei denn, Sie haben einige tatsächliche Fakten, um keine Abschweifungen hinzuzufügen. Es ist ziemlich ärgerlich und nützt niemandem.
MrMesees
Wenn Sie die 256 ersten Bytes einer soeben hochgeladenen Datei untersuchen, ist die Leistung nahezu null, da sich die Datei wahrscheinlich im Arbeitsspeicher oder im SSD-Cache befindet. Sie verblasst in jedem Fall, wenn Sie sie mit der Leistung vergleichen, die sich aus der Größenänderung der Dateien, der Erstellung von Miniaturansichten und was ergibt nicht. Wie bei anderen Browsern, nicht genau im selben Code-Flow, aber aus diesem stackoverflow.com/questions/1201945/… ist es nicht weit hergeholt anzunehmen, dass Chrome und Firefox sehr aufeinander abgestimmt sind
Mark Kaplun