【问题标题】:Can I see the ViewStateUserKey in html source?我可以在 html 源代码中看到 ViewStateUserKey 吗?
【发布时间】: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。

【问题讨论】:

    标签: asp.net antiforgerytoken


    【解决方案1】:

    ViewStateUserKey 值通常不包含在负载本身中。相反,它是一个特殊的修饰符,在计算加密 MAC(有效负载末尾的乱码)时与有效负载混合。但是由于 MAC 函数是不可逆的,因此无法推断给定 MAC 的 ViewStateUserKey 是什么。

    【讨论】:

    • 如果你有来源,你可以指点我(说明 ViewStateUserKey 是散列的并且不可观察),我将不胜感激。
    • 我是负责 System.Web.dll 中加密代码路径的开发人员,所以请使用我作为主要来源。
    【解决方案2】:

    不,因为 ViewStateUserKey 存储在 cookie 中,并在提交时使用表单中的密钥进行验证。

    【讨论】:

    • 在 cookie 中?有没有办法看到它?我在使用 Fiddler 的任何 cookie 中都看不到任何内容。根据 MSDN,ViewStateUserKey 存储为 ViewState 变量:“在与当前页面关联的视图状态变量中为单个用户分配一个标识符。”
    猜你喜欢
    • 1970-01-01
    • 2010-09-20
    • 2016-04-04
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 2017-09-19
    • 2013-04-23
    • 1970-01-01
    相关资源
    最近更新 更多