By 37Design |

WordPress: "Desculpe, este tipo de arquivo não é permitido por razões de segurança" — Como resolver (2026)

Resposta curta: O erro significa que o WordPress não reconheceu a extensão do arquivo ou o tipo MIME como um dos seus formatos permitidos. A correção permanente mais limpa é um pequeno filtro upload_mimes no functions.php ou em um plugin customizado. Se você está enviando fotos HEIC do iPhone, o caminho mais simples é converter para JPEG no dispositivo antes do upload usando uma ferramenta como SnapPress. Nunca habilite ALLOW_UNFILTERED_UPLOADS no wp-config.php como correção permanente — isso desabilita todas as verificações de segurança de upload que o WordPress tem.

Se você atingiu "Desculpe, este tipo de arquivo não é permitido por razões de segurança" no WordPress, você não está sozinho. É uma das mensagens de erro do WordPress mais pesquisadas no mundo, e o texto é enganoso — o WordPress não detectou nada malicioso. Simplesmente atingiu uma lista de permissões fixa e sua extensão de arquivo ou tipo MIME não está na lista.

Este guia percorre por que o erro acontece, as quatro maneiras testadas em produção de corrigi-lo permanentemente, as compensações de segurança de cada abordagem e uma solução específica por tipo de arquivo. Ao final você saberá exatamente qual método se encaixa na sua situação e como evitar quebrar seu site no processo.

Por que esse erro acontece (a lista de permissões de tipos MIME)

Todo upload do WordPress passa pela função wp_check_filetype_and_ext(). Essa função compara duas coisas contra uma lista de permissões fixa:

  1. A extensão do arquivo (a parte após o ponto no nome do arquivo)
  2. O tipo MIME detectado pela extensão finfo do PHP

Se qualquer um deles não estiver na lista retornada por get_allowed_mime_types(), o upload é rejeitado com "Desculpe, este tipo de arquivo não é permitido por razões de segurança". A lista é definida em wp-includes/functions.php e contém cerca de 60 entradas por padrão — imagens comuns, vídeo, áudio, arquivos compactados e formatos de documento.

O enquadramento de "segurança" existe porque a razão original da lista de permissões era impedir que atacantes enviassem código executável (arquivos PHP, shell scripts) e tivessem o WordPress servindo-os de volta como uma URL. Nesse sentido estreito, o filtro é uma fronteira de segurança real. Mas o mesmo filtro bloqueia uma longa lista de formatos legítimos que simplesmente não foram incluídos na lista do núcleo:

  • HEIC do iPhone (adicionado no WordPress 6.7, final de 2024)
  • WebP (adicionado no WordPress 5.8, 2021)
  • AVIF (adicionado no WordPress 6.5, março de 2024)
  • SVG (nunca adicionado — requer plugin ou filtro)
  • Fontes WOFF/WOFF2 (nunca adicionadas)
  • STL, OBJ, GLB formatos de modelo 3D (nunca adicionados)

Se sua versão do WordPress é anterior à adição de um formato, ou se sua hospedagem roda uma compilação personalizada que remove tipos MIME mais novos, você atinge o erro mesmo em um formato que deveria ser suportado.

Solução temporária: verifique primeiro a extensão e o arquivo

Antes de alterar configurações do servidor, descarte duas causas simples:

A extensão está errada ou ausente

Arquivos exportados de apps de mensagens às vezes perdem sua extensão ou recebem uma genérica como .bin. Clique com o botão direito no arquivo, renomeie para a extensão correta (.jpg, .png, etc.) e tente o upload novamente. Se funcionar, o conteúdo do arquivo estava bem; apenas a extensão era o problema.

O arquivo está corrompido

Se seu navegador baixou o arquivo de um chat ou e-mail e o download foi interrompido, o arquivo pode estar truncado. O finfo do PHP detectará o tipo MIME errado — o arquivo parece lixo binário em vez de uma imagem. Baixe novamente o original da fonte e tente novamente.

