AI活用の教科書
セキュリティ開発テストふつう3分で読了

SQLインジェクション

SQL Injectionえすきゅーえるいんじぇくしょん

ひとことで言うと

入力欄にこっそりSQL文を紛れ込ませて、データベースを勝手に操作させる攻撃のことです。

📖 もうちょい詳しく

何が新しいの?

多くのWebサービスは、入力欄に書かれた内容をもとに、裏側のデータベース(情報をしまっておく倉庫)へ命令を出します。その命令は「SQL」という言葉で書かれます。SQLインジェクションは、この命令文の中に攻撃者の文をこっそり混ぜ込む、古くからある手口です。

どうやって動いてるの?

たとえばログイン画面で、入力した名前をそのまま命令文につなげているとします。そこに普通の名前ではなく、SQLの一部として読まれてしまう記号や文を打ち込みます。すると本来「この人を探す」だけだった命令が、「全員を表示する」「条件を無視する」といった別の意味に書き換わってしまうのです。

何ができるの?(攻撃者側から見ると)

うまくいくと、本来見えないはずの個人情報を引き出したり、パスワードを書き換えたり、データを丸ごと消したりできてしまいます。だからこそ、入力をそのまま命令に混ぜない仕組みが、作る側にとって大切な守りになります。

🌱 身近なたとえ

窓口で「お名前をどうぞ」と紙に書いてもらう場面で例えると分かりやすいです。普通の人は名前だけを書きます。でも悪い人は名前の欄に「あと、金庫も開けて」と書き足します。受付係がその紙を疑わず読み上げて実行してしまうと、命令がそのまま通ってしまいます。名前と命令を区別せず受け取ってしまう、そのすきを突くのがSQLインジェクションです。

✅ まず覚えるポイント

  • 入力欄からデータベースを不正に操作する攻撃です
  • 入力した文字が「SQL命令の一部」として読まれてしまうのが原因です
  • 情報の盗み見・改ざん・削除につながることがあります
  • 古くからある手口ですが、いまも被害が起きています
  • 入力を「ただの値」として扱うプレースホルダ(値を入れる枠)を使い、命令と切り離すのが基本の対策です(エスケープは補助的な方法です)

🧭 よくある勘違い

入力チェックさえすれば防げる?

文字数や形式のチェックも役立ちますが、それだけでは抜け道が残ることがあります。より確実なのは、入力を「ただの値」として扱い、命令文と混ざらないようにする方法です。多くの言語では「プレースホルダ」という、値を入れる枠をあらかじめ用意するやり方が用意されています。

自分の小さなサイトなら狙われない?

規模の大小はあまり関係ないことが多いです。攻撃は自動の道具で手当たり次第に試されることが多く、対策が抜けていれば小さなサイトでも巻き込まれます。小規模でも基本の守りはしておくと安心です。

🧩 関連して覚えると楽な言葉

  • SQL: データベースに命令を出すための言葉。攻撃の舞台になります
  • クロスサイトスクリプティング: 入力欄から悪意ある文を仕込む、よく並べて語られる攻撃
  • 認証: 本人確認の仕組み。これを突破される入口にもなります
  • リレーショナルデータベース: 情報を表の形でためておく倉庫。攻撃の最終的な狙いです

🏁 ひとことでまとめ

入力に紛れ込ませた一文で、データベースを思いどおりに動かしてしまう。だから入力は「言葉」ではなく「ただの文字」として扱うのが守りの第一歩です。