SQLi
SQL Injection
SQLi(SQLインジェクション)とは
ひとことで
入力値にSQL文の一部を混入させ、データベースへの問い合わせを改変する攻撃。パラメータ化クエリで対策する。
たとえると
注文票の備考欄に「あと、金庫の中身も全部持ってきて」と書いたら、店員がそのまま実行してしまうようなものです。入力欄の文字を「ただの文字」ではなく「命令の一部」として扱ってしまうことが原因です。
現場ではこう使う
ログイン画面のIDに「admin' --」と入力すると、パスワードを確認する部分がコメントとして無視され、パスワードなしで管理者としてログインできてしまいます。検索欄から「UNION SELECT」を送り込まれ、会員情報をまるごと取り出されるケースもあります。
試験のポイント
EXAM POINT問題文やログに「' OR 1=1」「UNION SELECT」「--」が出てきたらSQLi(URLエンコードされて %27 になっていることも)。対策は「パラメータ化クエリ(プリペアドステートメント)」が最優先で、入力値の検証やWAFは補助的な対策です。
混同しやすい用語との違い
- XSS狙いはデータベースではなく、ページを見た人のブラウザ
- コマンドインジェクションSQLではなく、サーバーのOSのコマンドを実行させる