Co je skriptování mezi stránkami?

Jedna z nejběžnějších tříd zranitelnosti na webových stránkách se nazývá „Cross-Site Scripting“ nebo „XSS“. Chyby zabezpečení XSS jsou místa, kde může uživatel způsobit spuštění JavaScriptu. Existuje řada různých variant zranitelnosti XSS s různou mírou závažnosti.

Problém s tím, že útočník může spouštět JavaScript v relacích jiných uživatelů, je ten, že útočník může s webem, který vidí oběti, udělat cokoli. To zahrnuje přesměrování obětí na externí webové stránky, krádež ověřovacích tokenů a sledování podrobností o platbách.

Nejzávažnější formou zranitelnosti XSS je „Uložené“ nebo „Trvalé“ skriptování napříč weby. je možné, že útočník vytvoří užitečné zatížení XSS a poté jej odešle, takže se uloží do databáze. S exploitem XSS uloženým v databázi je pak možné, že ovlivní ostatní uživatele v širokém časovém období.

Další formou Cross-Site Scriptingu je „Odražená“, tento typ se v žádném okamžiku neukládá, místo toho je obsah zahrnut v prohlížeči. Tento typ XSS je obvykle součástí phishingových útoků, kdy se útočník pokouší oklamat oběť, aby klikla na škodlivý odkaz.

Obecně platí, že většina útoků XSS má užitečné zatížení v určitém okamžiku odesláno na server, ale některé útoky ano čistě na straně klienta, nikdy se neodesílají na server a místo toho ovlivňují pouze stranu klienta JavaScript. Toto se nazývá XSS založené na DOM, protože zůstává v objektovém modelu dokumentu JavaScript nebo DOM. Tento typ zranitelnosti je obzvláště obtížné identifikovat a vyřešit, protože server nikdy neuvidí zneužití, a proto je nelze zaprotokolovat.

Technikou prevence proti zranitelnostem XSS je v minulosti filtrovat všechna data odeslaná uživateli pomocí seznamů blokovaných zpráv k odmítnutí všech zpráv se smysluplnými znaky nebo slovy v JavaScriptu. To vedlo k závodům ve zbrojení při hledání obchvatů pro filtr a zároveň bránilo některým legitimním uživatelským příspěvkům. Správným řešením je použít entity HTML ke kódování dat odeslaných uživatelem. s povolenými moduly entit HTML jsou znaky automaticky zakódovány do formátu, ve kterém je prohlížeč ví, že je má zobrazit jako správné symboly, ale nepovažuje je za kód.