Cross-site scripting (XSS) je typ bezpečnostního zneužití, který útočníkům umožňuje vkládat škodlivé skripty na webové stránky pomocí klientského kódu. Představuje značnou hrozbu, protože ji útočníci mohou použít k předstírání identity uživatelů, získání přístupu k citlivým údajům nebo dokonce ke změně obsahu stránky na webu.
Je tak nebezpečný, že v roce 2021 byl číslo dva ve společném seznamu 25 nejnebezpečnějších slabin. To znamená, že pokud vytváříte webové stránky, musíte vědět o skriptování mezi stránkami a o tom, jak mu zabránit.
Jak funguje skriptování mezi stránkami?
Než pochopíte, jak skriptování mezi weby funguje, je důležité vědět, co znamená zásada stejného původu (SOP). SOP je zásada bezpečnostního mechanismu, která omezuje web (jeden původ) ve čtení nebo zápisu na jiný web (jiný původ). Zabraňuje škodlivým webům v odesílání škodlivého kódu na důvěryhodné weby.
Útoky cross-site scripting se snaží obejít tuto zásadu tím, že využívají neschopnost prohlížeče rozlišovat mezi legitimním kódem HTML a škodlivým kódem. Útočník může například vložit kód JavaScript do cílového webu. Předpokládejme, že prohlížeč spustí kód a útočník získá přístup k tokenům relace, souborům cookie a dalším citlivým datům.
Existují tři typy cross-site skriptování, které hackeři používají k prolomení webových stránek: odražené, uložené a DOM XSS.
Jak zabránit Cross-Site Scriptingu v Node
Níže jsou uvedeny některé kroky, které můžete provést, abyste zabránili skriptování mezi weby v Node.
Dezinfikovat vstup
Aby mohli útočníci provést útok XSS, musí být schopni odeslat data do vaší webové aplikace a zobrazit je uživateli. Prvním preventivním opatřením, které musíte provést, je dezinfekce všech vstupů, které vaše aplikace obdrží od svých uživatelů. To je zásadní, protože detekuje falešná data dříve, než je server spustí. Můžete to udělat ručně nebo použít podobný nástroj validátor což proces urychluje.
Můžete například použít validátor k escapování značek HTML v uživatelském vstupu, jak je uvedeno níže.
import validátor z "validátor";
nech userInput = `Jane <načtení skriptu="upozornění ('XSS hack');"></script>`;
nechat sanitizedInput = validator.escape (userInput);
Pokud byste spustili výše uvedený kód, dezinfikovaný výstup by byl tento.
Jane < načtení skriptu=" upozornění ('hackování XSS');"></ skript>
Omezit vstup uživatele
Omezte typ vstupu, který může uživatel odeslat ve vašem formuláři prostřednictvím ověření. Pokud máte například vstupní pole pro e-mail, povolte zadání pouze ve formátu e-mailu. Tímto způsobem minimalizujete pravděpodobnost, že útočníci odešlou špatná data. K tomu můžete využít i balíček validátoru.
Implementujte zásady souborů cookie pouze pro HTTP
Soubory cookie ukládají data do místní mezipaměti a odeslat jej zpět na server přes HTTP. Útočníci k nim ale mohou přes prohlížeč přistupovat i pomocí JavaScriptu, takže jsou snadným cílem.
Soubor cookie pouze HTTP je zásada, která brání skriptům na straně klienta v přístupu k datům souborů cookie. To znamená, že i když vaše aplikace obsahuje chybu zabezpečení a útočník ji zneužije, nebude mít přístup k souboru cookie.
Zde je příklad toho, jak můžete implementovat zásadu souborů cookie pouze HTTP v Node.js pomocí Express:
aplikace.použití(vyjádřit.zasedání({
tajný: "tajný",
cookie: {
httpOnly: skutečný,
zajistit: skutečný
}
}))
Pokud se útočník pokusil získat přístup k cookie pomocí souboru httpOnly nastavenou na hodnotu true, jak je uvedeno výše, obdrží prázdný řetězec.
Cross-Site Scripting je snadný cíl pro hackery
I když je zajištění bezpečnosti vaší aplikace zásadní, její implementace může být komplikovaná. V tomto příspěvku jste se dozvěděli o útocích skriptování mezi weby a o tom, jak jim můžete v Node zabránit. Vzhledem k tomu, že útočníci využívají zranitelnosti vaší aplikace k vložení škodlivého kódu do vašeho serveru, vždy zajistěte dezinfekci uživatelského vstupu. Tímto způsobem odstraníte škodlivý kód dříve, než jej aplikace uloží nebo spustí.