2011-01-24 8 views
5

De acuerdo con MSDN y el entrenamiento de MCTS a su propio ritmo, asp.net puede usar campos ocultos para la administración del estado del lado del cliente. El material del libro continúa diciendo que el estado de vista es más seguro que los campos ocultos porque los datos están encriptados.¿Por qué los campos ocultos se consideran administración del estado del lado del cliente?

Me falta algo aquí. Configuré una etiqueta y la oculté. Puedo almacenar datos en esta etiqueta oculta y ni siquiera se enviarán al navegador del cliente. Esto no solo funciona como el estado del lado del servidor (tenga en cuenta el runat = servidor), pero esto parece más seguro que view-state porque no hay necesidad de cifrado ya que el cliente ni siquiera puede ver el campo.

<asp:Label ID="Label1" Visible="false" runat="server">secret info</asp:Label> 

Contraste esto con un campo de entrada de HTML. Aquí, la información del estado del cliente tiene sentido.

<input id="Text2" type="text" style="visibility:hidden;" value="secret 99" /> 

¿Cuál es el problema?

Respuesta

7

Cuando crea una etiqueta en .net y configura su visibilidad en Oculto, no se procesa en el cliente y sus datos se almacenan en viewstate.

Por lo tanto, no es "más" seguro que viewstate ya que está usando viewstate para mantener los datos.

En cuanto a los campos ocultos, hay cuatro tipos: Primero es el HTML normal que es simplemente una entrada de tipo oculto. Esto no tiene representación visible aunque está en html. Tampoco tiene propiedades viewstate. Se declara como:

<input id="MyId" type='hidden' value='whatever' /> 

La segunda es una entrada regular con una propiedad CSS marcándolo como ocultos: Si CSS está deshabilitado o de lo contrario overriden entonces el control sería visible para el usuario. Aparte de eso, está muy cerca de lo mismo que un tipo = 'oculto'.

<input id='MyId' type='text' value='whatever' style='visibility:hidden' /> 

El tercero es el campo oculto .Net. Esto tiene el almacenamiento viewstate, pero también provoca que se genere un campo oculto en el html.

<asp:HiddenField id='MyId' runat='server' value='whatever' /> 

Y, el cuarto es un cuadro de texto regular .NET que está marcado como no visible.

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

Los .net harán que los datos se coloquen en viewstate. Los HTML no. Si establece Visible = False en un control .Net, entonces no se procesa en el cliente, sin embargo, los datos se almacenan normalmente en viewstate.

Hay otras formas de arrojar datos a la página, pero son derivaciones de lo anterior.

En general, si tiene un valor que su código de JavaScript necesita pero no necesita mostrarlo al cliente, entonces utiliza un campo oculto (html o .net). Si tiene un valor secreto, entonces normalmente no desea que esto vaya al lado del cliente si es posible. Y eso significa incluso mantenerlo fuera de la vista. Como nota al margen, no dependa de la "seguridad" de viewstate, existen herramientas que lo descifrarán fácilmente.

+0

¡Ah! Esa es la salsa secreta Gracias Chris –

3

Un campo que no se muestra no es un campo oculto (aunque esté "oculto").

Los campos ocultos son <input type="hidden" name="somename" value="somevalue" /> campos. Y esos pueden ser manipulados por los usuarios.

+0

¿Pero no se puede utilizar la entrada de Etiqueta y HTML de la misma manera? ¿Por qué los campos ocultos no se consideran tecnología del lado del cliente y del servidor? –

Cuestiones relacionadas