SVG upload

Nahrávání SVG souborů do knihovny médií, bezpečně sanitizované proti XSS

WordPress SVG soubory ve výchozím stavu blokuje z dobrého důvodu — SVG je ve skutečnosti spustitelný XML dokument, který může obsahovat <script>. SVG upload povolí jejich nahrávání a každý soubor při uložení projde sanitizací, která odstraní nebezpečný kód a ponechá vizuální obsah beze změny.

Hlavní funkce

  • Sanitizace přes knihovnu enshrined/svg-sanitize — stejný nástroj používá i známý plugin Safe SVG
  • Odstraní <script> tagy, on* event handlery a další vektory pro XSS
  • Zachová vizuální obsah beze změny — cesty, tvary, barvy, viewBox zůstávají netknuté
  • Nahrávat SVG může jen uživatel s capability upload_files, stejně jako ostatní soubory
  • Nastavitelný práh velikosti souboru, od kterého se sanitizace chová jinak — u velkých/komplexních SVG trvá déle

Jak to funguje

Modul rozšíří seznam povolených MIME typů o image/svg+xml jen pro uživatele s oprávněním upload_files a zapojí se do wp_handle_upload_prefilter, kde ještě před finálním uložením spustí obsah souboru přes enshrined/svg-sanitize.

Sanitizer parsuje SVG jako XML a odstraňuje konkrétní nebezpečné uzly a atributy (script, on*, foreignObject apod.) podle whitelisty povolených elementů, místo aby soubor procházel obecným regexem — díky tomu zůstane grafika vizuálně beze změny. U souborů nad nastavený limit velikosti se sanitizace chová jinak, aby nešlo o zbytečné zatížení serveru u výjimečně velkých souborů.

Srovnání s alternativami

Alternativa k pluginům Safe SVG nebo SVG Support.

Časté dotazy

Je nahrávání SVG bezpečné, i když může obsahovat kód?
Ano — každý soubor projde sanitizací přes enshrined/svg-sanitize, která nebezpečný kód (script, event handlery) odstraní ještě před uložením do knihovny médií.
Změní se tím vzhled nahrané grafiky?
Ne, sanitizace maže jen nebezpečné prvky, cesty, tvary a barvy zůstávají beze změny.
Může SVG nahrát kdokoliv přihlášený?
Ne, jen uživatelé s oprávněním upload_files, stejně jako u jakéhokoliv jiného typu souboru.