【发布时间】:2014-02-12 19:52:13
【问题描述】:
在使用 4.0 框架的 asp.net webforms 应用程序中,我们将 ViewStateUserKey 设置为唯一值以阻止跨站点请求伪造漏洞。
我们最近未能通过漏洞测试,因为测试人员说他无法在 html 源代码中“观察到”该漏洞的存在。我希望我可以简单地解码 ViewState 并查看 ViewStateUserKey,但是,当我解码视图状态时(使用 Fiddler2 ViewState 检查器或在线解码器站点之一,例如http://ignatu.co.uk/ViewStateDecoder.aspx),我看不到 ViewStateUserKey。我可以看到视图状态中的值,混杂着一堆乱码,但 ViewStateUserKey 本身似乎被编码在乱码中。
例如,这里是一个带有 4 个值(Text1、Text2、Text3、Text4)的 DropDownList 控件的页面的解码视图状态(使用 Fiddler2 ViewState 检查器),您可以看到混入乱码的值:
�-1665646599dfddddfText11gText22gText33gText44gddd?"H~E* =91��;��O!��;�O�B�g
这是同一个页面,ViewStateUserKey 设置为静态值“cat”(我意识到 ViewStateUserKey 设置为静态值时没有用)。
�-1665646599dfddddfText11gText22gText33gText44gddd�Gpb����c��uy�l����F3��>�h�~
视图状态末尾的乱码发生了变化;看来 ViewStateUserKey 隐藏在乱码中。但是有没有办法向漏洞测试人员证明这一点?
注意,如果我将 enableViewStateMAC 设置为“false”(这在生产中当然不会这样做),我会得到不同的乱码,但我仍然无法在 html 源代码中看到 ViewStateUserKey。
【问题讨论】: