2012-02-22 15 views
4

既定のASP.Netコントロールセットの一部であるコントロールがあります - すべてがviewstateまたはcontrolstateを常時使用していますか?ASP.Netコントロールはviewstate経由でSQLクエリを公開しますか?

つまり、私はブランドの新しいWebフォーム上に以下のコードを削除した場合、暗号化されていないControlStateを中に置かれ、私のSQL文字列のですか?

<asp:SqlDataSource ID="mobileData" runat="server" 
     DataSourceMode="DataReader" 
     SelectCommand="SELECT * from ma.bob WHERE Vendor IS NOT NULL" 
/> 

私はビューステートとControlStateを暗号化する方法を承知しているが、この一般的な使用例はそれほど恐ろしく安全でない可能性があることに私に狂ったようです。確かに、コントロールステートを変更してSQLインジェクション攻撃を行うことができますか?

私はほとんどの人が敏感なアプリケーションのためのControlStateを暗号化を考えると思うが、私の仮定が真であれば、実際に、 - それは常に行わなければならない - とVisual Studioは、デフォルトでそれを有効にする必要がありますか?

は私が正しく、この考えていますか、私はスティックの間違った終わりを持っているのですか?

+1

あなたは確認することをお勧めします:http://programmers.stackexchange.com/questions/115374/using-sqldatasource-databound-controls-in-asp-net-bad-practice – NotMe

+0

なぜその文字列がViewStateのに行くだろうまたはControlState?静的です。 –

答えて

1

ご質問にお答えするにはいいえです。セキュリティ上の目的のためにMSDN

から
は、保存されていないSelectCommandプロパティには、ビューステートです。それはクライアント上でビュー 状態の内容を復号することが可能であるため、ビュー状態でデータベース 構造に関する機密情報を格納する情報の開示 脆弱性が生じる可能性があります。

+0

が – RobD

+0

@RobD :-)私のためにこれをクリアするためにありがとうございました - 私の喜びメイト。 –

1

この情報は、ViewStateに保存されることはありません。

すべてのプロパティが同じように作成されるわけではありませんここでは、この

public string SomeProperty 
     { 
      get 
      { 
       object obj = ViewState["SomeProperty"]; 
       return (obj == null) ? 0 : (string)obj; 
      } 
      set 
      { 
       ViewState["SomeProperty"] = value; 
      } 
     } 

でSelectCommandはPageParserによって生成されたC#/ Vbのクラスに割り当てられます。そのクラスには、

mobileData.SelectCommand="SELECT * from ma.bob WHERE Vendor IS NOT NULL" 

のような行が含まれ、この割り当てはページが要求されるたびに行われます。これをViewStateに保持するためのASP .Netは必要ありません。


あなたは

<asp:HiddenField runat="server" Value="SELECT * from ma.bob WHERE Vendor IS NOT NULL" /> 

ような何かを行う場合はこれがViewStateのを行くだろう(私はパーサについて語ったことも、ここで本当ですが、セッターは、ここでそのViewStateのメカニズムを実装します)

+2

あなたはこれを述べた正式な情報源を持っていますか? – Oded

+2

@Oded - http://stackoverflow.com/a/9401030/422219 – zeroef

関連する問題