こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQL injectionに対する脆弱性

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


質問1 

SQL '

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

質問2

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

質問3

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

投稿日時 - 2014-07-07 09:35:18

QNo.8668285

すぐに回答ほしいです

質問者が選んだベストアンサー

質問1については、

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

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

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

select * from test_table where name='SQL''

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

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

投稿日時 - 2014-07-07 11:30:38

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

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

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

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

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

投稿日時 - 2014-07-07 10:02:31

あなたにオススメの質問