サイバー攻撃

SQLインジェクションとは?仕組みや対策、事例を解説

SQLインジェクションとは?仕組みや対策、事例を解説

【TOP5】Webアプリケーション脆弱性診断で検出数の多い「注意すべき脅威」とは?

MOTEXの診断員がよく発見する「Webアプリの5つのリスク」の概要・対策を解説します!

資料をダウンロードする

SQLインジェクションとは、WebサイトやWebアプリケーションの脆弱性(=弱点)につけこみ、不正なSQL文を「データベース」に送って、個人情報の窃取やデータ改ざんなどをおこなうサイバー攻撃です。

大手企業が運営する会員制サイトのデータベースから、約30万人の個人情報が漏洩した事例もあるなど、SQLインジェクションは昨今注目を集めているサイバー攻撃のひとつです。ます。

本記事では、SQLインジェクション攻撃の仕組みをわかりやすく解説するとともに、有効な対策方法も解説します。

▼この記事でわかること

  • SQLインジェクション攻撃の仕組み
  • SQLインジェクション攻撃を受けた場合のリスク
  • SQLインジェクション攻撃への具体的な対策

情シス1,000人に聞いた!
「クラウドサービスのセキュリティ対策」実態調査

情シス1,000人に「自社のクラウドサービスのセキュリティ対策」
についてお聞きしました。
クラウドを運用中・導入予定の情シス様は、必見のデータです!

資料をダウンロードする

SQLインジェクションとは?


「SQLインジェクション(SQL Injection)」とは、Webサイトやアプリケーションの脆弱性を狙って、不正なSQL文を注入するサイバー攻撃です。

SQLインジェクションの「SQL」とは、データベースを操作するために使われる言語のことで、データを操作するための構文を「SQL文」と呼びます。
「会員情報」などのデータが活用されるWebサイト・アプリケーションを動作させる際に、SQL文を送信することで、データベースに蓄積されたデータをWebサイトへ呼び出すことができます。

また、SQLインジェクションの「インジェクション」とは、英語で「注入」を指す単語です。
攻撃者によって不正な「SQL文」がデータベースへ送られ、実行されると、Webサイトやアプリケーションのデータベースから、個人情報が盗まれたり、改ざん・削除されてしまったりします。

SQLインジェクションの被害に遭わないためにも、SQLインジェクションの仕組みについて、詳しく確認していきましょう。

SQLインジェクションの仕組み

SQLインジェクション攻撃の基本的な流れは、以下の通りです。

  • 1. 攻撃者が、脆弱性を含むWebアプリケーション・システムを「選定」する
  • 2. Webアプリケーション上の入力フォームに「不正なSQL文」を入力し、送信する
  • 3. 「データベース」へ不正なSQL文が送られ、実行される
  • 4. データベースからWebサイトへ、SQLの実行結果が返却される
  • 5. 窃取された会員情報が、悪用される

SQLインジェクションにて、データベースへ攻撃を仕掛けるイメージ図

SQLインジェクション攻撃は、はじめに攻撃者が「ターゲットとなりそうな、脆弱性をもつWebサイトやアプリケーションを探す」ことからスタートします。

昨今は、「ダークウェブ」上でWebサイトやアプリケーションの脆弱性に関する情報が取引されているため、攻撃者は、標的を容易に発見できるとされています。

通常、Webサイトやアプリケーションの「入力フォーム」に個人情報を入力した場合、情報はそのままサーバーへ送信され、データベースへと記録されます。

入力フォームへ、不正なSQL文を送信するイメージ

しかし、脆弱性が高いWebサイトやアプリケーションの入力フォームにおいて、「データベース内のすべての会員データを公開してください」などの不正なSQL文が送信されると、悪質な命令が実行されてしまい、画面上に会員の個人データが公開されてしまいます。

関連ページ

ダークウェブとは?何が取引される?わかりやすく解説

SQLインジェクションの具体例

具体例を用いて、SQLインジェクションについて解説します。

以下のSQL文は「データベースから、ユーザーの情報を検索する」という指示で、Webサイト上で、ユーザーの情報を絞り込んだり、表示させたりする際に使用されます。

SELECT * FROM users WHERE name = ‘エムオー太郎’;

