0

ユーザーが入力したデータに次のような追加情報を追加して、データベースに対して実行するクエリを作成しています。

SELECT * FROM vBranch  WHERE (((BranchIsActive = 'Yes' AND BranchIsValid = 
'Yes') AND BranchIsInternational = 'Yes' AND 1=2) AND 
vBranch.BranchSecurityGroup=1).

この部分:

SELECT * FROM vBranch WHERE ((

私が追加し、

そしてこの部分:

(BranchIsActive = 'Yes' AND BranchIsValid = 'Yes') AND BranchIsInternational 
= 'Yes'

ユーザーが入力した値です

そしてこの部分:

AND 1=2) AND vBranch.BranchSecurityGroup=1)

も私によって追加されます。

ユーザーがデータを入力する前後に追加した文字列を除外するクエリをユーザーが作成し、ユーザーがデータベースに対して入力したデータのみを実行できるかどうかは疑問です。出来ますか?注意すべきことの 1 つは、データベースに対して実行する「select」ステートメントを作成しているため、「select」ステートメントを除いて、いくつかの DML および DDL ステートメントも制限したことです。

4

1 に答える 1

0

SQL ステートメントの前に何があるかは問題ではありません。SQL を動的ステートメントとして実行する限り、SWeko がすでに指摘しているように、SQL インジェクションの可能性が高くなります。自分で試してみることができます。「DeleteMe」という名前のテーブルを作成します。次に、テキスト ボックスに次のように入力します1=1));DROP TABLE DeleteMe;--。次に、データベースをチェックして、DeleteMe テーブルがなくなっていることを確認します。

さらに、これはあなたの質問に対する回答ではありませんが、質問の「1=2」が気になります。ほとんどの場合、結果は得られません。これが単なる「良くない例」であることを願っています。

于 2013-01-23T07:51:30.467 に答える