Essas duas verificações levam 30 segundos e resolvem cerca de 20% dos relatórios de "este tipo de arquivo não é permitido" que vejo. Os 80% restantes são problemas reais de lista de permissões que precisam de uma das correções permanentes abaixo.

As 4 correções permanentes

Correção 1: Adicionar o tipo MIME via filtro upload_mimes (Recomendado)

Esta é a correção de produção mais limpa. Adicione o seguinte ao functions.php do seu tema filho, ou — melhor — a um pequeno plugin customizado para que a mudança sobreviva às atualizações de 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);

Substitua heic e image/heic por qualquer extensão e tipo MIME que você precisar. O primeiro filtro adiciona o tipo à lista de permissões. O segundo filtro lida com um bug sutil: em muitos servidores, o módulo finfo do PHP retorna tipos MIME incomuns como application/octet-stream, o que faz com que wp_check_filetype_and_ext() rejeite o upload mesmo que a extensão seja permitida. O segundo filtro força o reconhecimento quando a extensão do arquivo corresponde.

Para uma explicação mais profunda focada especificamente em HEIC, veja Tipos MIME permitidos no WordPress: Como habilitar uploads HEIC (Guia 2026).

Correção 2: Usar um plugin (WP Add Mime Types)

Se você não quer editar PHP, o plugin WP Add Mime Types (gratuito, 80.000+ instalações, mantido ativamente desde 2014) oferece um painel de configurações com duas colunas: extensão e tipo MIME. Adicione uma linha, salve, pronto. O plugin roda o mesmo filtro upload_mimes por baixo dos panos.

Duas alternativas testadas em produção:

  • File Upload Types by WPForms — UI baseada em checkboxes com entradas predefinidas para HEIC, WebP, AVIF, SVG e mais de 40 outros formatos. Melhor se você não souber a string do tipo MIME de cabeça.
  • Disable Real MIME Check — um plugin de recurso único que desativa o passo de validação finfo do PHP. Útil em casos extremos onde a extensão está na lista de permissões mas o finfo reporta incorretamente o tipo MIME. Use com moderação; a compensação é validação mais fraca.

Correção 3: wp-config.php ALLOW_UNFILTERED_UPLOADS (Avançado, com aviso)

O WordPress tem uma escotilha de escape no wp-config.php:

define('ALLOW_UNFILTERED_UPLOADS', true);

Com essa constante definida, administradores podem fazer upload de qualquer tipo de arquivo, incluindo scripts PHP. Toda verificação de tipo MIME é ignorada.

Não use isso em produção. A constante desativa todas as verificações de segurança de upload que o WordPress tem. Um atacante que comprometer qualquer conta de nível administrativo pode fazer upload de arquivos PHP diretamente para wp-content/uploads e executá-los. Mesmo configurações que parecem seguras hoje frequentemente têm uma conta esquecida "assinante-com-papel-de-administrador" de um plugin antigo ou importação.

O único uso legítimo é um ambiente de desenvolvimento local onde você está depurando o comportamento de upload. Comente antes de fazer push para o staging.

Correção 4: Converter no dispositivo com SnapPress (para usuários de iPhone)

Para uploads de fotos do iPhone especificamente, a correção mais resiliente é converter HEIC para JPEG no dispositivo antes que o arquivo chegue ao seu servidor. O SnapPress lê HEIC da sua biblioteca de Fotos, decodifica usando o pipeline de imagem do iOS que a Apple mantém em todas as versões do iOS, e envia um JPEG para sua Biblioteca de Mídia do WordPress via a API REST.

Seu functions.php permanece intocado. Seu filtro upload_mimes permanece intocado. O arquivo que chega ao seu servidor é um JPEG padrão que toda instalação WordPress desde 2003 tem suportado.