具体的には「users」というテーブル(表)の「name」という列の値が、「エムオー太郎」という入力値に一致するレコードをすべて取得するという指示です。

このデータベースを持つサイトが、SQLインジェクションによって、「MOTEX’ OR ‘MOTEX’ = ‘MOTEX」 という入力値を与えられると、SQL文は次のように変わります。

SELECT * FROM users WHERE name = ‘MOTEX’ OR ‘MOTEX’ = ‘MOTEX’;

このSQL文では、条件が常に「真」となるように指示されているため、データベースで実行されると、すべてのユーザー情報が抽出され、閲覧できるようになってしまいます。

このように脆弱性の高いWebサイトでSQLインジェクションが実行されると、本来見ることのできない情報がデータベースから盗み出せるようになってしまったり、不正なSQL文が注入されたことで、データの改善・削除が可能になってしまったりするリスクがあります。

最新のSQLインジェクション発生件数や推移


SQLインジェクションは、1990年代後半から確認されている古い脆弱性ですが、現在も猛威を振るっています。

IPAのレポートによると、「Webサイトの脆弱性で被害の届け出」があったもののうち、「SQLインジェクション」は、「クロスサイト・スクリプティング」に次いで、2番目に届け出が多いことが報告されています。
webサイトの脆弱性の種類別届け出状況のグラフ

出典:IPA|ソフトウェア等の 脆弱性関連情報に関する 届出状況 [2025 年第 1 四半期(1 月~3 月)](2025年 4月17日)

「SQLインジェクション」と頻繁に比較されるクロスサイトスクリプティング(XSS)攻撃ですが、ともにソフトウェア等の脆弱性を突くサイバー攻撃です。

SQLインジェクションがデータベースに対する攻撃であるのに対し、クロスサイト・スクリプティングでは、Webサイトを通じて被害者の端末上で悪意のあるスクリプトを実行させる点で、違いがあります。

クロスサイト・スクリプティングについて知りたい方は「よくある質問」項目をご覧ください。

SQLインジェクションが招く被害

SQLインジェクション攻撃を受けると、以下のような被害リスクを招く可能性があります。

  • 1. 情報漏洩
  • 2. データベースの改ざんや破壊
  • 3. Webサイトの改ざんや消去

3つの被害リスクについて詳しく解説します。

1.情報漏洩

SQLインジェクションの被害として代表的なものに「情報漏洩」が挙げられます。

攻撃者によって不正なSQL文が送信されると、Webサイトのデータベースに蓄積されている情報が閲覧・窃取できるようになってしまいます。

情報漏洩がもたらす被害には、以下のようなものが挙げられます。

  • ・ID/パスワードが盗まれ、企業システムに不正アクセスされる
  • ・ID/パスワードが盗まれ、アカウントが乗っ取られる
  • ・クレジットカード情報が盗まれ、不正送金・不正購入される
  • ・クレジットカード情報が盗まれ、不正送金・不正購入される
  • ・氏名やログイン情報などの個人情報を、ダークウェブ上で売買される

2.データベースの改ざんや破壊

2つ目の想定リスクは、データベースの改ざん・破壊・消去などです。

データベースには、組織の重要資産である、顧客の個人情報や商品の売上など、あらゆるデータが蓄積されています。
SQLインジェクションでは、このデータベースを不正に操作することが可能なため、蓄積したデータが勝手に改ざんされたり、破壊・消去されたりする危険があります。

顧客の情報や注文情報など、業務に必要な情報が改ざんされてしまうことで、組織の業務に多大な影響が出ることが想定されます。

3.Webサイトの改ざん

3つ目の想定リスクは、Webサイトの改ざんです。

最近のWebサイトは、ほとんどのページがデータベースを参照して作られる、動的なサイトとなっています。Webサイトの改ざんを目的としたSQLインジェクションでは、不正なSQL文によりデータベースの内容を書き換え、改ざんしたWebページを表示させます。

データベースが改ざんされることで、Webサイトの内容が不正に書き換えられるため、訪問したユーザーに偽の情報が伝わってしまったり、偽のサイトに誘導されてしまったりすることがあります。

