代码改变世界

ASP.NET中的ViewState内容格式分析

2004-11-03 09:27  灵感之源  阅读(...)  评论(... 编辑 收藏

声明:这个随笔没有什么技术价值,纯粹好奇之作


一直对ASP.NET生成的页面中一大串的ViewState内容比较好奇,不过懒于去反编译ASP.NET。这个东西形如:

<input type="hidden" name="__VIEWSTATE" value="dDw2Mjg5MzIzMTI7dDxwPGw8VHlwZUlEO0FjdGlvbklEO0tleXdvcmRzO1Nob3dDb2xvcjtTb 这里省略n多字符"


刚才心血来潮,稍微分析了一下这个东西,初步结论:

1、得益于平时比较喜欢研究文件/流/字符串格式,很快便判断也证实了__VIEWSTATE的Value是经过BASE64编码的;

2、用BASE64解码可以得出形如:
t<628932312;t<p<l<TypeID;ActionID;Keywords;ShowColor;SortExp;>;l<-2;-2;\e;True;CreatedDate;>>;l<i<1>;>;l<t<;l<i<5>;i<9>;i<19>;i<21>;i<23>;i<25>;i<29>;>;l<t<t<;t<i<11><@0<p<p<l<CurrentPageIndex;PageSize;PageCount;_!ItemCount;_!DataSourceItemCount;DataKeys;>这里省略了n多字符。可以看出这个编码是使用了关键字符“<”、“>”、“;”来作为分隔符号,大家还可以看见前面的“TypeID;ActionID;Keywords;ShowColor;SortExp”就是我在后代码中用到的ViewState:TypeID、ActionID、Keywords、ShowColor、SortExp。假如我使用了敏感字符作为名称呢?譬如ViewState("<a>;"),不知道会怎样?应该会先编码,微软的人不会差到这么基本的问题都没有考虑。

先分析到这里,上班:)今晚继续。