見えるセキュリティ

SQLインジェクション

SQL INJECTION

利用者の入力が、SQLへ渡す値として扱われるか、SQL文そのものの構造を変える命令として扱われるか。その境界を、問い合わせの組み立て方で比較します。

THEME
web-vuln
KIND
attack
REVIEW
self-reviewed ·

利用者入力がSQL文の構造へ混ざる流れ

入力値の内容ではなく、SQLの構造と入力値の境界がどこで失われるかに注目します。

  • 攻撃者

    SQLとして意味を持ち得る入力を送る

    現在のSTEP

    持ち物

    • SQLとして意味を持ち得る入力
  • Webアプリ

    入力を使ってSQL文を組み立てる

    持ち物

  • データベース

    受け取ったSQL文を解釈する

    持ち物

STEP 01 / 05DERIVE

1. 細工された入力を用意する

攻撃者が、SQL文へ直接連結された場合に問い合わせ構造へ影響し得る入力を用意します。

現在のSTEP 1STEP 2STEP 3STEP 4STEP 5

この概念の要点

  • 要点

    問題は記号そのものではない

    特定の記号が存在するだけでSQLインジェクションになるのではありません。利用者入力がSQLの固定構造へ直接組み込まれ、命令と値の境界が崩れることが問題です。

  • 注意

    入力がSQL構造へ影響する

    文字列連結でSQL文を組み立てると、入力がSQLへ渡す値ではなくSQL構文の一部として解釈される可能性があります。

理解確認

SQLインジェクションが成立する中心的な原因はどれですか?

参考資料