如何在ASP.net中修改标签的视图状态

时间:2012-05-28 14:15:06

标签: asp.net

我在某处读到可以修改viewstate但我没有找到实现它的步骤。

例如:我想修改标签的视图状态,最初的标签是“Hi ..”,我想通过在回发时修改其viewstate来将其更改为“Hello”。

任何建议都将受到赞赏。

5 个答案:

答案 0 :(得分:3)

我猜你在谈论恶意修改__VIEWSTATE隐藏字段作为最终用户,而不是在代码中修改ViewState。这可能是也可能不可行(希望不是),具体取决于您的某些应用程序设置。要使其变得非常困难的两个是EnableViewStateMacViewStateEncryptionMode。这些通常在Web.config中的<pages>元素上设置。

ViewStateEncryptionMode 并非真正旨在阻止ViewState篡改;它意味着隐藏您在ViewState中嵌入的任何内容。例如,如果您决定向ViewState添加一些关于您自己的秘密信息(例如ViewState["secretinfo"] = "My social security number is xxx-xx-xxxx.";),那么任何出现并加载您的页面的用户都可以使用__VIEWSTATE字段并通过base64解码器运行它来查找您的社交安全号码 - 当然,除非您正在加密ViewState。

例如,here's a .aspx page I found通过简单的Google搜索。查看源代码,抓取ViewState,然后将其粘贴到此base64 decoder中。在一些丑陋的角色中,你会发现一堆纯文本。这个ViewState显然没有加密(这可能不是一件坏事)。

现在,如果您是一个好奇或可能是恶意的人,您可能会尝试修改您在ViewState中找到的一些文本,将其重新编码为base64,并将其重新放回__VIEWSTATE字段。 (在许多浏览器中,只需打开JS控制台并键入document.querySelector("[name=__VIEWSTATE]").value = "whatever your base64 text is";。)现在,当您提交表单时,页面将使用修改后的ViewState进行回发。

这是 EnableViewStateMac 发挥作用的地方。正如MSDN所说,应始终在生产站点上启用此设置,因为这是防止恶意用户篡改__VIEWSTATE字段的设置。为了过度简化,它基本上计算__VIEWSTATE值的哈希值(实际上是message authentication code)并将其与__VIEWSTATE一起发送。 (它嵌入在字符串的末尾,不会解码回一个漂亮的纯文本字符串。)如果修改__VIEWSTATE中的某些文本,该消息将不再与MAC匹配,.NET将捕获此信息并抛出在您甚至有机会处理请求之前的例外情况。

<强> TL; DR
只要你有EnableViewStateMac(你应该),你就无法真正修改__VIEWSTATE字段。

答案 1 :(得分:1)

您可以通过在代码隐藏中的标签对象上设置Text属性来更改标签的视图状态。内置ASP.NET控件的大多数属性都由viewstate支持,因此设置该属性将间接更改该控件的视图状态。

在.aspx中:

<asp:Label id="myLabel" Text="Hi.." />

在.aspx.cs中:

myLabel.Text = "Hello";

答案 2 :(得分:1)

你无法重置PostBack事件的值吗?如:


    mylabel.Text = "Hello";

答案 3 :(得分:1)

视图状态存储在页面上的隐藏字段中。虽然视图状态以散列格式[编码格式]存储数据,但使用正确的值进行修改并不容易,并且它将导致在视图状态中进行回火。

您需要修改Viewstate,您需要知道正确的编码和解码算法。

所以不要试图修改视图状态。

答案 4 :(得分:0)

简短的回答是你可以。

要修改视图状态,您基本上必须:

  1. 反序列化视图状态
  2. 识别与标签文本关联的键/值对(此时它是包含键/值对的Xml词典)
  3. 修改
  4. 序列化视图状态
  5. 本文对解析View State进行了更深入的研究。它还包括对可用于解析/解码View State的工具的引用:Understanding ASP.NET View State