Přehled zneužití skriptů

Visual Studio 2010

Z hlediska prohlížeče je webová stránka prostě jen dlouhý řetězec znaků. Prohlížeč zpracovává řetězec sekvenčně, některé znaky zobrazí a jiné znaky interpretuje podle zvláštních pravidel, sem patří například <b> a <script>. Pokud uživatel se zločinnými úmysly vloží do stránky některé tyto speciální znaky, prohlížeč nerozpozná, že tam tyto znaky nemají co dělat a zpracuje je jako součást stránky.

Jednoduchý skript zneužívající vlastností prohlížeče by mohl fungovat tímto způsobem. Pokud aplikace umožňuje uživatelům zasílat komentáře o nejnovějších filmech tak, aby si je ostatní uživatelé mohli přečíst, mohl by škodlivý skript postupovat takto:

  1. Aplikace zobrazí formulář, do něhož uživatelé zadávají komentáře. Zákeřný uživatel do něj pak napíše komentář, který v těle obsahuje blok <script>.

  2. Formulář je zaslán a komentář zákeřného uživatele se uloží do databáze.

  3. Jiný uživatel navštíví web. Při načítání stránky jsou načteny komentáře z databáze a umístěny na stránku. Blok <script> zákeřného uživatele je zapsán na stránku, jako by šlo o běžný textový komentář.

  4. Když prohlížeč dalšího uživatele stránku zobrazí, dostane se k bloku <script> a spustí jej.

Skripty může zákeřný uživatel zneužít i dalšími způsoby. Většina škodlivých skriptů vyžaduje, aby aplikace přijala škodlivý vstup a injektovala jej (nebo jej zaslala) na stránku, kde jej později prohlížeč spustí. Potenciální poškození takovýmto škodlivým skriptem závisí na tom, jaký skript je spouštěn. Může se jednat o triviální záležitost, například o obtěžující zprávu, která se objeví v prohlížeči. Ale škodlivý skript může napáchat i vážné škody ukradením souborů cookie, kradením uživatelských vstupů (například hesla) a v případě špatného internetového zabezpečení může skript spustit na počítači uživatele nativní kód.

Informace o předcházení zneužití skriptů naleznete v tématu Postup: Ochrana před zneužitím skriptů ve webových aplikacích pomocí kódování HTML na řetězce.

PoznámkaPoznámka

Technologie ASP.NET pomáhá chránit proti zneužití skripty, které se maskují jako adresy URL tím, že vyhledává potenciálně nebezpečné řetězce, například „ <! "," < / ", a" <? ". Další informace naleznete v tématu HtmlEncode a ValidateRequest.

Alternativou zneužití skriptů je provedení škodlivých SQL příkazů. Tato situace může nastat, pokud aplikace vyzve uživatele k zadání informací a poté zahrne uživatelský vstup do řetězce představujícího příkaz SQL. Aplikace se může například dotázat na uživatelské jméno s úmyslem spustit například následující příkaz:

"Select * From Customers where CustomerName = " & txtCustomerName.Value

Ale zákeřný uživatel, který má jisté znalosti o databázích, by mohl využít textové pole k zadání zapouzdřeného příkazu SQL s uživatelským jménem, který by mohl vypadat takto:

Select * From Customers Where CustomerName = 'a' Delete From 
Customers Where CustomerName > ''

Při spuštění tohoto příkazu by došlo k porušení databáze.

Primární obrana proti zneužití skriptů je naprostá nedůvěra ke všem informacím přicházejícím od uživatele. Předpokládejte, že všechna data, která do vaší aplikace přichází z prohlížeče, mohou obsahovat škodlivý skript.

Stejně tak vždy, když vpisujete řetězec do své stránky, měli byste brát v úvahu, že by tento řetězec mohl obsahovat škodlivý skript (pokud tento řetězec sami programově nevytvoříte). Například při načítání řetězců z databáze byste měli počítat s tím, že mohou obsahovat škodlivý skript. Většina vývojářů, kteří kladou důraz na zabezpečení, nevěří ani svým vlastním databázím. Teoreticky totiž existuje šance, že záškodník již našel způsob, jak s jejich databází manipulovat.

Technologie ASP.NET vám s obranou proti škodlivým skriptům pomáhá několika způsoby:

  • Technologie ASP.NET ověřuje požadavek proti dotazovacímu řetězci a proměnným ve formuláři a také oproti hodnotám v souborech cookie. Pokud ve výchozím nastavení obsahuje aktuální Request elementy v HTML kódu nebo jisté HTML znaky (například &#151;), framework stránky technologie ASP.NET vyvolá chybu.

  • Pokud ve své aplikaci chcete zobrazit řetězce, ale nevěříte jim, použijte na ně kódování jazyka HTML ve chvíli, kdy jsou řetězce zaslány v odpovědi zpět. Díky kódování se například značka <b> změní na &lt;b&gt;. To můžete využít, pokud zobrazované řetězce pocházejí z databáze, jejíž obsah nemůžete s jistotou označit za důvěryhodný.

  • Pokud chcete, aby vaše aplikace přijímala některé příkazy jazyka HTML (například některé formátovací instrukce od uživatelů), měli byste jazyk HTML kódovat na úrovni klienta a teprve poté jej zaslat na server. Další informace naleznete v tématu Postup: Ochrana před zneužitím skriptů ve webových aplikacích pomocí kódování HTML na řetězce.

  • Abyste zvýšili svou ochranu před zneužitím SQL příkazů, nikdy nevytvářejte SQL dotazy pomocí zřetězení řetězců. Namísto toho využijte parametrizovaných dotazů a jednotlivým objektům parametrů přiřaďte uživatelské vstupy.

  • Vždy ověřujte vstupní formulář oproti sadě očekávaných hodnot a ověřte formátování/typ řetězce. Například, pokud je určitá proměnná ve formuláři typu integer, použijte metodu TryParse k ověření, zda je hodnota skutečně typu integer a ověřte, zda je zadaná hodnota v přijatelném rozsahu pomocí ověřování rozsahu.

Obsah vytvořený komunitou

Přidat
Zobrazit: