2011-01-24 2 views
5

MSDNとMCTS自己ペーストレーニングによれば、asp.netはクライアント側の状態管理に隠しフィールドを使用できます。データが暗号化されているため、ビューステートは隠しフィールドよりも安全です。隠しフィールドがクライアントサイドの状態管理と見なされるのはなぜですか?

私はここで何かを紛失しているはずです。私はラベルを設定し、それを隠しました。私はこの隠しラベルにデータを保存することができ、クライアントブラウザにも送信されません。これはサーバ側の状態(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" /> 

これは何ですか?

答えて

7

.netでラベルを作成し、その表示を隠しに設定すると、クライアントにはレンダリングされず、そのデータはviewstateに格納されます。

したがって、データを維持するためにviewstateを使用しているので、viewstateよりも「より」安全です。

隠されたフィールドには、4つの種類があります。最初は正規のHTMLで、単純にhidden型の入力です。これはhtmlにありますが、目に見えるレンダリングはありません。また、ビューステートプロパティもありません。二つ目は、隠されたとして、それをマークするCSSプロパティとの定期的な入力である

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

:CSSが無効になっているか、そうでない場合は、オーバーライドされた場合、コントロールは、ユーザーに見えるだろう、それは次のように宣言されています。それ以外は、type = 'hidden'と同じものにかなり近い。

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

3番目は.Netの非表示フィールドです。これはviewstateストレージを持ちますが、htmlには通常の隠しフィールドも生成されます。

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

また、第4のものは、目に見えないとマークされた通常の.netテキストボックスです。

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

.netはviewstateにデータを配置します。 HTMLはそうではありません。 .NetコントロールでVisible = Falseを設定すると、クライアントにレンダリングされませんが、データは通常viewstateに格納されます。

は、ページにデータを投げるの他の方法がありますが、それらは、上記の導出されています。あなたはjavascriptのコードが必要とする値を持っている場合

は、一般的に言っていますが、あなたは隠しフィールドを使用し、それをクライアントに表示する必要はありません(HTMLまたは.NET)。あなたは秘密の価値を持っている場合、一般的に、あなたはすべての可能性であれば、これはクライアント側に行きたくありません。そして、それはviewstateからそれを保つことさえ意味します。参考文献として、viewstate "security"に依存しないでください。そこには簡単に解読するツールがあります。

+0

ああ!それが秘密のソースです。おかげでクリス –

3

表示されていないフィールドは、非表示のフィールドではありません(「非表示」でも)。

非表示フィールドは<input type="hidden" name="somename" value="somevalue" />フィールドです。そしてそれらはユーザーによって操作することができます。

+0

しかし、ラベルとHTML入力を同じように使用することはできませんか?隠されたフィールドがクライアント側とサーバー側の両方の技術であるとは考えられないのはなぜですか? –

関連する問題