Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento dokument popisuje funkci ověření požadavku ASP.NET, kde ve výchozím nastavení aplikace není možné zpracovávat nekódovaný obsah HTML odeslaný na server. Tuto funkci ověření požadavku je možné zakázat, když je aplikace navržená tak, aby bezpečně zpracovávala data HTML.
Platí pro ASP.NET 1.1 a ASP.NET 2.0.
Ověření požadavku, funkce ASP.NET od verze 1.1, brání serveru přijímat obsah obsahující kód HTML bez kódování. Tato funkce je navržená tak, aby zabránila některým útokům prostřednictvím injektáže skriptu, kdy se kód klientského skriptu nebo kód HTML můžou neúmyslně odesílat na server, ukládat a pak prezentovat jiným uživatelům. Přesto důrazně doporučujeme, abyste ověřili všechna vstupní data a kód HTML, pokud je to vhodné.
Například vytvoříte webovou stránku, která požádá o e-mailovou adresu uživatele a uloží tuto e-mailovou adresu do databáze. Pokud uživatel zadá <SCRIPT>alert("hello from script")</SCRIPT> místo platné e-mailové adresy, může se tento skript spustit, pokud nebyl obsah správně zakódován. Funkce ověření požadavku ASP.NET brání tomu, aby k tomu došlo.
Proč je tato funkce užitečná
Mnoho webů si není vědomo, že jsou otevřené pro jednoduché útoky prostřednictvím injektáže skriptů. Bez ohledu na to, jestli je účelem těchto útoků odstranit web zobrazením kódu HTML, nebo potenciálně spustit klientský skript, který přesměruje uživatele na web hackera, útoky prostřednictvím injektáže skriptů jsou problém, se kterým se musí vývojáři webu vypořádat.
Útoky prostřednictvím injektáže skriptů jsou obavy všech webových vývojářů, ať už používají ASP.NET, ASP nebo jiné technologie vývoje webu.
Funkce ověření požadavku ASP.NET aktivně brání těmto útokům tím, že neumožňuje zpracování nekódovaného obsahu HTML serverem, pokud se vývojář nerozhodne povolit tento obsah.
Co očekávat: Chybová stránka
Na následujícím snímku obrazovky je několik ukázkových ASP.NET kódu:
Spuštěním tohoto kódu se zobrazí jednoduchá stránka, která umožňuje zadat do textového pole nějaký text, kliknout na tlačítko a zobrazit text v ovládacím prvku popisek:
Pokud by byl zadán a odeslán JavaScript, například <script>alert("hello!")</script>, získali bychom výjimku.
Chybová zpráva uvádí, že byla zjištěna potenciálně nebezpečná hodnota Request.Form a poskytuje další podrobnosti v popisu, co přesně se stalo a jak změnit chování. Například:
Ověření požadavku zjistilo potenciálně nebezpečnou vstupní hodnotu klienta a zpracování požadavku bylo přerušeno. Tato hodnota může znamenat pokus o ohrožení zabezpečení vaší aplikace, například útok skriptování mezi weby. Ověření požadavku můžete zakázat nastavením validateRequest=false direktivy Page nebo v konfigurační části. Důrazně však doporučujeme, aby vaše aplikace v tomto případě explicitně zkontrolovala všechny vstupy.
Zakázání ověření žádosti na stránce
Chcete-li zakázat ověření požadavku na stránce, musíte nastavit validateRequest atribut direktivy Page na false:
<%@ Page validateRequest="false" %>
Upozornění
Pokud je ověření požadavku zakázané, lze obsah odeslat na stránku. Na vývojářovi stránky je zodpovědnost zajistit, že obsah je správně kódován nebo zpracován.
Zakázání ověření žádosti pro vaši aplikaci
Chcete-li zakázat ověření požadavku pro vaši aplikaci, musíte upravit nebo vytvořit soubor Web.config pro vaši aplikaci a nastavit atribut validateRequest oddílu <pages /> na false:
<configuration>
<system.web>
<pages validateRequest="false" />
</system.web>
</configuration>
Pokud chcete zakázat ověřování žádostí pro všechny aplikace na serveru, můžete tuto změnu provést v souboru Machine.config.
Upozornění
Pokud je ověřování požadavků zakázáno, obsah může být do aplikace odeslán; vývojář aplikace je zodpovědný za správné kódování nebo zpracování tohoto obsahu.
Následující kód se upraví tak, aby vypnul ověřování požadavků:
Pokud by do textového pole <script>alert("hello!")</script> byl zadán následující JavaScript, výsledek by byl:
Abychom tomu zabránili, musíme obsah kódovat kódem HTML, protože je vypnuté ověření požadavku.
Kódování obsahu HTML
Pokud jste zakázali ověřování požadavků, je vhodné obsah kódovat html, který se uloží pro budoucí použití. Kódování HTML automaticky nahradí libovolnou "<" nebo ">" (společně s několika dalšími symboly) odpovídající reprezentací zakódovanou ve formátu HTML. Například "
Obsah lze snadno kódovat html na serveru pomocí Server.HtmlEncode(string) rozhraní API. Obsah lze také snadno dekódovat HTML, to znamená vrátit zpět ke standardnímu HTML pomocí Server.HtmlDecode(string) metody.
Výsledkem je: