2009-05-21 11 views
1

特定の値のセットに制限する必要があるユーザー入力(ユニコード)をどのように扱うのですか。また、データを渡すアプリケーションのリスクを最小限に抑えたい場合があります。たとえば、データをSQLに格納する場合、SQL注入の可能性を排除したいと考えています。もし私がHTTPを介して電信線を介して送信する場合、私はそれが要求などの不正な形式でないことを確認したいと思います。誤ったデータを扱うには?

私は何を求めているのでしょうか?

答えて

1

各インターフェイスには、独自の問題を抱えています。安全にプレイしたい場合は、現在の状況に関連する問題や脅威に合わせてバリデーションを調整する必要があります。

ユーザーインターフェイスの特定のテキストボックスを数値入力に使用する必要がある場合は、ユーザーが数値以外のものを入力(または貼り付け)できないようにしてください。特定のコントロールを使用してユーザーから日付を収集する場合は、指定された値が実際に有効な日付であることを検証します(おそらく、特定の範囲内にある必要があります)。

HTTPリクエストでクエリ文字列値として渡されているものは、必ずURLエンコードしてください。ストアドプロシージャを使用し、パラメータとして値を渡します。

など。残念ながら、無料のランチはありません。

+0

この回答を要約すると、(1)ユーザーから取得したデータが取得時に有効であることを確認してください(数字など)。 (2)埋め込み/表示/送信しようとするときにデータをエンコードするので、フォーマットの要件を知ることができます(例:URLのurlencode、SQLのパラメータ化されたクエリ、htmlの-encoding) –

0

データベースに保存する場合、これは非常に簡単です。パラメタ(DbParameterオブジェクト)を使用するだけで、SQLインジェクションからあなたを守り、必要に応じてエスケープ記号を追加します。

コードは次のようにすることができます:それはシステムを侵害する方法に来るとき

OleDbConnection cn = new OleDbConnection(strConn); 
cn.Open(); 
strSQL = "INSERT INTO customers (Name) VALUES (@Name)"; 
OleDbCommand cmd = new OleDbCommand(strSQL, cn); 
cmd.Parameters.Add("@Name", "John O'Brian"); 
cmd.ExecuteNonQuery();
0

ナイトコーダーと同様に、パラメータはSQLインジェクションを回避する方法です。ただし、SQLを使用している場合は、SqlClient名前空間を使用することを検討してください。これは、OleDb対応のものよりも効率的で、SQL Server 7以降用に特別に作成されたものです。 nightcoderの上記の例で使用

:SqlClientの名前空間について心に留めておくために

SqlConnection cn = new SqlConnection(strConn); 
cn.Open(); 
strSQL = "INSERT INTO customers (Name) VALUES (@Name)"; 
SqlCommand cmd = new SqlCommand(strSQL, cn); 
cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.Varchar)).Value = "John O'Brian"; 
cmd.ExecuteNonQuery(); 

何かがあなたが古いシステム(Win98の)のために書いている場合は、より良いOldDBxxxなって、互換性の問題があるかもしれないことです選択。

乾杯!

関連する問題