1

特定の値のセットに制限する必要があるユーザー入力(Unicode)をどのように処理し、データをさらに下に渡すアプリケーションへのリスクを最小限に抑えたいと考えています。たとえば、データをSQLに保存する場合、SQLインジェクションの可能性を排除したいと思います。HTTP経由でネットワーク経由で送信する場合は、リクエストの形式が正しくないことなどを確認したいと思います。

私が求めているのは、データのサニタイズのための一般的な方法はあると思いますか?

4

3 に答える 3

1

システムを危険にさらす方法に関しては、各インターフェースに独自の問題があります。安全にプレイしたい場合は、現在の状況に関連する問題や脅威に合わせて検証を調整する必要があります。

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

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

等々。残念ながら、フリーランチはありません。

于 2009-05-21T22:47:42.190 に答える
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();
于 2009-05-21T22:39:48.057 に答える
0

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

上記のナイトコーダーの例を使用すると、次のようになります。

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();

SqlClient名前空間について覚えておくべきことは、古いシステム(Win98)用に作成している場合は、互換性の問題がある可能性があるため、OldDBxxxの方が適しているということです。

乾杯!

于 2009-05-22T01:25:18.657 に答える