SQLインジェクション検査
この間、効率のよい検査手法って野を思いついたのでメモってみる。
検査パターンとして以下の3つを各パラメータに入れてみてその応答の違いを見ればよいのではないか?
- '
- ''
- '0'
または
- "
- ""
- "0"
これら2つの組を頭から入力して行き、どこか一つでレスポンスのタグの構造が異なっていればSQLインジェクションの脆弱性があるといっていいのではないか?
というのも、SQLインジェクションの脆弱性が無い場合、これらのデータが渡されても正常にSQLが実行されるはずである。
一方、SQLインジェクションの脆弱性がある場合、は以下のようになると考えられる。
- 「'」または「"」
文字列が終了または開始されるので、中途半端な文字列が作成され、必ずエラーが発生する。
- 「''」または「""」
文字列中に入力データが含まれている場合、それぞれ「'」、「"」と認識されるのでエラーとならない。
- 「'0'」または「"0"」
SQL文中で数値として入力データが使用されていた場合、DB側で暗黙の型変換が行われエラーとならない。
というわけで、正しいSQL文を組み立てる必要が無いので発見が楽かなぁ?