ikepyonのだめ人間日記

セキュリティに関することを書いていく予定。

SQLインジェクション検査

この間、効率のよい検査手法って野を思いついたのでメモってみる。
検査パターンとして以下の3つを各パラメータに入れてみてその応答の違いを見ればよいのではないか?

  • '
  • ''
  • '0'

または

  • "
  • ""
  • "0"

これら2つの組を頭から入力して行き、どこか一つでレスポンスのタグの構造が異なっていればSQLインジェクション脆弱性があるといっていいのではないか?
というのも、SQLインジェクション脆弱性が無い場合、これらのデータが渡されても正常にSQLが実行されるはずである。
一方、SQLインジェクション脆弱性がある場合、は以下のようになると考えられる。

  1. 「'」または「"」

文字列が終了または開始されるので、中途半端な文字列が作成され、必ずエラーが発生する。

  1. 「''」または「""」

文字列中に入力データが含まれている場合、それぞれ「'」、「"」と認識されるのでエラーとならない。

  1. 「'0'」または「"0"」

SQL文中で数値として入力データが使用されていた場合、DB側で暗黙の型変換が行われエラーとならない。
というわけで、正しいSQL文を組み立てる必要が無いので発見が楽かなぁ?