2011-01-24 10 views
5

In base allo MSDN e alla formazione personalizzata MCTS, asp.net può utilizzare i campi nascosti per la gestione dello stato lato client. Il materiale del libro continua a dire che lo stato di visualizzazione è più sicuro dei campi nascosti perché i dati sono crittografati.Perché i campi nascosti sono considerati gestione dello stato lato client?

Mi manca qualcosa qui. Ho impostato un'etichetta e l'ho nascosta. Posso memorizzare i dati in questa etichetta nascosta e non verranno nemmeno inviati al browser client. Questo non funziona solo come lo stato lato server (si noti runat = server), ma questo sembra più sicuro dello stato di visualizzazione perché non c'è bisogno di crittografia poiché il client non può nemmeno vedere il campo.

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

Contrasto con un campo di input HTML. Qui, le informazioni sullo stato del cliente hanno senso.

Quindi qual è l'affare?

risposta

7

Quando si crea un'etichetta in .net e si imposta la visibilità su Nascosto, non esegue il rendering sul client e i suoi dati vengono archiviati in viewstate.

Pertanto, non è "più" sicuro di viewstate poiché utilizza viewstate per mantenere i dati.

Per quanto riguarda i campi nascosti, ci sono quattro tipi: Il primo è l'HTML normale che è semplicemente un input di tipo nascosto. Questo non ha rendering visibile anche se è in html. Inoltre non ha proprietà viewstate. Si è dichiarato come:

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

il secondo è un ingresso regolare con una proprietà CSS marcatura come nascosto: se CSS è disattivato o in altro modo overriding quindi il controllo sarebbe visibile all'utente. Oltre a questo è piuttosto vicino alla stessa cosa di un tipo = 'nascosto'.

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

Il terzo è il campo nascosto .Net. Questo ha lo storage viewstate, ma genera anche un normale campo nascosto in html.

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

E, la quarta è una normale casella di testo .net contrassegnata come non visibile.

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

I file .net causeranno l'inserimento dei dati in viewstate. Quelli HTML no. Se si imposta Visible = False su un controllo .Net, esso non viene reso al client, tuttavia i dati vengono in genere archiviati in viewstate.

Ci sono altri modi per inserire dati nella pagina, ma sono derivazioni di quanto sopra.

In generale, se si dispone di un valore necessario per il codice javascript ma non è necessario visualizzarlo sul client, si utilizza un campo nascosto (html o .net). Se si dispone di un valore segreto, in genere non si desidera che questo vada al lato client se possibile. E questo significa anche tenerlo fuori dal viewstate. Come nota a margine, non dipendere da "sicurezza" del viewstate, ci sono strumenti là fuori che facilmente lo decrittografano.

+0

Ah! Quindi questa è la salsa segreta. Grazie Chris –

3

Un campo non visualizzato non è un campo nascosto (anche se è "nascosto").

I campi nascosti sono campi <input type="hidden" name="somename" value="somevalue" />. E quelli possono essere manipolati dagli utenti.

+0

Ma non è possibile utilizzare l'etichetta e l'input HTML nello stesso modo? Perché i campi nascosti non sono considerati sia la tecnologia lato client AND lato server? –

Problemi correlati