asp.net - 修改 View 状态中的项目 - 这样做安全吗?

标签 asp.net viewstate

我仍然是一个相对菜鸟,但是我对我所做的一个小测试的结果感到惊讶。

我想在 View 状态中存储字符串列表。到目前为止,当我想要修改列表时,我从 View 状态检索它,执行 List.Add 并将其保存回 View 状态。

但是,我决定做一个简单的测试,如下:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<string> s = new List<string>();
            s.Add("abc");
            s.Add("def");
            ViewState.Add("test", s);

            s.Add("one");
            s.Add("two");
        }
        var t = (List<string>)ViewState["test"];

        foreach (var str in t)
        {
            Response.Write(str + "<br>");
        }
    }

如您所见,我创建了一个列表,将其添加到 View 状态,然后修改该列表。令我惊讶的是,即使在回发之后,列表也会在 viewstate 中被修改。

问题是,这样做是否安全,如果是的话,这是否被认为是不好的做法。

提前致谢。

最佳答案

ViewState 仅在回发时序列化到客户端页面。 在此之前,它保存在内存中并可以安全地进行编辑。

我经常使用 ViewState 作为属性的支持者:

public Class1 MyClass1
{
    get { return (Class1)ViewState["MyClass1"]; }
    set { ViewState["MyClass1"] = value; }
}

一般来说,我不认为这样做是不好的做法,但以下情况除外:

  1. 存储敏感数据 - 由于数据是序列化到客户端的,因此很容易被更改。
  2. 大量数据 - 由于数据会持久保存到客户端,因此大量数据会显着增加页面加载时间。

关于asp.net - 修改 View 状态中的项目 - 这样做安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17999226/

相关文章:

javascript - 单击按钮时隐藏 div

c# - 如何在回发时显示div

c# - 在 ASP.NET 中使用 MachineKey

asp.net - 如果工作进程回收,ViewState 变量会中断

c# - 是否可以在 PostBack C# PCI Compliance 后显示信用卡号

c# - 创建后删除文件

c# - 如何将列表复制到新列表,或在 C# 中按值检索列表

asp.net-mvc - 回发不适用于 ASP.NET 路由( View 状态 MAC 验证失败)

ASP.NET MVC-有没有一种方法可以模拟ViewState?

internet-explorer - 此页面的状态信息无效,可能已损坏