Cross-site scripting
Cross-site scripting (XSS)
je metoda narušení WWW stránek využitím bezpečnostních chyb ve skriptech
(především neošetřené vstupy). Útočník díky těmto chybám v zabezpečení webové
aplikace dokáže do stránek podstrčit svůj vlastní javascriptový kód, což může
využít buď pouze k poškození vzhledu stránky, jejímu znefunkčnění anebo
dokonce k získávání citlivých údajů návštěvníků stránek, obcházení
bezpečnostních prvků aplikace a phishingu.
Ukázka útoku
Typ 1
Většinou se označuje jako lokální nebo
DOM based. Lze ji využít i na statických stránkách a jde o neošetřené
přenesení proměnné z URL adresy do javascriptu. Pro ilustraci si představme že
máme html stránku s následujícím kódem:
<SCRIPT>
var pos=document.URL.indexOf("jmeno=")+6;
document.write("Ahoj "+document.URL.substring(pos,document.URL.length));
</SCRIPT>
a na stránku vstoupíme přes standardní link
http://URL/stranka.html?jmeno=Alice
stránka standardně vypíše pouze „Ahoj Alice“.
Útočník však může link pozměnit na
http://URL/stranka.html?jmeno=<script>alert('Toto je úspěšný XSS útok.');</script>
a tím vykoná zákeřný kód.
Tento vektor útoku (stejně jako u typu 2) stojí
a padá na přístupu přes upravenou url a většinou je takto i snadno odhalitelný
pomocí prosté logiky. Pokud na stránku přijdete přes normální link, tak se
zachová tak jak má.
Typ 2
Označuje se jako non-persistent nebo
reflected. Je postaven na úpravě části URL která se interpretuje do
stránky jako její součást, například jako nadpis. Pokud do URL přidáme svůj
kód který není před interpretací upraven, tak se stránka v prohlížeči zachová,
jako by námi vložený kód byl její součástí. Tato zranitelnost se týká
především stránek s generovaným obsahem, pro příklad používáme php a někde ve
zdrojovém kódu máme
<?php echo $_GET['nadpis']; ?>
stačí uživateli podstrčit url upravenou
například takto:
http://URL/stranka.php?nadpis=cokoliv<script>alert('Toto je úspěšný XSS útok.');</script>
Tento typ útoku je nejběžnější.
Typ 3
Je označován jako persistent, stored
nebo second-order. Jde o nejnebezpečnější možnost, protože na takto
napadené stránky nemusíte vstoupit přes upravený link. Vzniká pokud je obsah
stránky generován z databáze. Náš javascript jednoduše vložíme třeba jako
součást komentáře - spolu s ním se uloží do databáze a je následně zobrazen
všem lidem, kteří si takovýto komentář zobrazí.
Ahoj, super <script>alert('Toto je úspěšný XSS útok.')</script>stránky!
Obrana
Na straně serveru
-
Při vkládání dat od uživatele do HTML stránky odfiltrovat „nebezpečné“ znaky z uživatelského vstupu resp. je převést na příslušné HTML entity (
<
za<
,>
za>
atd.), na což lze použít ad hoc funkce (např. v jazyce PHP je to funkce htmlspecialchars). -
Pokud se jedná sice o textové parametry, ale z omezené množiny hodnot, lze zvážit indexace této množiny a přenášení pouze číselného indexu, který lze před výstupem (podle možností daného skriptovacího jazyka) implicitně přetypovávat na celé číslo.
Na straně uživatele
Na straně uživatele lze vypnout JavaScript. Je
třeba si ale uvědomit, že o zamezení možnosti cross-side scriptingu by se měl
postarat skript na straně serveru.
Žádné komentáře:
Okomentovat