実際、情報処理推進機構(IPA)が2025年に報告した「ウェブサイトの脆弱性がもたらす影響別の届出状況」でも「本物サイト上への偽情報の表示」が全体の57%を占めています。
サイトの脆弱性がもたらす影響別の届け出状況(1位が本サイトへの偽情報の表示)

出典:IPA|ソフトウェア等の 脆弱性関連情報に関する 届出状況 [2025 年第 1 四半期(1 月~3 月)](2025年 4月17日)

また、SQLインジェクションでWebサイトの管理用アカウント情報が盗み出されてしまうと、ユーザーがWebサイトを閲覧するだけでマルウェアに感染するよう、サイト内容を書き換えることもできてしまいます。

その他、SQL文を操作してサーバーにアップロード済みのHTMLファイルが全て消去された結果、Webサイトが消去されたという被害事例も報告されています。

SQLインジェクションの被害事例

日本国内で発生した「SQLインジェクション」の被害事例を、2件ご紹介します。

1. 医薬品情報掲載サイトのデータベースがSQLインジェクション攻撃によって改ざん

2024年12月、ある協議会が運営する医薬品情報掲載サイトのデータベースが改ざんされる事件がありました。

当該企業によれば、Webサイトに掲載されている製品名欄、資材名欄など複数箇所に外部の不正サイトを示すテキストが記載されていたことがわかっています。

テキストをクリックしても外部不正サイトへの誘導はおこなわれなかったものの、医薬品情報掲載サイトに関連するすべてのシステムを停止し、さらに別サイトでおこなっていた教材ダウンロード機能も停止する事態となりました。

今回の改ざんの原因は、Webサイトの脆弱性をついてSQLインジェクション攻撃を仕掛けられたことでした。

脆弱性はすでに修正済で、関連システムおよび別サイトでの教材ダウンローダー機能も復旧しています。

2. 大手住宅メーカーが運営する会員制サイトでSQLインジェクション被害。約30万人の個人情報が漏洩

2024年5月、大手住宅メーカーが運営する会員制サイトがSQLインジェクション攻撃にあい、約30万人の個人情報が漏洩する事件がありました。
サーバー業務を委託している業者から「当該サイトのアクセス数が急激に増加し、高負荷の状況が続いている」との連絡を受け、調査が開始されました。

調査の結果、現在は運用していないページのセキュリティ設定に不備があり、SQLインジェクション攻撃を受けたことがわかりました。とのことです。

この攻撃により、顧客のメールアドレス・ログインID・パスワードおよび、当該企業の従業員などのメールアドレスとシステムにログインする際のパスワードが漏洩する事態となりました。

SQLインジェクションの具体的な対策方法


SQLインジェクションの具体的な対策方法として、以下の手段があげられます。

  • 1.プレースホルダの利用
  • 2.エスケープ処理の実行
  • 3.エラーメッセージの非表示
  • 4.アプリケーションの最新化
  • 5.脆弱性診断の実施
  • 6.データベースサーバーのログ監視

6つの対策方法を詳しく確認していきましょう。

1.プレースホルダの利用

SQLインジェクションの対策方法として、プレースホルダの利用が有効です。
プレースホルダとは、 SQL文の中で値が変動する部分に用いられる文字列や記号のことです。

SQLインジェクションは、不正な「SQL文」を送信することで、データベースに意図しない操作をさせる攻撃です。
この「SQL文」を単なる「文字列」として扱い、SQL文として処理させないようにするのが、プレースホルダです。

プレースホルダを利用すると、万が一不正な値が送信さえても、無効化処理されるため、SQLインジェクションを防ぐことが可能になります。

具体的なプレースホルダの例を紹介します。

元のSQL文 $sql = “SELECT * FROM user WHERE name=‘$name’;
プレースホルダ $sql = “SELECT * FROM user WHERE name=:name“;

プレースホルダは、後述するエスケープ処理と併用すると、さらに安全性を高めることができます。

プレースホルダについて詳しく知りたい方は、下記の記事をあわせてご参照ください。

関連ページ

プレースホルダとは?使い方とセキュリティ対策を徹底解説

2.エスケープ処理(サニタイジング)の実行

