By |
Fix: File Type Not Permitted — SnapPress

"Lo siento, este tipo de archivo no está permitido por razones de seguridad." — Cómo solucionarlo en WordPress (2026)

TL;DR

Tu extensión o tipo MIME no está en la lista de permitidos de WordPress. Solución limpia: añadir un filtro upload_mimes. Si son fotos HEIC del iPhone: conviértelas a JPEG en el dispositivo con SnapPress.

Respuesta corta: El error significa que WordPress no reconoció la extensión del archivo o el tipo MIME como uno de sus formatos permitidos. La solución permanente más limpia es un pequeño filtro upload_mimes en functions.php o en un plugin personalizado. Si estás subiendo fotos HEIC del iPhone, el camino más simple es convertirlas a JPEG en el dispositivo antes de subirlas usando una herramienta como SnapPress. Nunca actives ALLOW_UNFILTERED_UPLOADS en wp-config.php como solución permanente: desactiva todas las comprobaciones de seguridad de subida que tiene WordPress.

Si te has topado con "Lo siento, este tipo de archivo no está permitido por razones de seguridad" en WordPress, no estás solo. Es uno de los mensajes de error de WordPress más buscados del mundo, y su redacción es engañosa: WordPress no detectó nada malicioso. Simplemente consultó una lista de permitidos fija y tu extensión de archivo o tipo MIME no está en ella.

Esta guía explica por qué ocurre el error, las cuatro formas probadas en producción de solucionarlo de forma permanente, los compromisos de seguridad de cada enfoque y una solución específica por tipo de archivo. Al final sabrás exactamente qué método encaja en tu situación y cómo evitar romper tu sitio en el proceso.

WordPress file type not permitted error
WordPress bloquea los tipos de archivo no permitidos con este error de seguridad.

Por qué ocurre este error (la lista de permitidos de tipos MIME)

Cada subida de WordPress pasa por la función wp_check_filetype_and_ext(). Esa función compara dos cosas contra una lista de permitidos fija:

  1. La extensión del archivo (la parte después del punto en el nombre del archivo)
  2. El tipo MIME detectado por la extensión finfo de PHP

Si cualquiera de las dos no está en la lista que devuelve get_allowed_mime_types(), la subida se rechaza con "Lo siento, este tipo de archivo no está permitido por razones de seguridad." La lista se define en wp-includes/functions.php y contiene unas 60 entradas por defecto: imágenes comunes, vídeo, audio, archivos comprimidos y formatos de documento.

El marco de "seguridad" existe porque la razón original de la lista de permitidos era impedir que un atacante subiera código ejecutable (archivos PHP, shell scripts) y que WordPress lo sirviera de vuelta como una URL. En ese sentido estricto, el filtro es una frontera de seguridad real. Pero el mismo filtro bloquea una larga lista de formatos legítimos que simplemente no se incluyeron en la lista del núcleo:

  • HEIC del iPhone (añadido en WordPress 6.7, finales de 2024)
  • WebP (añadido en WordPress 5.8, 2021)
  • AVIF (añadido en WordPress 6.5, marzo de 2024)
  • SVG (nunca añadido — requiere plugin o filtro)
  • Fuentes WOFF/WOFF2 (nunca añadidas)
  • STL, OBJ, GLB, formatos de modelos 3D (nunca añadidos)

Si tu versión de WordPress es anterior a la incorporación de un formato dado, o si tu hosting ejecuta una compilación personalizada que elimina los tipos MIME más nuevos, te encontrarás con el error incluso en un formato que debería estar soportado.

Solución temporal: comprueba primero la extensión y el archivo

Antes de cambiar la configuración del servidor, descarta dos causas simples:

La extensión es incorrecta o falta

Los archivos exportados desde apps de mensajería a veces pierden su extensión o adquieren una genérica como .bin. Haz clic derecho sobre el archivo, renómbralo con la extensión correcta (.jpg, .png, etc.) y prueba a subirlo de nuevo. Si funciona, el contenido del archivo estaba bien; el problema era solo la extensión.

El archivo está dañado

