• ベストアンサー

SQL injectionに対する脆弱性

SQL injectionに対する脆弱性発見方法について3つ質問をさせていただきます。 質問1  SQL ' と入力した場合に、エラーとなると脆弱性ありと判断されるそうですが、理由は何でしょうか? 質問2 「検索キー」と「検索キー'and'a'='a 」を比較して、「検索キー」のみと同じ結果になれば、脆弱性ありと判断されるそうですが、理由は何でしょうか? 質問3 「検索キー(数値)」と「検索キー and 1=1 」を比較して、「検索キー(数値)」のみと同じ結果になれば、脆弱性ありと判断されるそうですが、理由は何でしょうか?

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

  • ベストアンサー
回答No.2

質問1については、 例えば名前と完全一致で検索するような場合は以下のようなSQLが実行されると推測されます。 select * from test_table where name='入力された内容' 「入力された内容」の部分にシングルクォートのことを何も考慮せずに「SQL'」を入れれば、 select * from test_table where name='SQL'' となり、エラーになります。 シングルクォートを正しくエスケープしていれば、エラーにはなりません。 他の質問も、where句にそのままいれたらSQLがどうなるかを考えればわかります。

その他の回答 (1)

回答No.1

質問1  意味がよくわかりません。  エスケープしていないなどの理由により、複数クエリが実行できてしまうとかそういうことを  言ってますかね?? 質問2  シングルクォーテーションがエスケープされていないから。  『and 'a'='a'』がクエリ条件として走行してしまいます。  本来行われるべき検索条件は『検索項目 = '検索キー\'and\'a\'=\'a'』であって、結果は0件ですよね。 質問3  数値項目であるにも関わらず文字列が設定され、更にシングルクォーテーションで囲まれていないから。  『and 1=1』がクエリ条件として走行してしまいます。 いずれにしても、すべてプレースホルダーを利用したクエリの実行を心掛ければ解決すると思います。

関連するQ&A