Este é o caminho que recomendo para qualquer um que gerencia múltiplos sites WordPress ou que não se sente confortável editando PHP. A compensação é que ele só resolve o caso de HEIC do iPhone — para outros tipos de arquivo você ainda precisa de uma das correções 1-3.

Soluções específicas por tipo de arquivo

O tipo MIME exato importa. Aqui estão as entradas testadas em produção para os formatos mais comuns que atingem "Desculpe, este tipo de arquivo não é permitido por razões de segurança."

HEIC (fotos do iPhone)

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

Sempre adicione ambos. iPhones ocasionalmente produzem arquivos .heif para sequências de imagens e rajadas. Depois de adicionar o filtro, o upload do WordPress é concluído — mas a maioria dos navegadores dos visitantes não consegue renderizar HEIC, então você também precisa de conversão no servidor (ShortPixel) ou conversão no cliente (SnapPress). Veja Fotos HEIC do iPhone e WordPress para a história completa.

WebP

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

O WordPress 5.8 (meados de 2021) adicionou WebP à lista de permissões do núcleo. Se sua versão do WordPress for atual, esse filtro é desnecessário. Se você estiver em uma compilação mais antiga ou em uma hospedagem com restrições personalizadas, o filtro desbloqueia o upload de WebP.

SVG

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

Não pare no filtro. SVG é XML e pode conter JavaScript inline que dispara nos navegadores dos administradores. Sempre instale o plugin Safe SVG (gratuito) que tanto permite SVG quanto sanitiza arquivos recebidos através da biblioteca svg-sanitizer, removendo tags script, handlers de evento e referências de entidade externa. Se apenas designers confiáveis devem fazer upload de SVG, envolva o filtro em uma verificação current_user_can('manage_options').

AVIF

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

O WordPress 6.5 (março de 2024) adicionou AVIF à lista de permissões do núcleo. O filtro só é necessário em instalações mais antigas ou hospedagens personalizadas. O AVIF comprime cerca de 20% menor que o HEIC com qualidade perceptual equivalente e tem suporte mais amplo em navegadores, o que o torna o melhor formato de entrega se seu servidor tiver libavif.

Vídeo MP4

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

Geralmente estão na lista de permissões do núcleo, mas se você está recebendo o erro especificamente em MP4, frequentemente é porque o tipo MIME do arquivo está sendo detectado como video/x-m4v ou application/octet-stream. Adicione o filtro wp_check_filetype_and_ext da Correção 1 para forçar o reconhecimento.

Arquivos ZIP

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

ZIP está na lista de permissões do núcleo por padrão, mas alguns plugins de segurança (Wordfence, Sucuri) o substituem porque ZIPs podem conter conteúdo executável. Coloque na lista branca nas configurações do plugin, bem como no filtro do WordPress.

Considerações de segurança (Por que é restrito por padrão)

O WordPress restringe tipos de arquivo por padrão por uma razão central: arquivos PHP em wp-content/uploads podem ser executados como código na maioria das configurações de servidor. Se o WordPress aceitasse qualquer extensão de arquivo, um atacante que comprometesse qualquer conta de autor ou colaborador poderia fazer upload de um shell .php, acessar sua URL e executar código arbitrário no seu servidor.

A lista de permissões é a defesa mais barata. Mesmo que todas as outras camadas de segurança falhem — reutilização de senha, vulnerabilidade de plugin, comprometimento da cadeia de suprimentos — o filtro de upload impede que PHP chegue ao diretório de uploads.

Três princípios ao adicionar à lista de permissões:

  1. Adicione apenas o que você realmente precisa. Se você faz upload de HEIC uma vez por mês, adicione HEIC. Não permita preventivamente todos os formatos que possa eventualmente precisar.
  2. Nunca permita extensões de PHP, executável ou script. .php, .phtml, .exe, .sh, .cgi, .pl — nenhum desses pertence a wp-content/uploads em quaisquer circunstâncias.
  3. Sanitize os formatos que permitem conteúdo incorporado. SVG (JavaScript), PDF (ações JavaScript), HTML (tudo). Use um plugin de sanitização ou converta para um formato de imagem plano no upload.

