TD;DR verze Javascriptové moduly nemají nástroj jak zkontrolovat integritu souboru vkládaného do vaší stránky. Bezpečnost se ale i tak dá zajistit pomocí směsice unikátního chování modulů, modul se totiž nikdy nevkládá 2x a v případě že první pokus o vložení selže na základě špatné integrity, druhý pokus se již neprovádí. Funguje jak pro klasický tak dynamický import modulu.
Javascriptové moduly? Co to je?
Tento článek pojednává o tom, jak javascriptové moduly zabezpečit pomocí subresource integrity, o tom, co to vlastně je ten modul si můžete přečíst v dnešním důkladně zpracovaný článek na Vzhůru dolů.
Proč? Aneb motivace.
Sice to všichni víme, ale malé opáčko: HTML stránka od počátku standardů do současnosti (kdy už máme jen 1 standard :) ) může skládat z více nezávislých částí. Obrázky, scripty, css, všechno mohou být samostatné soubory, klidně z jiné domény, kterou nemám pod svou správou. Tady právě může nastat problém, když z cizího zdroje vložím něco co potřebuji, může se stát, že za nějaký čas se na tom samém umístění objeví škodlivý kód a já ho stále vkládám a nemám ani nejmenší tušení, co se děje. Stejně tak může škodlivý kód být nějak zapodmínkovaný (třeba zobrazit škodlivý kód podle hlavičky jen uživatelům se starším prohlížečem, který je možné napadnout). A změnu součástí může provést také někdo kdo má přístup ke komunikaci, v případě nešifrovaného spojení… to už se vlastně v dnešní době stát nemůže, tak nic. Ale změnu zdrojů vám může ve vašem PC provést různý malware či nebezpečný plugin do prohlížeče. A že se to skutečně stává, útočníci takto rádi buď integrují těžbu kryptoměn nebo jen změní id toho kdo inkasuje peníze za reklamy na webu, případně vloží spoustu nových dalších reklam, které by na webu jinak neměli co dělat. Možnosti zneužití jsou samozřejmě neomezené a jak se říká fantazii se meze nekradou. Říká se to takhle, ne ?