エスケープ処理とは、データベースが持つ特殊記号を無効化する処理のことです。「エスケープ処理」を行うことで、攻撃者がWebアプリケーション上で不正なSQL文を注入しても、命令の実行を防ぐことが可能となります。

エスケープ処理の例としては、「’」や「”」や「\」などの特殊記号を「”」「””」「\\」などとしてその記号の意味を無効化する処理を行います。ただし、特殊記号の取り扱いはデータベースによって異なるため、データベースに応じた対策が必要となります。

関連ページ

サニタイジングとは?行わない場合のリスクや実施方法を解説

3.エラーメッセージの非表示

詳細なエラーを表示しないことも、SQLインジェクションの対策になります。
詳細なエラーとは、データベースに対するSQL文が不正なものであった場合、表示されるエラー情報のことです。

通常、データベースに対して対話型のコマンドでSQL文を送ると、SQL文が不正な場合は「エラー」が表示されます、しかし、詳細なエラー情報を表示することは、結果的に「攻撃者に不必要な情報を与えてしまうこと」になりかねません。

攻撃者が、意図した情報を取得できてしまう可能性もあるため、詳細なエラーを表示しないよう設定しておくことが必要です。

4.アプリケーションの最新化

Webサイトで利用するWebアプリケーションは、常に最新の状態にアップデートしておくようにしましょう。

WordPressやJoomla といったWebアプリケーションのアップデートを怠ると、脆弱性が放置され、SQLインジェクション攻撃の標的となりやすくなるためです。実際、過去にはこれらWebアプリケーション内のプラグインの中から、SQLインジェクションの対象となりうる、脆弱性が明らかになったケースも存在します。

メーカーからのアップデート通知をこまめに確認し、定期的なアップデートを心がけましょう。

5.脆弱性診断の実施

SQLインジェクションを対策したいWebアプリケーション・サイトを対象に、脆弱性診断を受けることも効果的です。

脆弱性診断とはその名の通り、セキュリティの専門家が、貴社のWebサイトにおける欠陥(=脆弱性)を調査するサービスです。SQLインジェクションなどサイバー攻撃に狙われる「脆弱性」の内容を洗い出すことで、効率的かつ確実に、課題への対策を打つことができます。

「運営中のWebサイトの脆弱性リスクを診てほしい」という企業様はもちろん、「リリース前のWebアプリケーションに脆弱性がないか確認したい」という企業様にもおすすめです。

関連ページ

「Webアプリケーション脆弱性診断」とは?|LANSCOPE プロフェッショナルサービス

6. データベースサーバーのログ監視

データベースサーバーのログには、SQL文や実行時間、エラーの有無などが記録されています。

そのため、ログの中に不正なSQL文やエラーメッセージが記録されていないかどうかを定期的にチェックすることで、第三者からの攻撃を迅速に検知することが可能になります。

データベースサーバーのログ監視は、SQLインジェクション攻撃を未然に防ぐ対策ではなく、「攻撃に遭った後の初動対応を早めるための対策」といえます。

情シス1,000人に聞いた!
「クラウドサービスのセキュリティ対策」実態調査

情シス1,000人に「自社のクラウドサービスのセキュリティ対策」
についてお聞きしました。
クラウドを運用中・導入予定の情シス様は、必見のデータです!

資料をダウンロードする

SQLインジェクション対策には「LANSCOPE プロフェッショナルサービス」

パスワードリスト攻撃対策に強い、LANSCOPE プロフェッショナルサービス
SQLインジェクション攻撃への対策として、過去12,000件以上のサービス提供実績・90%以上のリピート率を誇る「LANSCOPE プロフェッショナルサービス」をご紹介します。

「LANSCOPE プロフェッショナルサービス」が提供する「Webアプリケーション脆弱性診断」は、セキュリティの専門家がきめ細かい診断をおこない、SQLインジェクション攻撃の発生要因となる、Webアプリケーションの脆弱性(課題)を暴き、有効な対策を提案するサービスです。

Webサイトが抱える脆弱性リスクを「点数」でわかりやすく評価し、診断の結果、発見された脆弱性には、有効なセキュリティ対策・修正内容を、ピンポイントでお伝えします。
WEBアプリケーション脆弱性診断の診断レポートのサンプル

