0

私はSQLインジェクションについて多くのことを読み、cs.file内でプレーンコード/連結を使用してクエリを動的に構築することを避けるべき理由について多くの議論を読みました。

しかし、質問があり、私よりも経験豊富な人からのアドバイスが必要です。

さまざまなプロジェクトで自分のコードを再利用するためにいくつかの DLL ファイルを作成しました。そのため、汎用的なものを考えていました。

私はこれらの DLL ファイルを作成しました。これには、SQL クエリを動的に構築するためのすべてのロジック/コード + ステートメントの連結が含まれていました。その後、これらの DLL ファイルをプロジェクトへの参照として追加します。

これは SQL インジェクションに対して脆弱でしょうか? また、その不十分な手順(時間がかかる/不十分なメンテナンス)ですか?

アドバイスをいただければ幸いです。

4

3 に答える 3

1

クエリ (実行時に作成) に渡す入力を処理していない場合、SQL インジェクションに対して脆弱です。dll に追加してもしなくても、違いはありません。

これを克服するには、パラメーター化されたクエリを使用する必要があります。それらには、セキュリティ以外にも複数の利点があります。

今考えられる理由の 1 つは、テキスト ボックスがあることです。そして、あなたのクエリは

 "select * from table1 where name = '" +  textbox1.Text;

textbox1 ユーザーにEhsan's. あなたのクエリは爆発し、実行さえしません。

パラメータ化されたクエリの例

 "select * from table1 where name = @Name"
 yourCommand.Parameters.AddWithValue("@Name", textbox1.Text);
于 2013-07-31T13:09:33.473 に答える
0

パラメータ化されたクエリやストアド プロシージャなどを使用していることを確認する必要があります。

また、次のような動的 SQL クエリの使用は避けてください。

"SELECT * FROM Users WHERE UserID = " + UserID

これらは SQL インジェクションに対して脆弱であるため

代わりに、パラメーター化されたクエリまたはストアド プロシージャを使用します。

"SELECT * FROM Users WHERE UserID = @UserID"

ほとんどの ORM (.NET の Entity Framework など) は、SQL インジェクションに対してある程度の保護を提供します (ただし、適切に使用した場合のみ)。

このリンクは、より詳細に説明しています http://www.troyhunt.com/2013/07/everything-you-wanted-to-know-about-sql.html

于 2013-07-31T13:16:13.600 に答える
0

確かに知るのは難しいですが、次のようなことをすると

string sql = "SELECT Field FROM Table WHERE Field = " + Somevar;

次に、 somevar が何らかの入力 (通常はユーザー入力) から来ている場合、SQL インジェクションに対してオープンです。

あなたはただできるので、それをする理由はありません

string sql = "SELECT Field FROM Table WHERE Field = @myvar"
于 2013-07-31T13:10:01.793 に答える