Si tu navegador descargó el archivo desde un chat o un correo y la descarga se interrumpió, el archivo puede estar truncado. El finfo de PHP detectará el tipo MIME equivocado: el archivo parece basura binaria en lugar de una imagen. Vuelve a descargar el original desde la fuente y reinténtalo.

Estas dos comprobaciones llevan 30 segundos y resuelven alrededor del 20% de los casos de "este tipo de archivo no está permitido" que veo. El 80% restante son problemas reales de la lista de permitidos que necesitan una de las soluciones permanentes siguientes.

Las 4 soluciones permanentes

Solución 1: Añadir el tipo MIME con el filtro upload_mimes (recomendado)

Esta es la solución de producción más limpia. Añade lo siguiente al functions.php de tu tema hijo o, mejor, a un pequeño plugin personalizado para que el cambio sobreviva a las actualizaciones 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);

Sustituye heic e image/heic por la extensión y el tipo MIME que necesites. El primer filtro añade el tipo a la lista de permitidos. El segundo filtro resuelve un bug sutil: en muchos servidores, el módulo finfo de PHP devuelve los tipos MIME poco habituales como application/octet-stream, lo que hace que wp_check_filetype_and_ext() rechace la subida aunque la extensión esté permitida. El segundo filtro fuerza el reconocimiento cuando la extensión del archivo coincide.

Para una explicación más detallada centrada específicamente en HEIC, consulta WordPress Allowed MIME Types: How to Enable HEIC Uploads (guía 2026, en inglés).

Solución 2: Usar un plugin (WP Add Mime Types)

Si no quieres editar PHP, el plugin WP Add Mime Types (gratuito, más de 80.000 instalaciones, mantenido activamente desde 2014) te ofrece un panel de ajustes con dos columnas: extensión y tipo MIME. Añade una fila, guarda y listo. El plugin ejecuta el mismo filtro upload_mimes por debajo.

Dos alternativas probadas en producción:

  • File Upload Types by WPForms — interfaz de casillas de verificación con entradas predefinidas para HEIC, WebP, AVIF, SVG y más de 40 formatos. Ideal si no sabes de memoria la cadena del tipo MIME.
  • Disable Real MIME Check — un plugin de una sola función que desactiva el paso de validación finfo de PHP. Útil en casos límite donde la extensión está en la lista de permitidos pero finfo informa mal el tipo MIME. Úsalo con moderación; el coste es una validación más débil.

Solución 3: ALLOW_UNFILTERED_UPLOADS en wp-config.php (avanzado, con advertencia)

WordPress tiene una salida de emergencia en wp-config.php:

define('ALLOW_UNFILTERED_UPLOADS', true);

Con esta constante activada, los administradores pueden subir cualquier tipo de archivo, incluidos scripts PHP. Se omite toda comprobación de tipo MIME.

No uses esto en producción. La constante desactiva todas las comprobaciones de seguridad de subida que tiene WordPress. Un atacante que comprometa cualquier cuenta de nivel administrador puede subir archivos PHP directamente a wp-content/uploads y ejecutarlos. Incluso configuraciones que hoy parecen seguras suelen tener una cuenta olvidada de "suscriptor-con-rol-de-administrador" procedente de un plugin antiguo o de una importación.

El único uso legítimo es un entorno de desarrollo local donde estés depurando el comportamiento de subida. Coméntalo antes de pasarlo a staging.

Solución 4: Convertir en el dispositivo con SnapPress (para usuarios de iPhone)

Para las subidas de fotos del iPhone en concreto, la solución más resistente es convertir HEIC a JPEG en el dispositivo antes de que el archivo llegue siquiera a tu servidor. SnapPress lee HEIC de tu fototeca, lo decodifica usando el pipeline de imagen de iOS que Apple mantiene en cada versión de iOS, y sube un JPEG a tu Biblioteca de Medios de WordPress a través de la API REST.

Tu functions.php queda intacto. Tu filtro upload_mimes queda intacto. El archivo que llega a tu servidor es un JPEG estándar que todas las instalaciones de WordPress soportan desde 2003.

