File SVG non caricati dall'ultimo aggiornamento di WP


16

Ho un frammento nel mio file PHP di funzioni che mi consente di caricare file SVG. Da quando eseguo l'aggiornamento all'ultima versione di WP oggi, non posso più caricare svgs. Ho anche provato un secondo frammento di codice dal sito Web dei trucchi CSS e non funziona neanche.

Qualcuno sa a) cosa potrebbe aver causato questo con l'ultimo aggiornamento eb) Qualcuno sa come aggirare.

Ecco il codice che utilizzo normalmente:

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

Grazie molto

Paolo.

Risposte:


16

In WordPress 4.7.1 è stata introdotta una modifica che verifica il tipo di mime reale di un file caricato. Ciò interrompe il caricamento di tipi di file come SVG o DOCX. Esistono già biglietti per questo problema in WordPress Core, dove puoi leggere di più su questo:

Una soluzione temporanea e consigliata (per il tempo fino alla risoluzione del problema) è il seguente plug-in:
Disabilita controllo MIME reale

Se non vuoi usare quel plugin, ecco la stessa funzionalità:

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

Si noti che questo frammento ha un controllo di versione incluso per disabilitare la correzione non appena WordPress viene aggiornato.

modificare

Inizialmente il problema era stato risolto in 4.7.2. Ma poiché la 4.7.2 era una versione di sicurezza urgente , la correzione non è arrivata a quella versione. Ora dovrebbe essere risolto in 4.7.3.


2
Soluzione alternativa per ambienti di sviluppo: aggiungere define( 'ALLOW_UNFILTERED_UPLOADS', true );a wp-config.php. Questo non è sicuro per la produzione.
Tim Malone,

1
Solo per raccogliere tutte le informazioni in un unico posto, ecco anche un thread relativo al forum: wordpress.org/support/topic/wp-4-7-1-kills-svg
Tim Malone,

Grazie per questo. Al momento non è una situazione urgente, ma è bene sapere che c'è un problema. Davvero apprezzato.
Paul12_

Introduce effetti di portata troppo ampia a meno che non controlli specificatamente 'svg' === strtolower($filetype['ext']);e introduca più lavoro nel caso in cui non sia necessario (principalmente) lavoro o il file non sia di tipo svg ...
MrMesees


2

Nessuno sembra aver appena lavorato con ciò che è ed è un peccato, quindi ecco come ho gestito ...

Storia / Sfondo

Ho creato un uploader SVG nel 2015 sulla base di un articolo CSS-Tricks che guardava cosa fosse. Ho anche fatto funzionare la griglia per l'anteprima dell'immagine e ho usato alcune altre correzioni. Plug-in semplice (i plug-in di tipo file IMO dovrebbero essere semplici)

Soluzione

Ci sono stati alcuni cambiamenti per 4.7. Il vero PITA era che per i image/tipi MIME WP ora utilizza GD sulle immagini. Per aggirare questo ho impostato l' svgestensione da utilizzare in application/svg+xmlmodo che GD non si scherzasse con il file.

Aggiornamento: a partire dalla 4.7.2 qualche scintilla luminosa si è rotta anche in alcuni casi

Quindi più tardi tramite hook lo ricolleghiamo a image/svg+xml. È lo stesso usato in altre risposte, ma innanzitutto lo blocchiamo nel nostro caso specifico per eliminare gli effetti (è un file SVG); possiamo fare affidamento sulla lettura $data['ext'](dovrebbe essere più economico della funzione per ottenere informazioni sui file come solo un confronto e un accesso array / hash).

Aggiornamento: a partire dalla 4.7.2 $data['ext']non è sempre impostato, quindi ora se la sua lunghezza è <1 estrarre (potenzialmente non sicura) l'estensione dal nome file usando strtolower(end(explode('.', $filename))). Il motivo per cui sto davvero combattendo usando FileInfo è che essenzialmente fare affidamento su un'estensione PHP è troppo opaco e non funzionerà sempre per tutti (specialmente non quelli che compilano senza o senza accesso per abilitare le estensioni se non è lì). Vorrei qualcosa che funzioni al posto di un'estensione. Non si tratta più di avere le informazioni corrette, quindi per coloro FileInfoche si fidano dell'output e hanno l'estensione (credo che sia l'impostazione predefinita in 5.6+) dovrebbe funzionare. Inoltre, poiché si tratta di un plug-in, non si tratta di modificare il core, è possibile disattivare questo codice o annullare la registrazione dell'hook.

