ユーザーが選択のWHERE条件を決定するための機能を作成する必要があります。条件は動的になります。動的WHERE句とSQLインジェクション
私はSQLインジェクションに自分のコードを公開せずにこれを達成できる方法はありますか?
私はC#/ .NET Windowsアプリケーションを使用しています。
ユーザーが選択のWHERE条件を決定するための機能を作成する必要があります。条件は動的になります。動的WHERE句とSQLインジェクション
私はSQLインジェクションに自分のコードを公開せずにこれを達成できる方法はありますか?
私はC#/ .NET Windowsアプリケーションを使用しています。
ああに2つの段階をしないでください。列名と演算子は直接ユーザー入力ではありません。例えば。リストまたはラジオグループなどから選択した String WhereClause = String.Format( "{0} {1} @ {0}"、 "Customer"、 "=");
だから、あなたは "Where Customer = @Customer"を持っています。
次に、aparamer Customerを追加して、ユーザー入力から設定することができます。
これを攻撃するにはいくつかの方法がありますが、基準がどの程度複雑になるかによって異なります。
はい、列名と演算子はリストから選択されます。私の質問は、これがストアドプロシージャで可能な場合になります。 – Rivka
ほとんどの悪いことは、where
条件の値の部分で発生するため、パラメータ化されたクエリを使用するとSQLインジェクション攻撃からユーザーを保護することができます。 @pa="hello"
と@pb="WORLD"
を結合し、クエリを実行し、その後
select a,b,c,d
from table
where [email protected] and [email protected] -- this is generated dynamically
:examplegについては
条件a=="hello" && b=="WORLD"
を与え、これを行います。
C#では、あなたは要素ごとのそれを通過し、手であなたのwhere
句のメモリ内表現で始まり、2つの出力オブジェクトを生成するには:
where
句の文字列(実際の名前は関係ありません)where
clに挿入したパラメータause、および式表現から引っ張った定数に対応する値が含まれています。これらの出力を手に入れて、文字列を使用して動的クエリを準備し、辞書を使用してパラメータ値を追加してから、RDBMSソースに対してクエリを実行します。
この
select a,b,c,d
from table
where a='hello' and b='WORLD' -- This dynamic query is ripe for an interjection attack
右...フィールドや演算子が動的なときに、どのようにパラメータを使うことができるのでしょうか? – Rivka
明確化 - 私はパラメータの使い方を知っています。ここでの問題はパラメータ、パラメータ値、演算子は動的です。だから私は通常と同じようにパラメータを追加することはできません。 – Rivka
@Becky私は、クエリ式表現からパラメータを抽出する方法に関する一般的な情報を含める答えを編集しました。 – dasblinkenlight
あなたはどの言語を書いていますか? – Todd
使用している技術は何ですか? .net? PHP?ルビー? ...その他? – dknaack
私の投稿を更新しました。 – Rivka