Diagnosticando o erro quando a Correção 1 não funciona

Você adicionou o filtro, fez upload do arquivo, ainda vê "Desculpe, este tipo de arquivo não é permitido por razões de segurança." Três coisas para verificar:

O filtro está no lugar errado

Certifique-se de que o arquivo contendo o filtro está realmente sendo carregado. Se você o colocou no functions.php do seu tema filho mas o tema pai está ativo, o snippet não roda. Mova para um plugin customizado para remover a dependência do tema.

Um plugin de segurança está substituindo a lista de permissões

Wordfence, Sucuri, iThemes Security e plugins similares adicionam sua própria validação de upload em cima do núcleo do WordPress. Coloque o tipo MIME na lista branca nas configurações do plugin de segurança, bem como no seu filtro upload_mimes.

O finfo do PHP está reportando o tipo MIME errado

Essa é a falha silenciosa mais comum. A extensão do arquivo está na lista de permissões, mas o módulo finfo do PHP retorna application/octet-stream em vez do tipo MIME esperado. O WordPress vê uma incompatibilidade e rejeita. O filtro wp_check_filetype_and_ext da Correção 1 lida com esse caso. Verifique se está incluído junto com o filtro upload_mimes, não separadamente.

Para uma lista de verificação diagnóstica mais ampla sobre falhas de upload do WordPress, veja Como Resolver Erros de Upload de Imagem no WordPress.

Uploads de fotos do iPhone: o fluxo de trabalho que evita esse erro inteiramente

Tudo acima é para fazer upload de HEIC bruto, SVG, AVIF e outros formatos diretamente para a Biblioteca de Mídia do WordPress. Para fluxos de trabalho de fotos do iPhone especificamente, há um caminho mais simples: converter no dispositivo antes do upload.

O SnapPress lê HEIC da sua biblioteca de Fotos, decodifica usando o pipeline de imagem do iOS que a Apple mantém e atualiza a cada lançamento do iOS, e envia um JPEG para sua Biblioteca de Mídia do WordPress via a API REST. Como o arquivo que chega é um JPEG padrão, você nunca mais vê "Desculpe, este tipo de arquivo não é permitido por razões de segurança" — nem neste site, nem em qualquer outro site WordPress que você conecte.

Para fluxos de trabalho de publicação em massa do iPhone para WordPress, veja a comparação em Upload em Massa de Imagens para o WordPress pelo Celular e o resumo de apps em 5 Melhores Apps para Upload de Fotos no WordPress.

Recapitulação

  • O erro significa que sua extensão de arquivo ou tipo MIME não está na lista de permissões do WordPress retornada por get_allowed_mime_types().
  • Correção mais limpa: adicionar um filtro upload_mimes em um plugin customizado (Correção 1).
  • Correção sem código: plugin WP Add Mime Types ou File Upload Types (Correção 2).
  • Nunca como correção permanente: ALLOW_UNFILTERED_UPLOADS no wp-config.php (Correção 3).
  • Fluxo HEIC do iPhone: converter no dispositivo com SnapPress para que o arquivo seja JPEG antes de chegar ao WordPress (Correção 4).

Se você publica fotos do iPhone no WordPress regularmente, o caminho de conversão no dispositivo elimina essa classe de erro inteiramente. Comece com SnapPress grátis, conecte via o plugin SnapPress Connect para WordPress, e na próxima vez que você selecionar fotos na folha de compartilhamento elas farão upload como JPEG sem filtro, sem plugin, sem alterações no wp-config.php do servidor.

Perguntas Frequentes

Por que o WordPress bloqueia certos tipos de arquivo?

O WordPress valida todo upload através de wp_check_filetype_and_ext() contra uma lista de permissões fixa retornada por get_allowed_mime_types(). A mensagem "razões de segurança" significa que sua extensão de arquivo ou tipo MIME não está nessa lista. O propósito original era impedir que atacantes enviassem arquivos PHP executáveis disfarçados de imagens, mas o mesmo filtro bloqueia formatos legítimos como HEIC, AVIF e SVG que simplesmente não estavam na lista do núcleo quando sua versão do WordPress foi lançada. A correção é adicionar o tipo MIME via filtro ou converter o arquivo para um formato permitido antes do upload.

É seguro permitir arquivos personalizados?

Geralmente sim, mas seja seletivo. Formatos de imagem (HEIC, AVIF, WebP) e contêineres de mídia (MP4, MOV) são seguros para adicionar ao filtro upload_mimes — eles não podem ser executados como código. SVG é o único formato de imagem que requer cuidado porque é XML e pode conter JavaScript inline; se você permitir SVG, também instale um plugin de sanitização como Safe SVG. Nunca use ALLOW_UNFILTERED_UPLOADS no wp-config.php como correção permanente. Essa constante desativa todas as verificações de segurança de upload que o WordPress tem, incluindo as que bloqueiam upload direto de PHP.

Qual o melhor método: filtro PHP ou plugin?

Para um ou dois tipos MIME que você controla, o filtro upload_mimes em um functions.php de tema filho ou um pequeno plugin customizado é mais limpo — cinco linhas, sem sobrecarga de plugin, sobrevive a atualizações de tema se você usar o caminho do plugin. Para cinco ou mais tipos de arquivo ou para usuários que não editam PHP, um plugin como WP Add Mime Types ou File Upload Types é a escolha certa. O impacto de desempenho é idêntico porque ambos rodam o mesmo filtro do WordPress por baixo dos panos. Escolha com base em se você está confortável editando código, não em velocidade.

Como liberar arquivos HEIC do iPhone?

Adicione este snippet ao seu functions.php ou a um plugin customizado: um filtro upload_mimes que adiciona 'heic' => 'image/heic' e 'heif' => 'image/heif'. O WordPress 6.7 adicionou HEIC à lista de permissões do núcleo, então em uma instalação 6.7+ recente esse filtro pode já ser desnecessário — mas muitas hospedagens compartilhadas entregam compilações personalizadas do WordPress que ainda removem tipos MIME mais novos. O caminho inteligente para fotos do iPhone é converter para JPEG no dispositivo com uma ferramenta como SnapPress para que o arquivo que chega ao seu servidor seja um JPEG padrão que nenhuma instalação WordPress jamais rejeitou.

Como liberar arquivos SVG com segurança?

Não apenas adicione image/svg+xml ao filtro upload_mimes. SVG é XML e pode conter JavaScript inline ou referências externas que disparam nos navegadores dos administradores. Instale Safe SVG (plugin gratuito) que tanto permite o tipo MIME SVG quanto sanitiza arquivos recebidos através da biblioteca svg-sanitizer, removendo tags script, handlers de evento e referências de entidade externa. Se você só precisa de SVG para uploads de designers confiáveis, também pode restringir SVG a administradores combinando o filtro com uma verificação current_user_can('manage_options').

O que fazer se a edição de functions.php quebrar o site?

Primeiro, não entre em pânico. A tela branca é quase sempre um ponto e vírgula faltando ou um colchete não correspondido no snippet que você adicionou. Conecte-se via SFTP ou o gerenciador de arquivos da sua hospedagem, edite wp-content/themes/seu-tema/functions.php, remova o snippet quebrado, salve, e o site volta. Se não puder editar arquivos, o painel de controle de toda hospedagem tem uma opção "log de erros PHP de um clique" ou "redefinir tema". Daqui em diante, edite functions.php através de um tema filho ou — melhor — coloque seus filtros customizados em um pequeno plugin customizado para que um erro de código desative um plugin em vez de quebrar o site inteiro.