Este es el camino que recomiendo a cualquiera que gestione varios sitios WordPress o que no se sienta cómodo editando PHP. El compromiso es que solo resuelve el caso del HEIC del iPhone; para otros tipos de archivo sigues necesitando una de las soluciones 1-3.

Soluciones específicas por tipo de archivo

El tipo MIME exacto importa. Aquí tienes las entradas probadas en producción para los formatos más comunes que se topan con "Lo siento, este tipo de archivo no está permitido por razones de seguridad."

HEIC (fotos del iPhone)

$mimes['heic'] = 'image/heic';
$mimes['heif'] = 'image/heif';

Añade siempre los dos. Los iPhone producen ocasionalmente archivos .heif para secuencias de imágenes y ráfagas. Tras añadir el filtro, la subida a WordPress se completa, pero la mayoría de los navegadores de los visitantes no pueden renderizar HEIC, así que también necesitas conversión en el servidor (ShortPixel) o conversión en el cliente (SnapPress). Consulta Fotos HEIC del iPhone y WordPress para la historia completa.

WebP

$mimes['webp'] = 'image/webp';

WordPress 5.8 (mediados de 2021) añadió WebP a la lista de permitidos del núcleo. Si tu versión de WordPress está al día, este filtro es innecesario. Si estás en una compilación más antigua o en un hosting con restricciones personalizadas, el filtro desbloquea la subida de WebP.

SVG

$mimes['svg'] = 'image/svg+xml';
$mimes['svgz'] = 'image/svg+xml';

No te quedes solo en el filtro. SVG es XML y puede contener JavaScript inline que se ejecuta en los navegadores de los administradores. Instala siempre el plugin Safe SVG (gratuito), que tanto añade SVG a la lista de permitidos como sanea los archivos entrantes mediante la biblioteca svg-sanitizer, eliminando etiquetas script, manejadores de eventos y referencias a entidades externas. Si solo deben subir SVG diseñadores de confianza, envuelve el filtro en una comprobación current_user_can('manage_options').

AVIF

$mimes['avif'] = 'image/avif';

WordPress 6.5 (marzo de 2024) añadió AVIF a la lista de permitidos del núcleo. El filtro solo hace falta en instalaciones antiguas o en hostings personalizados. AVIF comprime alrededor de un 20% más que HEIC con calidad perceptual equivalente y tiene un soporte de navegadores más amplio, lo que lo convierte en el mejor formato de entrega si tu servidor tiene libavif.

Vídeo MP4

$mimes['mp4'] = 'video/mp4';
$mimes['m4v'] = 'video/mp4';
$mimes['mov'] = 'video/quicktime';

Estos suelen estar en la lista de permitidos del núcleo, pero si obtienes el error específicamente con MP4, a menudo es porque el tipo MIME del archivo se detecta como video/x-m4v o application/octet-stream. Añade el filtro wp_check_filetype_and_ext de la Solución 1 para forzar el reconocimiento.

Archivos ZIP

$mimes['zip'] = 'application/zip';
$mimes['7z'] = 'application/x-7z-compressed';

ZIP está en la lista de permitidos del núcleo por defecto, pero algunos plugins de seguridad (Wordfence, Sucuri) la anulan porque los ZIP pueden contener contenido ejecutable. Añádelo a la lista blanca en los ajustes del plugin además del filtro de WordPress.

Consideraciones de seguridad (por qué está restringido por defecto)

WordPress restringe los tipos de archivo por defecto por una razón central: los archivos PHP en wp-content/uploads pueden ejecutarse como código en la mayoría de las configuraciones de servidor. Si WordPress aceptara cualquier extensión de archivo, un atacante que comprometiera cualquier cuenta de autor o colaborador podría subir un shell .php, acceder a su URL y ejecutar código arbitrario en tu servidor.

La lista de permitidos es la defensa más barata. Aunque fallen todas las demás capas de seguridad — reutilización de contraseñas, vulnerabilidad de un plugin, compromiso de la cadena de suministro —, el filtro de subida impide que el PHP llegue jamás al directorio de uploads.

