これ何て呼びますか

SQL injectionに対する脆弱性発見方法について3つ質問をさせていただきます。


質問1 

SQL '

と入力した場合に、エラーとなると脆弱性ありと判断されるそうですが、理由は何でしょうか?

質問2

「検索キー」と「検索キー'and'a'='a 」を比較して、「検索キー」のみと同じ結果になれば、脆弱性ありと判断されるそうですが、理由は何でしょうか?

質問3

「検索キー(数値)」と「検索キー and 1=1 」を比較して、「検索キー(数値)」のみと同じ結果になれば、脆弱性ありと判断されるそうですが、理由は何でしょうか?

A 回答 (2件)

質問1については、



例えば名前と完全一致で検索するような場合は以下のようなSQLが実行されると推測されます。

select * from test_table where name='入力された内容'

「入力された内容」の部分にシングルクォートのことを何も考慮せずに「SQL'」を入れれば、

select * from test_table where name='SQL''

となり、エラーになります。
シングルクォートを正しくエスケープしていれば、エラーにはなりません。

他の質問も、where句にそのままいれたらSQLがどうなるかを考えればわかります。
    • good
    • 0

質問1


 意味がよくわかりません。
 エスケープしていないなどの理由により、複数クエリが実行できてしまうとかそういうことを
 言ってますかね??

質問2
 シングルクォーテーションがエスケープされていないから。
 『and 'a'='a'』がクエリ条件として走行してしまいます。
 本来行われるべき検索条件は『検索項目 = '検索キー\'and\'a\'=\'a'』であって、結果は0件ですよね。

質問3
 数値項目であるにも関わらず文字列が設定され、更にシングルクォーテーションで囲まれていないから。
 『and 1=1』がクエリ条件として走行してしまいます。

いずれにしても、すべてプレースホルダーを利用したクエリの実行を心掛ければ解決すると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す