「CITビジネスグロッサリー」は、CIT経営開発が運営するビジネスラーニングプラットフォームです
SQLインジェクションは、Webアプリケーションの脆弱性を利用して、データベースを不正に操作する攻撃手法です。
簡単に言うと、「本来は名前やパスワードを入力する場所に、データベースへの命令(SQL文)を紛れ込ませる」ことで、情報の漏洩や改ざんを引き起こします。
SQLについては、ブラウザ上で簡単に動作確認ができる練習環境を用意しています。以下のリンクからアクセスしてお試しください。
SQL PRACTICE - ブラウザ完結のSQLトレーニング環境
例えば、ログイン画面で「ユーザー名」を入力する処理が内部で以下のようなSQL文(データベースへの命令)を組み立てているとします。
SELECT * FROM users WHERE username = '入力された名前' AND password = '...';
ここで、攻撃者がユーザー名に admin' -- と入力すると、SQL文は次のように書き換わってしまいます。
SELECT * FROM users WHERE username = 'admin' --' AND password = '...';
ポイント: -- はSQLで「ここから先はコメント(無視)」という意味です。その結果、パスワードのチェックが無視され、パスワードを知らなくても管理者としてログインできてしまうのです。
SQLインジェクションを許してしまうと、以下のような深刻な事態を招きます。
個人情報の流出: 顧客リストやクレジットカード情報のすべてを盗み出される。
データの改ざん・消去: Webサイトの内容を書き換えられたり、データベース全体を消されたりする。
なりすまし: 管理者権限を奪われ、システムを自由に乗っ取られる。
これらは開発者が必ず実施すべき基本的な対策です。
プレースホルダ(静的プレースホルダ)の利用
SQL文の雛形を先に作っておき、ユーザーからの入力値を「ただの文字列」として安全にはめ込む方法です。これが最も効果的で推奨される対策です。
エスケープ処理
SQLにおいて特別な意味を持つ記号(' や \ など)を無効化します。
入力値のバリデーション
「メールアドレス形式以外は受け付けない」など、期待しない入力そのものをブロックします。