https://github.com/Lewiscowles1986/WordPressSVGPlugin

Vedere

Altre soluzioni alternative

Consentire i caricamenti non filtrati è una soluzione orribile perché, come altri hanno già detto, il collegamento a questa discussione potrebbe caricare file php tramite l'uploader multimediale (è un male e se lo fai, dovresti fermarti e pensare!)

Forzare ogni file attraverso qualsiasi funzione senza controlli (ironicamente se ne hai image/ il tipo MIME non puoi semplicemente avere un semplice controllo ext). Ciò ha il potenziale per creare effetti di portata molto più ampia per risolvere un problema relativamente di nicchia e introduce più lavoro in generale (attenzione al mio plugin introduce anche più lavoro per gli utenti amministratori per far funzionare l'interfaccia utente dei media di amministrazione)

Se avessimo lasciato il mime come application / svg + xml e avessimo semplicemente filtrato i tipi di mime che l'immagine avrebbe caricato, ma se AFAIK avesse bisogno di correzioni da utilizzare come immagine in primo piano ecc. C'è ancora molto lavoro da fare per garantire un'esperienza SVG universale, quindi ho scelto di scegliere con cura le battaglie.

Spero che sia di aiuto.


bene, il problema principale alla base di tutto questo è il fatto che non c'è moderazione prima che i file caricati vengano pubblicati. provare a indovinare se un file è male fondamentalmente solo in base alla sua estensione è sempre una cattiva idea. in teoria non c'è alcun problema a consentire tutti i caricamenti da parte dell'amministratore, quindi mentre alcune delle soluzioni suggerite potrebbero essere generalmente troppo ampie, in pratica potrebbero essere abbastanza buone per molte persone. Nota a margine IMHO SVG è tanto un'immagine che un PDF, tecnicamente non lo è.
Mark Kaplun,

chiunque abbia inventato tipi mime non è d'accordo con te, così come i produttori di browser e i produttori di software di tutto il mondo. WordPress controlla solo le estensioni perché non è inteso come un elemento di sicurezza della rete e va bene (per lo stesso motivo per cui Microsoft Office non parcheggia la tua auto). È iperbolico almeno affermare che il WP dovrebbe fare molto più controllo che superficiale, ma sono d'accordo che ci debba essere più lavoro di sicurezza, solo che il WP non è un veicolo appropriato per quel lavoro (è quasi troppo grande com'è)
MrMesees

in realtà i browser controllano il contenuto in tutti i tipi di situazioni developer.mozilla.org/en-US/docs/Mozilla/… e non guardano mai l'estensione. E sì, nessuno si aspetta che WordPress a questo punto si concentri sul rafforzamento della sicurezza;)
Mark Kaplun,

Per prima cosa, un articolo sul blog di un browser! = Tutti i browser. So che Chrome presta attenzione al mimo. In secondo luogo, l'introspezione dei file segue le regole; non è una forma libera come suggerisce il linguaggio volgare. La validazione più completa scambia le prestazioni per flessibilità (funziona su client a livello di singolo PC, non offerte pubbliche multiutente). Per evidenziare questo apri Firefox, apri 100 schede guarda memoria e utilizzo della CPU. Prova lo stesso con 100 richieste per un sito Web! L'ultima cosa, per favore, fermati a meno che tu non abbia alcuni fatti concreti per aggiungere non divagazioni. È abbastanza aggravante e non va a beneficio di nessuno.
MrMesees,

ispezionando i primi 256 byte di un file appena caricato si verificherà un hit delle prestazioni quasi nullo poiché il file è probabilmente nella memoria o nella cache SSD e impallidisce in ogni caso quando lo si confronta con il hit delle prestazioni dal ridimensionamento dei file, la generazione di miniature e cosa non. Come per altri browser, non esattamente nello stesso flusso di codice, ma da questo stackoverflow.com/questions/1201945/… non è inverosimile supporre che chrome e firefox siano molto allineati
Mark Kaplun,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.