91 · H. セキュリティ
SQL Injection
SQLインジェクション
DBに悪意のクエリを混入させる
ログインフォーム (user id)
admin' OR 1=1 --
SELECT * FROM users
WHERE id = 'admin' OR 1=1 --'
WHERE id = 'admin' OR 1=1 --'
⚠ 全件取得
users全レコード流出
SQLインジェクションってそもそも何?
データベースへの問い合わせ文に、悪意のコマンドを混入させる攻撃です。例えばログインフォームに' OR 1=1 --と入力すると、SQL文が「条件が常に真」になってパスワードなしで全ユーザー情報が抜けることがある。大規模流出事件の原因として今もトップクラスの攻撃。
身近な例えで理解する
例① 「全部ちょうだい」と言わせる魔法の呪文
本来「IDがこれの人だけ」という絞り込みが、「ID何でもOK」に書き換わる。DBに直接話しかける言語(SQL)を、ユーザー入力で操れてしまうのが原因。
例② ファミレスの注文用紙
注文欄に「厨房に入らせて」と書いても、店員は「料理名が書いてある欄」しか見ないから指示として通らない。入力欄をきっちり分けておけば、変な命令を書いても無視される、という発想です。
まとめ
SQLインジェクションは、DBへの問い合わせ文を乗っ取る古典攻撃。AIにDB周りを書かせる時は「プレースホルダ使って」と必ず添える。