Click here to Skip to main content
15,886,110 members
Articles / Web Development / ASP.NET
Tip/Trick

ASP.NET: __VIEWSTATE Bug!

Rate me:
Please Sign up or sign in to vote.
3.40/5 (4 votes)
27 Oct 2010CPOL 18.8K   2   3
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

C#
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)


Written By
Architect
Belgium Belgium
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralReason for my vote of 1 "the site goes down" No, that single... Pin
Richard Deeming2-Nov-10 7:33
mveRichard Deeming2-Nov-10 7:33 
GeneralI think that the best place to do that, it's to create an Ht... Pin
kadaoui el mehdi28-Oct-10 6:05
kadaoui el mehdi28-Oct-10 6:05 
GeneralHi Kadaoui Where should this code be place? on every page t... Pin
Spyker5528-Oct-10 1:06
Spyker5528-Oct-10 1:06 

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

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