Arquivo SVG no WordPress. Será que vale a pena?

Permitir envio de arquivos SVG no WordPress é muito fácil, e há uma tonelada de posts explicando como fazê-lo. Geralmente simples assim:

function add_svg_to_upload_mimes( $upload_mimes ) {
$upload_mimes['svg'] = 'image/svg+xml';
$upload_mimes['svgz'] = 'image/svg+xml';
return $upload_mimes;
}
add_filter( 'upload_mimes', 'add_svg_to_upload_mimes', 10, 1 );

Parece simples e perfeito. #SQN

Porque WordPress não permite upload de imagens SVG

WordPress é um excelente CMS, muito fácil de usar e “simplesmente funciona” para a grande maioria dos usuários. Então, por que não é permitido formato SVG ? Por que é necessário modificações ou plugins para aceitar SVG?
Resposta simples: arquivos SVG são extremamente inseguro.

Suporte a SVG no WordPress foram discutidas no ticket #24251 por um longo tempo, e provavelmente será discutido muito mais tempo.

Ao contrário do que muitas pessoas acreditam, SVG não é um formato de imagem. É um formato de documento. Infelizmente para nós que queremos apenas gráficos vetoriais na web, também é um formato de documento poderoso e flexível. Como exemplo, arquivos SVG permite JavaScript para ser incorporado e leitores SVG, ou seja, o seu browser irá executá-lo.

Então, por que não podemos simplesmente executar o SVG através de um filtro que remove os elementos de script?

Porque XSS é apenas o problema mais simples. SVG é baseado em XML, abre-se para uma infinidade de problemas, por exemplo XXE, Billion laughs, quadratic blowup etc.

No ticket acima indicado assinalada Chris Christoff (chriscct7) explica:

Segurança de arquivos SVG não é um bug obscuro. Há várias vulnerabilidades bem conhecidas. Não é uma teoria, uma obscuridade, ou um desconhecido. Há bem mais de 8.000 registro de CVE isso tem a ver com todos os tipos de diversão e vulnerabilidades de segurança de arquivos SVG obscuros.

Mais adiante, Ian Dunn, aponta que um desinfetante SVG pode não ser tão fácil de escrever:

Mario Heiderich, um dos pesquisadores que popularizaram as questões de segurança, tentou escrever um desinfetante e é mais difícil do que ele imaginava.

O fato é que “as pessoas de segurança que têm vasta experiência em ataques web e XSS” ter escrito DOMPurify – “XSS desinfetante DOM-only, super-rápido, super-tolerante para HTML, MathML e SVG”. É, no entanto, escrito em JavaScript para o lado do usuário, por isso provavelmente não é algo que pode facilmente incluir no WordPress.

De qualquer forma, Daryll Doyle, usando DOMPurify como base, partes portadas de TI para PHP e lançou a biblioteca SVG-desinfetante . Ele também tem sido gentil o suficiente para liberar o plugin WordPress SVG seguro que tanto permite uploads de SVG e filtrar todos os arquivos SVG enviados através SVG-desinfetante. Daryll é muito claro sobre o fato de que este é apenas para servir como uma prova de conceito, mas parece ser bom em limpar vários vetores de ataque.

Chris Christoff também aponta:

Se WordPress quer permitir SVGs, a biblioteca sanitize não só precisa para funcionar bem, ele também teria de ser exaustivamente testado, em ambientes de produção em larga escala. Literalmente, SVGs são projetados para ser inseguro.

[…]

Em seguida  SVGs passar pelo núcleo do WordPress, a biblioteca iria examinar, picar e incitado por falhas de segurança.

Lembre-se que os poderoso WordPress é usado por mais de um quarto de todos os sites , por isso, a segurança não é algo que podemos tratar de forma leve.

Você ainda quer/precisa usar SVG?

Se você compreende os risco e ainda precisa deste recurso, por favor não use como o trecho de código dado como exemplo no início deste artigo. Por favor, use o plug-in de segurança SVG ! Ele irá, pelo menos, fazer alguma análise e limpeza.

linkoficial:
Post relacionados