ASP.NET:__VIEWSTATE 漏洞!





1.00/5 (1投票)
当你在 Asp.net 2.0 网站上尝试以下操作时:http://www.YouWebsite/default.aspx?__VIEWSTATE=COUCOU! 你会看到类似如下错误:服务器在 '/' 处发生错误
当你在 ASP.NET 2.0 网站上尝试
http://www.YouWebsite/default.aspx?__VIEWSTATE=COUCOU! 
你会看到类似如下信息
服务器在 '/' 应用程序中发生错误。
运行时错误
说明:服务器上发生了一个应用程序错误。 此应用程序当前的自定义错误设置阻止远程查看应用程序错误的详细信息(出于安全原因)。 但是,可以在本地服务器计算机上运行的浏览器中查看这些信息。
详细信息:要启用在远程计算机上查看此特定错误消息的详细信息,请在当前 Web 应用程序的根目录中位于 "web.config" 配置文件中创建一个 <customErrors> 标签。 此 <customErrors> 标签应将其 "mode" 属性设置为 "Off"。
解决方案  是从
 是从 Request.QueryString 中移除 __VIEWSTATE 参数 
protected override void OnInitComplete(EventArgs e)
{
    base.OnInitComplete(e);
    if (Request.QueryString.ToString().Contains("__VIEWSTATE"))
    {
        // reflect to readonly property
        PropertyInfo 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);
    }
} 

