Kezdőlap > .NET 4 és Visual Studio 2010 > HTML postback ellenőrzés ASP.NET 4.0 és 4.5 esetén

HTML postback ellenőrzés ASP.NET 4.0 és 4.5 esetén

Az ASP.NET az 1.1 verziótól kezdve tartalmaz alapszintű beépített védelmet a cross-site scripting (XSS) támadások ellen. Ezzel úgy szoktunk szembesülni, hogy HTML markupot próbálunk postbackelni, ami szerencsére elhasal a request validation védelmen ezzel a hibával:

System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client

Persze erre többnyire szükség van, de néha – főleg WYSIWYG editorok esetén – mégis szeretnénk HTML kódot küldeni a szerverre.

ASP.NET 2.0 esetén a megoldás nagyon egyszerű volt, elég volt az adott oldalon a @Page direktívában a ValidateRequest=”false” beállítás. (Azt le se írom, hogy lehet az egész alkalmazásra kikapcsolni a web.config-ban.)

Az ASP.NET 4.0-ban viszont jelentős változtatások történtek, amit két módon szoktunk észrevenni:

  • Olyan helyeken is jön HttpRequestValidationException, ahol nem az oldal számára küldünk fel HTML adatokat, hanem cookie-ban vagy Ajax kérésben.
  • Hiába állítjuk át a ValidateRequest attribútumot a @Page direktívában, látszólag nem működik.

A változás lényege, hogy az ASP.NET 4.0 alapértelmezés szerint már nem csak a page számára küldött adatokat ellenőrzi, hanem a HTTP kérés minden részét. Mivel a korábbi @Page és web.config beállítások csak az oldalra vonatkoztak, ezért azok állítgatása már nincs hatással a 4.0 szerinti működésre.

Ha mégis szeretnénk egy oldalra kikapcsolni az ellenőrzést, akkor először a web.config-ban vissza kell állítani a működést 2.0 üzemmódra:

<location path="Admin/MyEditor.aspx">
   <system.web>
     <httpRuntime requestValidationMode="2.0" />
   </system.web> </location>

Ezek után a korábbi módon működik a ValidateRequest attribútum a @Page direktívában.

ASP.NET 4.5 újdonságok

Az ASP.NET 4.5 verzióban két fontosabb újdonság van: egyrészt finomabban hangolhatjuk, hogy mit szeretnénk ellenőriztetni, másrészt az ellenőrzést a platform alaposabb módon, az AntiXSS Library segítségével végzi el. A korábbi verziók legfőbb hiányossága az volt, hogy nem tudtuk mező szinten megadni, mely mezőket kívánjuk ellenőriztetni és melyeket nem (legalábbis WebForms esetén), azt pedig főleg nem, hogy mikor.

Ez most úgy változik, hogy az ellenőrzés alapértelmezés szerint (requestValidationMode="4.5") csak akkor és csak arra az adatra fut le, amikor a kódunk eléri a kérés adott részét. Ezt hívják késleltetett (vagy más néven lusta) ellenőrzésnek.

Az ellenőrzést immár kikapcsolhatjuk egyes vezérlőkre, mert a Control osztály kapott egy ValidateRequestMode tulajdonságot, ami ValidateRequestMode.Enabled, Disabled vagy Inherit értéket vehet fel.

Sőt, nem csak kikapcsolhatjuk az ellenőrzést, hanem meg is kerülhetjük azt. A HttpRequest osztály kapott egy csak olvasható Unvalidated tulajdonságot, amin keresztül egy UnvalidatedRequestClass példány formájában elérhetjük a kéréshez tartozó összes adatot (Cookies, Form, Headers, QueryString, Url stb.) anélkül, hogy az ellenőrzés beindulna. Ennek az az előnye, hogy a kódunk explicit módon kifejezi a szándékunkat, szó sem lehet véletlenről. Ekkor az ellenőrzést természetesen nekünk kell elvégeznünk!

 

About these ads

MINDEN VÉLEMÉNY SZÁMÍT!

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

You are commenting using your WordPress.com account. Kilépés / Módosítás )

Twitter kép

You are commenting using your Twitter account. Kilépés / Módosítás )

Facebook kép

You are commenting using your Facebook account. Kilépés / Módosítás )

Google+ kép

You are commenting using your Google+ account. Kilépés / Módosítás )

Kapcsolódás: %s

Követés

Értesítést küldünk minden új bejegyzésről a megadott e-mail címre.

Csatlakozz a 76 követőhöz

%d blogger ezt szereti: