SQLインジェクション(SQL Injection)とは、Webサイトの入力欄などを悪用して不正なSQL文を紛れ込ませ、データベースを意図しない形で操作させるサイバー攻撃の手法のことです。入力内容の処理に不備があるサイトが標的にされ、情報の漏えいや改ざんにつながる危険な攻撃のひとつとされています。
現実世界に例えると、SQLインジェクションは正式な依頼書の中に、偽の指示を紛れ込ませるようなものです。担当者が依頼書の中身をきちんと確認せずそのまま処理してしまうと、本来意図されていなかった不正な指示まで実行されてしまいます。
SQLインジェクション図解
SQLインジェクションの仕組み
Webサイトの検索欄やログインフォームなどに、本来入力されるはずのないSQLの命令文を紛れ込ませて送信することで攻撃が行われます。入力内容をそのままデータベースへの命令文の一部として扱ってしまう作りのサイトでは、この不正な命令がそのまま実行されてしまいます。
想定される被害
| 被害 | 内容 |
|---|---|
| 情報の漏えい | 顧客情報やパスワードなどが外部に読み取られる |
| データの改ざん | 登録されている情報が書き換えられる |
| データの削除 | データベースの中身が消去される |
| 不正ログイン | 認証を回避して管理者権限などを奪われる |
主な対策方法
もっとも基本的な対策は、「プレースホルダ」と呼ばれる仕組みを使い、入力内容を命令文とは別の場所で安全に扱うことです。入力された文字列を命令の一部として解釈させないようにすることで、不正な命令が紛れ込む余地をなくします。
日頃からの備えの重要性
SQLインジェクションは、Webサイトを運営する側の作り方に不備があると発生する攻撃です。利用しているシステムやプラグインを最新の状態に保ち、入力内容のチェックを徹底することが、被害を防ぐ基本的な備えとなります。
過去に起きた被害の傾向
国内外を問わず、会員制サイトや通販サイトから大量の個人情報が流出する事件の原因として、SQLインジェクションが挙げられることが度々あります。攻撃自体は古くから知られている手法ですが、対策が不十分なシステムが今も標的にされ続けています。
利用者としてできること
SQLインジェクション自体はサイト側の対策が中心となりますが、不審な動きをするサイトでは個人情報の入力を控える、パスワードを使い回さないといった心がけも、万一情報が流出した際の被害を抑えることにつながります。
あわせて知っておきたい用語
- SQL:
データベースを操作するための命令文の言語です。 - 脆弱性:
システムに存在する、悪用されうる弱点のことです。 - RDB(リレーショナルDB):
SQLインジェクションの標的となる、表形式のデータベースです。 - クロスサイトスクリプティング(XSS):
Webサイトに不正なスクリプトを埋め込む、別の代表的な攻撃手法です。 - プレースホルダ:
入力内容を命令文と切り離して安全に扱うための仕組みです。 - ペネトレーションテスト:
攻撃者の視点でシステムの弱点を洗い出す診断手法です。


コメント