最近在看到一个朋友使用工具能从ASP.Net 页面中 的 __VIEWSTATE 字段中取得页面中所有控件与控件中的数据。虽然还没有听说过因为ViewState 产生什么漏洞,但感觉不太有信心(给MS 的补丁吓着了)。
当然了,想要对它进行一个有效的防御。在默认方式下,ASP.NET 是使用 SHA1 算法对 ViewState 的 hashcode 进行编码的。在 machine.config 文件中的<machineKey> 段可以设定你所用的编码规则。
如:<machineKey validation="MD5" /> 使用MD5 编码规则
<machineKey validation="3DES" /> 使用 3DES 编码
还有一个特别的问题:在两台或者两台以上的服务器上共享 ViewState. 也就是生成ViewState 与读取它的不是同一台服务器。那就不得不使用 machineKey 中的validationKey 字段。并且在服务器间要使用相同的Key 。
如:<machineKey validation="SHA1" validationKey="
F3690E7A3143C185AB1089616A8B4D81FD55DD7A69EEAA3B32A6AE813ECEECD28DEA66A
23BEE42193729BD48595EBAFE2C2E765BE77E006330BC3B1392D7C73F" />