Webアプリケーション脆弱性診断「報告書」

関連ページ

LANSCOPE プロフェッショナルサービス の「Webアプリケーション脆弱性診断」はこちら

また、診断内容を重要項目に絞り、より低価格でWebアプリケーションの脆弱性診断を受けていただける「セキュリティ健康診断パッケージ」も提供しております。
自社のセキュリティ状況にあわせて、ぜひ最適なサービスをご検討ください。

関連ページ

低コスト・短期で診断を行う『セキュリティ健康診断パッケージ』の詳細はこちら

SQLインジェクションに関するよくある質問

最後に、SQLインジェクションに関するよくある質問とその答えをまとめました。

  • ・クロスサイトスクリプティング(XSS)攻撃との違い
  • ・SQLインジェクションの主な種類

上記の2つの質問についてお答えしていますので、今後のセキュリティ対策にぜひお役立てください。

Q. クロスサイトスクリプティング攻撃との違いとは?

両者の違いは、「攻撃の対象と方法」です。

「クロスサイトスクリプティング(XSS/Cross Site Scripting)」は、Webサイトの脆弱性をついて不正なスクリプト(簡易プログラム)を埋め込み、サイトを閲覧した不特定多数のユーザーにスクリプトを実行させ、個人情報の窃取・悪用をおこなうサイバー攻撃です。

対して「SQLインジェクション」は、Webサイトの脆弱性につけこみ、データベースに悪質なSQL文(スクリプト)を送信することで、データベースを不正に操作する攻撃です内のデータを改ざん・削除・盗用するサイバー攻撃です。

また、クロスサイトスクリプティングでは主にJavaScriptが、SQLインジェクションでは主にSQLが攻撃に利用される点も異なります。

関連ページ

【簡単解説】クロスサイトスクリプティング(XSS)とは?仕組みや事例・対策をわかりやすく紹介

Q. SQLインジェクションの主な種類とは?

よく使われるSQLインジェクションの手口には、主に以下の3種類があります。

エラーベース型 Webアプリケーション上のフォームなどから不正なSQL文を送信してエラーメッセージを表示させ、データベースの構造や内容を推測する方法
ブラインド型 エラーベース型を実施してもエラーメッセージが表示されない場合に、真偽値(TRUE or FALSE)や時間遅延などを利用して、データベースの内容を推測する方法
セカンドオーダー型 Webアプリケーション上のフォームなどから正常なSQL文を送信した後、データベースに保存されている不正なSQL文を実行させる方法

まとめ


本記事では「SQLインジェクション」について、攻撃の仕組みや被害リスク、対策などを解説しました。

本記事のまとめ

  • SQLインジェクション(SQL Injection)とは、Webサイトやアプリケーションの脆弱性を狙って、不正なSQL文を注入するサイバー攻撃
  • SQLインジェクション攻撃を受けた場合、「情報漏洩」「データベースの改ざんや破壊」「Webサイトの改ざんや消去」などの被害リスクを招く可能性がある
  • SQLインジェクションの具体的な対策方法として、「プレースホルダの利用」「エスケープ処理の実行」「アプリケーションの最新化」「脆弱性診断の実施」などが挙げられる

いま一度、自社のWebサイトやWebアプリケーションの課題を見直し、必要なセキュリティ対策を行うことで、SQLインジェクション攻撃から、大切な情報資産やお客様からの信頼を守りましょう。

この記事が、皆さんの「SQLインジェクション」の理解に、少しでもお役に立てたら幸いです。
 

【TOP5】Webアプリケーション脆弱性診断で検出数の多い「注意すべき脅威」とは?

MOTEXの診断員がよく発見する「Webアプリの5つのリスク」の概要・対策を解説します!

資料をダウンロードする

情シス1,000人に聞いた!
「クラウドサービスのセキュリティ対策」実態調査

情シス1,000人に「自社のクラウドサービスのセキュリティ対策」
についてお聞きしました。
クラウドを運用中・導入予定の情シス様は、必見のデータです!

資料をダウンロードする

失敗しないための脆弱性診断実施のコツ

セキュアな開発・サービス提供に必須!はじめての脆弱性診断 正し進め方ガイド

資料をダウンロードする