Tres principios al ampliar la lista de permitidos:

  1. Añade solo lo que realmente necesitas. Si subes HEIC una vez al mes, añade HEIC. No permitas de forma preventiva todos los formatos que podrías llegar a necesitar.
  2. Nunca permitas extensiones de PHP, ejecutables ni scripts. .php, .phtml, .exe, .sh, .cgi, .pl — ninguna de ellas pertenece a wp-content/uploads bajo ninguna circunstancia.
  3. Sanea los formatos que admiten contenido incrustado. SVG (JavaScript), PDF (acciones JavaScript), HTML (todo). Usa un plugin de saneamiento o convierte a un formato de imagen plano al subir.

Diagnosticar el error cuando la Solución 1 no funciona

Añadiste el filtro, subiste el archivo y sigues viendo "Lo siento, este tipo de archivo no está permitido por razones de seguridad." Tres cosas que comprobar:

El filtro está en el lugar equivocado

Asegúrate de que el archivo que contiene el filtro se está cargando realmente. Si lo pusiste en el functions.php de tu tema hijo pero el tema padre es el activo, el snippet no se ejecuta. Muévelo a un plugin personalizado para eliminar la dependencia del tema.

Un plugin de seguridad está anulando la lista de permitidos

Wordfence, Sucuri, iThemes Security y plugins similares añaden su propia validación de subidas por encima del núcleo de WordPress. Añade el tipo MIME a la lista blanca en los ajustes del plugin de seguridad además de en tu filtro upload_mimes.

El finfo de PHP informa el tipo MIME equivocado

Este es el fallo silencioso más común. La extensión del archivo está en la lista de permitidos, pero el módulo finfo de PHP devuelve application/octet-stream en lugar del tipo MIME esperado. WordPress ve una discrepancia y rechaza. El filtro wp_check_filetype_and_ext de la Solución 1 cubre este caso. Verifica que está incluido junto al filtro upload_mimes, no por separado.

Para una lista de diagnóstico más amplia sobre fallos de subida en WordPress, consulta Cannot Upload Images to WordPress? 8 Causes and How to Fix Each One (en inglés).

Subidas de fotos desde iPhone: el flujo de trabajo que evita este error por completo

Todo lo anterior sirve para subir HEIC en bruto, SVG, AVIF y otros formatos directamente a la Biblioteca de Medios de WordPress. Para los flujos de fotos del iPhone en concreto, hay un camino más simple: convertir en el dispositivo antes de subir.

SnapPress lee HEIC de tu fototeca, lo decodifica usando el pipeline de imagen de iOS que Apple mantiene y actualiza con cada versión de iOS, y sube un JPEG a tu Biblioteca de Medios de WordPress a través de la API REST. Como el archivo que llega es un JPEG estándar, nunca vuelves a ver "Lo siento, este tipo de archivo no está permitido por razones de seguridad" — ni en este sitio ni en ningún otro sitio WordPress que conectes.

Para flujos de publicación en lote del iPhone a WordPress, consulta la comparativa en Subir imágenes en lote a WordPress desde el móvil: la guía completa y el repaso de apps en Las 5 mejores apps para subir fotos a WordPress comparadas.

Resumen

  • El error significa que tu extensión de archivo o tipo MIME no está en la lista de permitidos de WordPress que devuelve get_allowed_mime_types().
  • Solución más limpia: añadir un filtro upload_mimes en un plugin personalizado (Solución 1).
  • Solución sin código: plugin WP Add Mime Types o File Upload Types (Solución 2).
  • Nunca como solución permanente: ALLOW_UNFILTERED_UPLOADS en wp-config.php (Solución 3).
  • Flujo HEIC del iPhone: convertir en el dispositivo con SnapPress para que el archivo sea JPEG antes de llegar a WordPress (Solución 4).

Si publicas fotos del iPhone en WordPress con regularidad, el camino de la conversión en el dispositivo elimina esta clase de error por completo. Empieza con SnapPress gratis, conéctalo con el plugin SnapPress Connect para WordPress, y la próxima vez que selecciones fotos en la hoja de compartir se subirán como JPEG sin filtros, sin plugins y sin cambios en el wp-config.php del servidor.

Preguntas frecuentes

¿Por qué WordPress bloquea ciertos tipos de archivo?

