为什么隐藏字段被视为客户端状态管理?

5
根据MSDN和MCTS自学培训,asp.net可以使用隐藏字段进行客户端状态管理。该书材料继续指出,视图状态比隐藏字段更安全,因为数据是加密的。
我在这里可能遗漏了什么。我设置了一个Label并将其隐藏。我可以在这个隐藏的标签中存储数据,甚至不会发送到客户端浏览器。这不仅像服务器端状态一样工作(请注意runat = server),而且似乎比视图状态更安全,因为无需加密,因为客户端甚至看不到该字段。
<asp:Label ID="Label1" Visible="false" runat="server">secret info</asp:Label>

与此相比,HTML 输入字段的客户端状态信息更加有意义。
<input id="Text2" type="text" style="visibility:hidden;" value="secret 99" />

那么问题是什么?

2个回答

7
当你在.net中创建一个标签并将其可见性设置为Hidden时,它不会呈现给客户端并且其数据存储在ViewState中。
因此,它与使用ViewState维护数据相比并不更安全。
关于隐藏字段,有四种类型:首先是常规的HTML类型,它只是一个类型为hidden的输入框。它没有可见的呈现,尽管它存在于html中。它也没有ViewState属性。它声明为:
<input id="MyId" type='hidden' value='whatever' />

第二种是一个普通的输入框,有一个CSS属性标记为隐藏:如果CSS被禁用或者被覆盖,那么该控件将对用户可见。除此之外,它与type='hidden'几乎相同。
<input id='MyId' type='text' value='whatever' style='visibility:hidden' />

第三种是.Net隐藏字段。它具有视图状态存储,但也会在HTML中生成一个常规的隐藏字段。
<asp:HiddenField id='MyId' runat='server' value='whatever' />

第四个是一个普通的 .net 文本框,标记为不可见。

<asp:TextBox id='MyId' runat='server' Text='whatever' Visible='False' />

.NET控件会导致数据放置在ViewState中,而HTML控件则不会。如果您在.NET控件上设置Visible=False,则该控件不会呈现给客户端,但其数据通常存储在ViewState中。
还有其他将数据抛出到页面的方式,但它们都是以上述方法的变体。
一般来说,如果您有一个值,您的JavaScript代码需要它,但您不需要将其显示给客户端,则使用隐藏字段(HTML或.NET)。如果您拥有一个秘密值,那么通常情况下,如果可能的话,您不希望这个值传递到客户端。这意味着即使要将其从ViewState中删除也是如此。顺便提一句,不要依赖于ViewState“安全性”,因为有一些工具可以轻松解密它。

啊!原来是这个秘诀。谢谢 Chris。 - P.Brian.Mackey

3

一个未显示的字段并不是隐藏字段(尽管它是“隐藏”的)。

隐藏字段是<input type="hidden" name="somename" value="somevalue" />字段。这些字段可以被用户操纵。


但标签和HTML输入不能完全以相同的方式使用吗?为什么隐藏字段不被认为是客户端和服务器端技术的结合体呢? - P.Brian.Mackey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接