Il a été remarqué récemment une envie d’ajouter le support des fichiers SVG dans les médias de WordPress.
Magnifique, très bonne idée, le SVG est un très bon format pour le web et les performances de votre site.
La façon d’ajouter ce support est simple et rapide, un peu trop, voici 2 mauvais exemples :
- http://wpchannel.com/autoriser-envoi-fichiers-svg-wordpress/
- http://wpsnipp.com/index.php/functions-php/add-support-svg-inside-wordpress-media-uploader/ (en)
Cependant, il faut commencer par se demander pourquoi WordPress n’autorise pas de base l’upload des .svg, ce magnifique format d’image vectorielles.
Car si WordPress ne le gère pas, il doit y avoir une raison, non ? La réponse est dans le type mime vu dans les codes cités : « xml ».
Il existe un discussion ouverte le 02 mai 2013 sur le sujet dans un ticket du core.
Un SVG est un XML. Les XML sont des fichiers tout à fait lisible qu’un humain peut créer de toute pièce, il est possible de créer un SVG depuis une page blanche, bref.
Le soucis est que le XML peut contenir beaucoup de choses qui n’ont rien à voir avec les images, mais le fichier sera tout de même lu par WordPress.
Un exemple de faille XML est une XXE (voir https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing), ou une bombe d’entités imbriquées, ou corruption de la mémoire dan sle but de la faire déborder (overflow) etc ce qui est donc potentiellement possible dans un SVG, qui est un XML.
D’autres infos dans ce document provenant des l’OWASP : Active Content Injection with SVG Files
La solution est de nettoyer les XML (donc SVG) des DTD processing, XInclude, XSL, XSI et résolution.d’entités. Pour cela il existe une librairie https://github.com/alnorris/SVG-Sanitizer qui vous permet lors de l’upload de nettoyer tout ça.
Par chance un plugin qui fait tout ça existe : Safe SVG
Voilà, maintenant, vous êtes secure.