WordPress valida cada subida a través de wp_check_filetype_and_ext() contra una lista de permitidos fija que devuelve get_allowed_mime_types(). El mensaje de "razones de seguridad" significa que tu extensión de archivo o tipo MIME no está en esa lista. El propósito original era impedir que un atacante subiera archivos PHP ejecutables disfrazados de imágenes, pero el mismo filtro bloquea formatos legítimos como HEIC, AVIF y SVG que simplemente no estaban en la lista del núcleo cuando se publicó tu versión de WordPress. La solución es añadir el tipo MIME mediante un filtro o convertir el archivo a un formato permitido antes de subirlo.

¿Es seguro permitir tipos de archivo personalizados?

En general sí, pero sé selectivo. Los formatos de imagen (HEIC, AVIF, WebP) y los contenedores multimedia (MP4, MOV) son seguros de añadir al filtro upload_mimes: no pueden ejecutarse como código. SVG es el único formato de imagen que requiere cuidado porque es XML y puede contener JavaScript inline; si permites SVG, instala también un plugin de saneamiento como Safe SVG. Nunca uses ALLOW_UNFILTERED_UPLOADS en wp-config.php como solución permanente. Esa constante desactiva todas las comprobaciones de seguridad de subida que tiene WordPress, incluidas las que bloquean la subida directa de PHP.

¿Qué es mejor: filtro PHP o plugin?

Para uno o dos tipos MIME que tú controlas, el filtro upload_mimes en el functions.php de un tema hijo o en un pequeño plugin personalizado es lo más limpio: cinco líneas, sin sobrecarga de plugin, y sobrevive a las actualizaciones del tema si usas la vía del plugin. Para cinco o más tipos de archivo, o para usuarios que no editan PHP, un plugin como WP Add Mime Types o File Upload Types es la elección correcta. El impacto en el rendimiento es idéntico porque ambos ejecutan el mismo filtro de WordPress por debajo. Elige según tu comodidad editando código, no por velocidad.

¿Cómo permitir archivos HEIC del iPhone?

Añade a tu functions.php o a un plugin personalizado un filtro upload_mimes que añada 'heic' => 'image/heic' y 'heif' => 'image/heif'. WordPress 6.7 añadió HEIC a la lista de permitidos del núcleo, así que en una instalación 6.7+ reciente este filtro puede ser ya innecesario, pero muchos hostings compartidos sirven compilaciones personalizadas de WordPress que siguen eliminando los tipos MIME más nuevos. El camino inteligente para las fotos del iPhone es convertirlas a JPEG en el dispositivo con una herramienta como SnapPress, de modo que el archivo que llega a tu servidor sea un JPEG estándar que ninguna instalación de WordPress ha rechazado jamás.

¿Cómo permitir archivos SVG de forma segura?

No te limites a añadir image/svg+xml al filtro upload_mimes. SVG es XML y puede contener JavaScript inline o referencias externas que se ejecutan en los navegadores de los administradores. Instala Safe SVG (plugin gratuito), que tanto añade el tipo MIME SVG a la lista de permitidos como sanea los archivos entrantes mediante la biblioteca svg-sanitizer, eliminando etiquetas script, manejadores de eventos y referencias a entidades externas. Si solo necesitas SVG para subidas de diseñadores de confianza, también puedes restringir SVG a administradores combinando el filtro con una comprobación current_user_can('manage_options').

¿Qué hacer si editar functions.php rompe el sitio?

Primero, no entres en pánico. La pantalla blanca es casi siempre un punto y coma que falta o un corchete sin cerrar en el snippet que añadiste. Conéctate por SFTP o con el gestor de archivos de tu hosting, edita wp-content/themes/tu-tema/functions.php, elimina el snippet roto, guarda, y el sitio vuelve. Si no puedes editar archivos, el panel de control de cualquier hosting tiene una opción de "registro de errores PHP con un clic" o de "restablecer tema". De cara al futuro, edita functions.php a través de un tema hijo o, mejor, coloca tus filtros personalizados en un pequeño plugin personalizado, de modo que un error de código desactive un plugin en lugar de romper todo el sitio.