WordPress "Spiacenti, questo tipo di file non è consentito per motivi di sicurezza." — Come risolvere (2026)
TL;DR
La soluzione più pulita è aggiungere un filtro upload_mimes in functions.php o in un plugin personalizzato. Per le foto HEIC dell'iPhone, convertirle in JPEG sul dispositivo con SnapPress elimina l'errore alla radice.
Risposta breve: L'errore significa che WordPress non ha riconosciuto l'estensione del file o il tipo MIME come uno dei formati consentiti. La soluzione permanente più pulita è un piccolo filtro upload_mimes in functions.php o in un plugin personalizzato. Se stai caricando foto HEIC dall'iPhone, la via più semplice è convertirle in JPEG sul dispositivo prima del caricamento con uno strumento come SnapPress. Non attivare mai ALLOW_UNFILTERED_UPLOADS in wp-config.php come soluzione permanente — disattiva tutti i controlli di sicurezza sui caricamenti di WordPress.
Se ti sei imbattuto in "Spiacenti, questo tipo di file non è consentito per motivi di sicurezza" su WordPress, non sei il solo. È uno dei messaggi di errore di WordPress più cercati al mondo, e la formulazione è fuorviante — WordPress non ha rilevato nulla di dannoso. Si è semplicemente scontrato con una lista di tipi consentiti fissa, e l'estensione del tuo file o il tipo MIME non è in quella lista.
Questa guida spiega perché l'errore si verifica, i quattro metodi testati in produzione per risolverlo in modo permanente, i compromessi di sicurezza di ciascun approccio e una soluzione specifica per tipo di file. Alla fine saprai esattamente quale metodo si adatta alla tua situazione e come evitare di rompere il sito nel frattempo.
Perché si verifica questo errore (la lista dei tipi MIME consentiti)
Ogni caricamento su WordPress passa attraverso la funzione wp_check_filetype_and_ext(). Quella funzione confronta due cose con una lista di tipi consentiti fissa:
- L'estensione del file (la parte dopo il punto nel nome del file)
- Il tipo MIME rilevato dall'estensione
finfodi PHP
Se uno dei due non è nella lista restituita da get_allowed_mime_types(), il caricamento viene rifiutato con "Spiacenti, questo tipo di file non è consentito per motivi di sicurezza". La lista è definita in wp-includes/functions.php e contiene circa 60 voci di default — immagini comuni, video, audio, archivi e formati di documento.
L'inquadramento come "sicurezza" esiste perché lo scopo originale della lista era impedire agli attaccanti di caricare codice eseguibile (file PHP, shell script) e far sì che WordPress lo servisse come URL. In quel senso ristretto, il filtro è una vera barriera di sicurezza. Ma lo stesso filtro blocca una lunga lista di formati legittimi che semplicemente non sono stati inclusi nella lista del core:
- HEIC dell'iPhone (aggiunto in WordPress 6.7, fine 2024)
- WebP (aggiunto in WordPress 5.8, 2021)
- AVIF (aggiunto in WordPress 6.5, marzo 2024)
- SVG (mai aggiunto — richiede plugin o filtro)
- Font WOFF/WOFF2 (mai aggiunti)
- STL, OBJ, GLB formati di modelli 3D (mai aggiunti)
Se la tua versione di WordPress è precedente all'aggiunta di un dato formato, o se il tuo hosting usa una build personalizzata che rimuove i tipi MIME più recenti, incontri l'errore anche su un formato che dovrebbe essere supportato.
Rimedio temporaneo: controlla prima l'estensione e il file
Prima di cambiare le impostazioni del server, escludi due cause semplici:
L'estensione è sbagliata o mancante
I file esportati dalle app di messaggistica a volte perdono l'estensione o ne ricevono una generica come .bin. Fai clic destro sul file, rinominalo con l'estensione corretta (.jpg, .png, ecc.) e riprova il caricamento. Se funziona, il contenuto del file era a posto; il problema era solo l'estensione.
Il file è corrotto
Se il browser ha scaricato il file da una chat o da un'email e il download si è interrotto, il file potrebbe essere troncato. Il finfo di PHP rileverà il tipo MIME sbagliato — il file sembra spazzatura binaria invece di un'immagine. Riscarica l'originale dalla fonte e riprova.
Questi due controlli richiedono 30 secondi e risolvono circa il 20% delle segnalazioni di "questo tipo di file non è consentito" che vedo. Il restante 80% sono veri problemi di lista dei consentiti che richiedono una delle soluzioni permanenti qui sotto.
Le 4 soluzioni permanenti
Soluzione 1: Aggiungere il tipo MIME con il filtro upload_mimes (Consigliata)
È la soluzione di produzione più pulita. Aggiungi quanto segue al functions.php del tuo tema child, o — meglio — a un piccolo plugin personalizzato così la modifica sopravvive agli aggiornamenti del tema:
<?php
add_filter('upload_mimes', function($mimes) {
$mimes['heic'] = 'image/heic';
$mimes['heif'] = 'image/heif';
return $mimes;
});
add_filter('wp_check_filetype_and_ext', function($data, $file, $filename, $mimes) {
$filetype = wp_check_filetype($filename, $mimes);
if (in_array($filetype['ext'], ['heic', 'heif'], true)) {
$data['ext'] = $filetype['ext'];
$data['type'] = $filetype['type'];
}
return $data;
}, 10, 4); Sostituisci heic e image/heic con l'estensione e il tipo MIME che ti servono. Il primo filtro aggiunge il tipo alla lista dei consentiti. Il secondo filtro gestisce un bug sottile: su molti server, il modulo finfo di PHP segnala i tipi MIME insoliti come application/octet-stream, il che porta wp_check_filetype_and_ext() a rifiutare il caricamento anche se l'estensione è consentita. Il secondo filtro forza il riconoscimento quando l'estensione del file corrisponde.
Per una guida più approfondita dedicata all'HEIC, vedi WordPress Allowed MIME Types: How to Enable HEIC Uploads (2026 Guide).
Soluzione 2: Usare un plugin (WP Add Mime Types)
Se non vuoi modificare PHP, il plugin WP Add Mime Types (gratuito, oltre 80.000 installazioni, mantenuto attivamente dal 2014) offre un pannello di impostazioni con due colonne: estensione e tipo MIME. Aggiungi una riga, salva, fatto. Il plugin esegue lo stesso filtro upload_mimes sotto il cofano.
Due alternative testate in produzione:
- File Upload Types by WPForms — interfaccia a caselle di controllo con voci predefinite per HEIC, WebP, AVIF, SVG e oltre 40 altri formati. Ideale se non conosci a memoria la stringa del tipo MIME.
- Disable Real MIME Check — un plugin a funzione singola che disattiva il passaggio di validazione
finfodi PHP. Utile nei casi limite in cui l'estensione è nella lista dei consentiti mafinfosegnala il tipo MIME in modo errato. Usalo con parsimonia; il compromesso è una validazione più debole.
Soluzione 3: ALLOW_UNFILTERED_UPLOADS in wp-config.php (Avanzata, con avvertenza)
WordPress ha una via di fuga in wp-config.php:
define('ALLOW_UNFILTERED_UPLOADS', true); Con questa costante impostata, gli amministratori possono caricare qualsiasi tipo di file, inclusi gli script PHP. Ogni controllo sul tipo MIME viene bypassato.
Non usarla in produzione. La costante disattiva tutti i controlli di sicurezza sui caricamenti di WordPress. Un attaccante che compromette un qualsiasi account di livello amministratore può caricare file PHP direttamente in wp-content/uploads ed eseguirli. Anche le configurazioni che oggi sembrano sicure spesso hanno un account dimenticato "abbonato-con-ruolo-admin" rimasto da un vecchio plugin o da un'importazione.
L'unico uso legittimo è un ambiente di sviluppo locale dove stai facendo il debug del comportamento dei caricamenti. Commentala prima di fare il push verso lo staging.
Soluzione 4: Convertire sul dispositivo con SnapPress (per utenti iPhone)
Per i caricamenti di foto dall'iPhone in particolare, la soluzione più solida è convertire l'HEIC in JPEG sul dispositivo prima che il file raggiunga il tuo server. SnapPress legge l'HEIC dalla tua libreria Foto, lo decodifica usando la pipeline di immagini di iOS che Apple mantiene a ogni release di iOS, e carica un JPEG nella tua Libreria Media di WordPress tramite la REST API.
Il tuo functions.php resta intatto. Il tuo filtro upload_mimes resta intatto. Il file che arriva sul tuo server è un JPEG standard che ogni installazione di WordPress supporta dal 2003.
È la via che consiglio a chiunque gestisca più siti WordPress o non si senta a proprio agio nel modificare PHP. Il compromesso è che risolve solo il caso HEIC dell'iPhone — per gli altri tipi di file serve comunque una delle soluzioni 1-3.
Soluzioni specifiche per tipo di file
Il tipo MIME esatto conta. Ecco le voci testate in produzione per i formati più comuni che si scontrano con "Spiacenti, questo tipo di file non è consentito per motivi di sicurezza".
HEIC (foto dell'iPhone)
$mimes['heic'] = 'image/heic';
$mimes['heif'] = 'image/heif'; Aggiungi sempre entrambi. Gli iPhone producono occasionalmente file .heif per sequenze di immagini e scatti a raffica. Dopo aver aggiunto il filtro, il caricamento su WordPress va a buon fine — ma la maggior parte dei browser dei visitatori non può visualizzare l'HEIC, quindi serve anche una conversione lato server (ShortPixel) o lato client (SnapPress). Vedi Foto HEIC da iPhone e WordPress per il quadro completo.
WebP
$mimes['webp'] = 'image/webp'; WordPress 5.8 (metà 2021) ha aggiunto WebP alla lista del core. Se la tua versione di WordPress è aggiornata, questo filtro è superfluo. Se sei su una build più vecchia o su un hosting con restrizioni personalizzate, il filtro sblocca il caricamento dei WebP.
SVG
$mimes['svg'] = 'image/svg+xml';
$mimes['svgz'] = 'image/svg+xml'; Non fermarti al filtro. SVG è XML e può contenere JavaScript inline che si attiva nei browser degli amministratori. Installa sempre il plugin Safe SVG (gratuito) che inserisce l'SVG nella lista dei consentiti e al tempo stesso sanifica i file in arrivo tramite la libreria svg-sanitizer, rimuovendo tag script, gestori di eventi e riferimenti a entità esterne. Se solo designer fidati devono caricare SVG, avvolgi il filtro in un controllo current_user_can('manage_options').
AVIF
$mimes['avif'] = 'image/avif'; WordPress 6.5 (marzo 2024) ha aggiunto AVIF alla lista del core. Il filtro serve solo su installazioni più vecchie o hosting personalizzati. AVIF comprime circa il 20% in meno rispetto all'HEIC a parità di qualità percepita e ha un supporto browser più ampio, il che lo rende il formato di distribuzione migliore se il tuo server dispone di libavif.
Video MP4
$mimes['mp4'] = 'video/mp4';
$mimes['m4v'] = 'video/mp4';
$mimes['mov'] = 'video/quicktime'; Di solito sono nella lista del core, ma se ricevi l'errore proprio sugli MP4, spesso è perché il tipo MIME del file viene rilevato come video/x-m4v o application/octet-stream. Aggiungi il filtro wp_check_filetype_and_ext della Soluzione 1 per forzare il riconoscimento.
Archivi ZIP
$mimes['zip'] = 'application/zip';
$mimes['7z'] = 'application/x-7z-compressed'; Lo ZIP è nella lista del core di default, ma alcuni plugin di sicurezza (Wordfence, Sucuri) la sovrascrivono perché gli ZIP possono contenere contenuti eseguibili. Inseriscilo nella whitelist anche nelle impostazioni del plugin, oltre che nel filtro di WordPress.
Considerazioni di sicurezza (perché la restrizione esiste di default)
WordPress limita i tipi di file di default per una ragione centrale: i file PHP in wp-content/uploads possono essere eseguiti come codice nella maggior parte delle configurazioni server. Se WordPress accettasse qualsiasi estensione, un attaccante che compromette un qualsiasi account autore o collaboratore potrebbe caricare una shell .php, visitarne l'URL ed eseguire codice arbitrario sul tuo server.
La lista dei consentiti è la difesa più economica. Anche se ogni altro livello di sicurezza fallisce — riutilizzo delle password, vulnerabilità di un plugin, compromissione della supply chain — il filtro sui caricamenti impedisce al PHP di raggiungere la directory degli upload.
Tre principi quando aggiungi voci alla lista dei consentiti:
- Aggiungi solo ciò che ti serve davvero. Se carichi HEIC una volta al mese, aggiungi HEIC. Non autorizzare preventivamente ogni formato di cui potresti eventualmente avere bisogno.
- Non consentire mai estensioni PHP, eseguibili o script.
.php,.phtml,.exe,.sh,.cgi,.pl— nessuna di queste ha posto inwp-content/uploads, in nessuna circostanza. - Sanifica i formati che permettono contenuti incorporati. SVG (JavaScript), PDF (azioni JavaScript), HTML (tutto). Usa un plugin di sanificazione o converti in un formato immagine piatto al caricamento.
Diagnosticare l'errore quando la Soluzione 1 non funziona
Hai aggiunto il filtro, hai caricato il file, e vedi ancora "Spiacenti, questo tipo di file non è consentito per motivi di sicurezza". Tre cose da controllare:
Il filtro è nel posto sbagliato
Assicurati che il file contenente il filtro venga effettivamente caricato. Se l'hai messo nel functions.php del tema child ma è attivo il tema padre, lo snippet non viene eseguito. Spostalo in un plugin personalizzato per eliminare la dipendenza dal tema.
Un plugin di sicurezza sovrascrive la lista dei consentiti
Wordfence, Sucuri, iThemes Security e plugin simili aggiungono una propria validazione dei caricamenti sopra il core di WordPress. Inserisci il tipo MIME nella whitelist anche nelle impostazioni del plugin di sicurezza, oltre che nel tuo filtro upload_mimes.
Il finfo di PHP segnala il tipo MIME sbagliato
È il fallimento silenzioso più comune. L'estensione del file è nella lista dei consentiti, ma il modulo finfo di PHP restituisce application/octet-stream invece del tipo MIME atteso. WordPress vede una discrepanza e rifiuta. Il filtro wp_check_filetype_and_ext della Soluzione 1 gestisce questo caso. Verifica che sia incluso insieme al filtro upload_mimes, non separatamente.
Per una checklist diagnostica più ampia sui fallimenti di caricamento in WordPress, vedi Cannot Upload Images to WordPress? 8 Causes and How to Fix Each One.
Caricamenti di foto dall'iPhone: il flusso di lavoro che evita del tutto questo errore
Tutto quanto sopra riguarda il caricamento diretto di HEIC grezzi, SVG, AVIF e altri formati nella Libreria Media di WordPress. Per i flussi di lavoro con le foto dell'iPhone in particolare, c'è una via più semplice: convertire sul dispositivo prima del caricamento.
SnapPress legge l'HEIC dalla tua libreria Foto, lo decodifica usando la pipeline di immagini di iOS che Apple mantiene e aggiorna a ogni release di iOS, e carica un JPEG nella tua Libreria Media di WordPress tramite la REST API. Poiché il file che arriva è un JPEG standard, non vedrai mai più "Spiacenti, questo tipo di file non è consentito per motivi di sicurezza" — né su questo sito, né su qualsiasi altro sito WordPress che colleghi.
Per i flussi di pubblicazione in blocco dall'iPhone a WordPress, vedi il confronto in Caricare Immagini in Blocco su WordPress dal Telefono: La Guida Completa e la rassegna di app in Le 5 Migliori App per Caricare Foto su WordPress a Confronto.
Riepilogo
- L'errore significa che l'estensione del file o il tipo MIME non è nella lista dei consentiti di WordPress restituita da
get_allowed_mime_types(). - Soluzione più pulita: aggiungere un filtro
upload_mimesin un plugin personalizzato (Soluzione 1). - Soluzione senza codice: plugin WP Add Mime Types o File Upload Types (Soluzione 2).
- Mai come soluzione permanente:
ALLOW_UNFILTERED_UPLOADSinwp-config.php(Soluzione 3). - Flusso HEIC dell'iPhone: convertire sul dispositivo con SnapPress così il file è un JPEG prima di raggiungere WordPress (Soluzione 4).
Se pubblichi regolarmente foto dell'iPhone su WordPress, la conversione sul dispositivo elimina questa classe di errori alla radice. Inizia con SnapPress gratis, collega il sito con il plugin SnapPress Connect per WordPress, e la prossima volta che selezioni le foto nel foglio di condivisione verranno caricate come JPEG senza filtri, senza plugin e senza modifiche a wp-config.php sul server.
Domande frequenti
Perché WordPress blocca certi tipi di file?
WordPress valida ogni caricamento tramite wp_check_filetype_and_ext() confrontandolo con una lista di tipi consentiti fissa restituita da get_allowed_mime_types(). Il messaggio "motivi di sicurezza" significa che l'estensione del file o il tipo MIME non è in quella lista. Lo scopo originale era impedire agli attaccanti di caricare file PHP eseguibili camuffati da immagini, ma lo stesso filtro blocca formati legittimi come HEIC, AVIF e SVG che semplicemente non erano nella lista del core quando la tua versione di WordPress è stata rilasciata. La soluzione è aggiungere il tipo MIME tramite filtro oppure convertire il file in un formato consentito prima del caricamento.
È sicuro consentire tipi di file personalizzati?
In genere sì, ma con criterio. I formati immagine (HEIC, AVIF, WebP) e i contenitori multimediali (MP4, MOV) sono sicuri da aggiungere al filtro upload_mimes — non possono essere eseguiti come codice. SVG è l'unico formato immagine che richiede attenzione perché è XML e può contenere JavaScript inline; se consenti SVG, installa anche un plugin di sanificazione come Safe SVG. Non usare mai ALLOW_UNFILTERED_UPLOADS in wp-config.php come soluzione permanente. Quella costante disattiva tutti i controlli di sicurezza sui caricamenti di WordPress, inclusi quelli che bloccano il caricamento diretto di PHP.
Cosa è meglio: filtro PHP o plugin?
Per uno o due tipi MIME che gestisci tu, il filtro upload_mimes nel functions.php di un tema child o in un piccolo plugin personalizzato è la soluzione più pulita — cinque righe, nessun overhead di plugin, e sopravvive agli aggiornamenti del tema se scegli la via del plugin. Per cinque o più tipi di file o per chi non modifica PHP, un plugin come WP Add Mime Types o File Upload Types è la scelta giusta. L'impatto sulle prestazioni è identico perché entrambi eseguono lo stesso filtro WordPress sotto il cofano. Scegli in base a quanto sei a tuo agio nel modificare codice, non alla velocità.
Come consentire i file HEIC dell'iPhone?
Aggiungi questo snippet al tuo functions.php o a un plugin personalizzato: add_filter('upload_mimes', function($m) { $m['heic'] = 'image/heic'; $m['heif'] = 'image/heif'; return $m; });. WordPress 6.7 ha aggiunto HEIC alla lista del core, quindi su un'installazione 6.7+ recente questo filtro potrebbe essere già superfluo — ma molti hosting condivisi distribuiscono build personalizzate di WordPress che rimuovono ancora i tipi MIME più recenti. La via intelligente per le foto dell'iPhone è convertirle in JPEG sul dispositivo con uno strumento come SnapPress, così il file che arriva sul tuo server è un JPEG standard che nessuna installazione WordPress ha mai rifiutato.
Come consentire i file SVG in sicurezza?
Non limitarti ad aggiungere image/svg+xml al filtro upload_mimes. SVG è XML e può contenere JavaScript inline o riferimenti esterni che si attivano nei browser degli amministratori. Installa Safe SVG (plugin gratuito) che inserisce il tipo MIME SVG nella lista dei consentiti e al tempo stesso sanifica i file in arrivo tramite la libreria svg-sanitizer, rimuovendo tag script, gestori di eventi e riferimenti a entità esterne. Se l'SVG serve solo per i caricamenti di designer fidati, puoi anche limitare l'SVG agli amministratori combinando il filtro con un controllo current_user_can('manage_options').
Cosa fare se modificando functions.php il sito si rompe?
Prima di tutto, niente panico. La schermata bianca è quasi sempre un punto e virgola mancante o una parentesi non chiusa nello snippet che hai aggiunto. Connettiti via SFTP o tramite il file manager del tuo hosting, modifica wp-content/themes/tuo-tema/functions.php, rimuovi lo snippet difettoso, salva, e il sito torna online. Se non puoi modificare i file, il pannello di controllo di ogni hosting ha un'opzione "log errori PHP con un clic" o "ripristina tema". D'ora in poi, modifica functions.php tramite un tema child o — meglio — metti i tuoi filtri personalizzati in un piccolo plugin dedicato, così un errore di codice disattiva un plugin invece di rompere l'intero sito.