使用代码解析ViewSate的Base64值

ViewState的值的编码是Base64,默认状况下,是没有加密的,很容易读出。
ViewState的值可以加密,首先,确保Page的EnableViewStatMac=true,然后在Machine.Config中配置machineKey。
默认Machine.Config中的machineKey:
<!--  validation="[SHA1|MD5|3DES]" -->
  <machineKey
            validationKey="AutoGenerate,IsolateApps"
            decryptionKey="AutoGenerate,IsolateApps"
            validation="SHA1" />可以修改machineKey来使用某种加密方式,注意:加密由Machine Layer完成,要消耗系统资源。
本人关于加密ViewState没有测试。

通过使用浏览器,可以获取ViewState的隐藏内容,使用下面的代码,可以解析:
    private  string Base2String(string message)
        {
            byte[] by=System.Convert.FromBase64String(message);

            string dest=System.Text.Encoding.ASCII.GetString(by);
            return dest;

        }
//如果ViewState的值为"dDw5NDA0MTAzOTY7dDxwPGw8cGFzczs+O2w8RmlzaDs+Pjs7PjtsPF9jdGwwO2NoZWNrO19jdGwxO19jdGwyO19jdGwzO2NiOz4+";
string source="dDw5NDA0MTAzOTY7dDxwPGw8cGFzczs+O2w8RmlzaDs+Pjs7PjtsPF9jdGwwO2NoZWNrO19jdGwxO19jdGwyO19jdGwzO2NiOz4+";
Response.Write(Base2String(source));可以获得:t<940410396;t;l>;;>;l<_ctl0;check;_ctl1;_ctl2;_ctl3;cb;>>
其中,cb是指动态生成的CheckBox,共动态生成5个CheckBox,check是动态生成的第2个CheckBox的Id,其他的没有指定Id。

如果在Page的后台代码中完成上面的操作,需要重写SavePageStateToPersistenceMedium():
protected override void SavePageStateToPersistenceMedium(object viewState) 
        {
            // 调用基类的方法,完成基本操作
            base.SavePageStateToPersistenceMedium(viewState);
            // 获取ViewState的Base64值
            LosFormatter format = new LosFormatter();
            StringWriter writer = new StringWriter();
            format.Serialize(writer, viewState);
            string vsRaw = writer.ToString();
            Response.Write("ViewState Raw: " + Server.HtmlEncode(vsRaw));
            // 解析内容
            byte[] buffer = Convert.FromBase64String(vsRaw);
            string vsText = Encoding.ASCII.GetString(buffer);
            Response.Write("ViewState Text: " + Server.HtmlEncode(vsText));
        }通过获取ViewState的值,可以有助于理解ViewState的目的和作用,毕竟ViewState中的StateBag,可以存储页面级的变量,通过PostBack发送,是非常有用的。 
posted @ 2005-10-13 15:47  海潮的博客  阅读(500)  评论(0)    收藏  举报