Click here to Skip to main content
11,502,547 members (66,651 online)
Click here to Skip to main content

Tagged as

ASP.NET: __VIEWSTATE Bug!

, 27 Oct 2010 CPOL 7.9K 2
Rate this:
Please Sign up or sign in to vote.
In this trick I present how to prevent an attack by a hacker on Asp.net website.
On Asp.net, the hidden Parameter __VIEWSTATE is passed each PostBack,So
if you've misconfigured your site and if a malicious user puts in the url: www.YourWebsite.com/default.aspx?__VIEWSTATE=i am hacker
the site goes down and worse could it be the code of the aspx page.


So when you try this on ASP.NET 2.0 WebSite:

http://www.YourWebsite.com/default.aspx?__VIEWSTATE=COUCOU!

You will have something like this:

Server Error in '/' Application. Runtime Error
Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine

Details: To enable the details of this specific error message to be viewable on remote machines, please create a tag within a "web.config" configuration file located in the root directory of the current web application. This tag should then have its "mode" attribute set to "Off"



the Solution is to Remove __VIEWSTATE parameter From Request.QueryString

protected override void OnInitComplete(EventArgs e)
        {
            base.OnInitComplete(e);
            if (Request.QueryString.ToString().Contains("__VIEWSTATE"))
            {// reflect to readonly
               propertyPropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
                // make collection editable
                isreadonly.SetValue(this.Request.QueryString, false, null);
                // remove
                this.Request.QueryString.Remove("__VIEWSTATE");
                // make collection readonly again
                isreadonly.SetValue(this.Request.QueryString, true, null);
            }
        }

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

kadaoui el mehdi
Architect
Belgium Belgium
in 2005, I started my career. Net and I could improve in this technology through the project WinFroms. Net 2.0 / MVC2 for "Nestle".

After obtaining my diploma MASTER "MBDS" from the University of Nice Sophia Anti-police, I left to Belguim to work as Expert .Net Analyst Developer.

Currently I specialize in architecture Asp.net to the lowest level.

Meanwhile I remain very active in the community. Net, I created the 1st community. Net Morocco "on Facebook and LinkedIn and twitter, called "Morocco .Net User Group (MONUG)"

Comments and Discussions

 
GeneralHi Kadaoui Where should this code be place? on every page t... Pin
Anton Pretorius28-Oct-10 1:06
memberAnton Pretorius28-Oct-10 1:06 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.150520.1 | Last Updated 27 Oct 2010
Article Copyright 2010 by kadaoui el mehdi
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid