サイバー攻撃

SQLインジェクションとは?仕組み、事例、対策と今でもなくならい理由を解説

SQLインジェクションとは?仕組み、事例、対策と今でもなくならい理由を解説


SQLインジェクションとは、WebサイトやWebアプリケーションの入力フォームなどに存在する脆弱性を悪用し、不正なSQL文をデータベースに送信する攻撃です。

攻撃が成功すると、データベースに保存された情報が情報漏洩したり、Webサイトが改ざんされたりする恐れがあります。

SQLインジェクションは古くから知られている攻撃手法ですが、現在も被害が発生しており、大規模な情報漏洩事故につながるケースもあります。

本記事では、SQLインジェクション攻撃の仕組みをわかりやすく解説するとともに、具体的な対策についても紹介します。

本記事でわかること

  • SQLインジェクション攻撃の仕組み
  • SQLインジェクションの主な攻撃手口
  • SQLインジェクションによる被害事例
  • SQLインジェクション攻撃への具体的な対策

「SQLインジェクションとはどのような攻撃なのか」「どのような対策を講じるべきか」を知りたい方は、ぜひ最後までご覧ください。

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

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

資料をダウンロードする

SQLインジェクションとは


SQLインジェクションとは、WebサイトやWebアプリケーションの入力フォームなどに存在する脆弱性を悪用し、不正なSQL文をデータベースに送信する攻撃です。

SQLインジェクションの「SQL」とは、データベースを操作するために使われる言語のことで、データを操作するための構文を「SQL文」と呼びます。

例えば、会員情報などのデータが活用されるWebサイト・アプリケーションを動作させる際に、SQL文を送信することで、データベースに蓄積されたデータをWebサイトへ呼び出すことができます。

また、SQLインジェクションの「インジェクション」とは、英語で「注入」を指す単語です。

攻撃者によって不正な「SQL文」がデータベースへ送られ、実行されると、Webサイトやアプリケーションのデータベースから個人情報が盗まれたり、 Webサイトが改ざんされたりする恐れがあります。

SQLインジェクションの被害に遭わないためには、SQLインジェクションの仕組みについて正しく理解し、適切な対策を講じることが重要です。

詳しく確認していきましょう。

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

SQLインジェクションは、一般的に以下の流れで実行されます。

手順 内容
1 攻撃者が、攻撃対象となるWebサイトやアプリケーションを探す
2 入力フォームなどに不正なSQL文を入力し、送信する
3 適切な対策がされていない場合、不正なSQL文がデータベースへ送信され、実行される
4 実行結果がデータベースからWebサイトへ送られる
5 窃取された情報が悪用される

SQLインジェクション攻撃は、まず攻撃者が脆弱性をもつ可能性のあるWebサイトやWebアプリケーションを探すことから始まります。

昨今では、ダークウェブ上でWebサイトやアプリケーションの脆弱性に関する情報が取引されるケースも増えており、攻撃者は標的を容易に特定できるようになっていると言われています。

通常、Webサイトや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文では、「’MOTEX’ = ‘MOTEX’」という条件が常に成り立つため、意図した条件検索ではなく、複数のユーザー情報が返される可能性があります。

結果として、本来は表示されるべきではない情報まで取得され、情報漏洩につながる恐れがあります。

このように、SQLインジェクションが発生すると、本来はアクセスできない情報が取得されるだけでなく、状況によってはデータの改ざんや削除につながる可能性もあります。

SQLインジェクションの主な攻撃手法


ここでは、代表的なSQLインジェクションの攻撃手法として、以下の3つを紹介します。

  • インバンドSQLインジェクション
  • ブラインドSQLインジェクション
  • アウトオブバンドSQLインジェクション

詳しく確認していきましょう。

インバンドSQLインジェクション

インバンドSQLインジェクションとは、攻撃者が送信したSQL文の実行結果を、同じ通信経路を通じて取得する攻撃手法です。

代表的な手法には、「エラーベースSQLインジェクション」と「UNIONベースSQLインジェクション」があります。

エラーベースSQLインジェクション 意図的にSQLエラーを発生させ、エラーメッセージからデータベースの種類やテーブル名などの情報を探る手法
UNIONベースSQLインジェクション SQLのUNION演算子を悪用し、本来の検索結果に別のテーブルの情報を結合することで、通常は表示されない情報を取得しようとする手法

近年は、多くのWebアプリケーションで詳細なエラーメッセージを表示しない設計が採用されているほか、UNIONを悪用しにくい実装も増えています。

そのため、インバンドSQLインジェクションは以前に比べて成功しにくい傾向があります。

一方で、実行結果が画面上に直接表示されない環境では、次に紹介する「ブラインドSQLインジェクション」が用いられることがあります。

ブラインドSQLインジェクション

ブラインドSQLインジェクションとは、Webアプリケーションがエラーメッセージを表示しない場合でも、ログインの成否や応答時間の違いなどを手がかりに、データベースの情報を推測する攻撃手法です。

代表的な手法としては、以下の2つがあります。

認証・真偽値ベース(Boolean-based) データベースに対して、「条件が正しいかどうか」を判定させる不正なSQL文を入力し、その結果の違いから情報を推測する手法
時間差ベース(Time-based) データベースに対して、「条件が正しい場合は処理を数秒間遅らせる」といった不正なSQL文を入力し、応答時間の差から情報を推測する手法

ブラインドSQLインジェクションは、1回の試行で得られる情報が限られるため、手作業では時間がかかります。

しかし、攻撃者は自動化ツールを用いることで、多数の試行を繰り返しながらデータベースの情報を少しずつ盗み出そうとします。

アウトオブバンドSQLインジェクション

アウトオブバンドSQLインジェクションとは、攻撃対象のWebページから直接情報を取得するのではなく、データベースに外部通信を行わせ、攻撃者が用意したサーバーへ情報を送信させる攻撃手法です。

この手法を成立させるためには、標的となるデータベースに外部通信機能が備わっていることに加え、攻撃者側でも情報を受け取るためのサーバーを用意する必要があります。

そのため、ほかのSQLインジェクション手法と比べると、使われる場面は限定的です。

なぜSQLインジェクションはなくならないのか


SQLインジェクションは、1990年代後半から知られている古い脆弱性ですが、現在も被害が報告されています。

IPAが2026年に公表した「ウェブサイトの脆弱性の種類別の届出状況」を見ると、SQLインジェクションは、クロスサイト・スクリプティングに次いで届出の多い脆弱性のひとつとなっています。
IPAが公表した「ウェブサイトの脆弱性の種類別の届出状況」

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

SQLインジェクションがなくならない主な理由としては、以下が挙げられます。

  • レガシーシステムが残っている
  • 既存コードの修正が難しい
  • 開発スピードが優先されやすい
  • システム改修時に脆弱性が入り込むことがある

現在は、プリペアドステートメントやORMなど、SQLインジェクション対策に有効な開発手法や仕組みが広く普及しています。

これらを適切に利用することで、脆弱性の発生リスクは抑えやすくなっています。

一方で、企業や組織によっては、長期間運用されている古いシステムを今も使い続けているケースがあります。

こうしたシステムでは、SQLを文字列として組み立てる古い実装が残っており、脆弱性につながる可能性があります。

特に業務システムは影響範囲が広く、改修時の負担も大きいため、脆弱性への対応が後回しになることがあります。

また、開発スピードが優先される現場では、コードレビューやセキュリティテストが十分に行われず、SQLインジェクションの脆弱性を見落としてしまうこともあります。

さらに、開発時には問題がなくても、リリース後の機能追加や改修の過程で、新たにSQLインジェクションの脆弱性が生じるケースもあります。

このように、古いシステムの存在や改修の難しさ、開発体制の課題などが重なり、SQLインジェクションは現在も深刻なセキュリティリスクとなっています。

SQLインジェクションにAIが悪用されるケースも


近年は、サイバー攻撃にAIが悪用される事案が問題視されており、SQLインジェクションにおいても、攻撃の効率化や自動化が懸念されています。

従来、SQLインジェクションを成功させるには、データベースやSQLに関する知識に加え、一定のプログラミングスキルが必要とされてきました。

そのため、実行ハードルが高く、だれでも容易に行える攻撃ではありませんでした。

しかし近年は、生成AIや自動化ツールが普及したことで、不正な入力パターンの作成や攻撃対象の調査が効率化されるようになっています。

こうした変化により、専門知識が十分でない攻撃者でも、攻撃を試みやすくなることが懸念されています。

また、生成AIはHTMLやJavaScriptなどのコードを解析する用途にも活用されています。

そのため、公開されているWebページの構造や入力箇所の特徴をもとに、脆弱性が疑われるポイントの調査を効率化される可能性があります。

このように、AIの悪用によってSQLインジェクションに関する攻撃準備や試行の効率が高まれば、被害を受ける企業や組織が増える恐れがあります。

SQLインジェクションでは、顧客情報や認証情報などの重要なデータが窃取されるリスクがあり、被害が深刻化しやすい点にも注意が必要です。

そのため、企業や組織には、脆弱性診断の実施やセキュアコーディングの徹底、継続的な見直しといった基本対策を着実に進めることが求められます。

関連ページ

AIを悪用したサイバー攻撃とは?AIで守る方法やリスクを解説

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


ここでは、実際に国内で発生したSQLインジェクションによる被害事例を紹介します。

SQLインジェクションによる不正アクセスで情報漏洩が発生した事例

2025年6月、高校受験を控えた中学生向けの模擬試験を運営する出版社が、不正アクセスにより、約32万件の個人情報が情報漏洩した可能性があることを公表しました。

情報漏洩した可能性があるのは、氏名、性別、塾コード、生徒ID、進学情報など、学習塾を通じて申し込んだ模試受験者の個人情報です。

公表内容によると、攻撃者はSQLインジェクションを悪用し、当該出版社が運営するWebサイトのサーバーに不正アクセスしたとされています。

同社は、不正アクセスを確認した直後から、外部のセキュリティ専門企業と連携し、運営するWebサイトに対して不正アクセスの遮断に向けた対策を進めているとしています。

サイト改修時の確認漏れによりSQLインジェクションの脆弱性を見逃した事例

2025年2月、ある自治体が運営するふるさと納税特設サイトが不正アクセスを受け、約41万件の個人情報が情報漏洩したことが公表されました。

情報漏洩が確認されたのは、寄附者のメールアドレスや電話番号に加え、ふるさと納税特設サイト会員のログインID・パスワード、さらに、ふるさと納税管理システムにおける町職員などのアカウント情報です。

公表内容によると、本件の原因は、ふるさと納税特設サイト内のページを改修した際に、確認漏れによってSQLインジェクションの脆弱性を見逃していたこととされています。

その結果、脆弱性が悪用され、不正アクセスと大規模な情報漏洩につながりました。

当該自治体は再発防止策として、より高度なクラウドセキュリティ製品の導入に加え、脅威の検出・調査・対処を行う監視体制を運用するとしています。

SQLインジェクションへの対策


SQLインジェクションは、適切な対策を講じることで、被害のリスクを低減できる攻撃です。

ここでは、SQLインジェクション対策として有効な6つの方法を紹介します。

  • プリペアドステートメントの使用
  • エラーメッセージの非表示
  • WAFの導入
  • データベース権限の最小化
  • 脆弱性診断の実施
  • データベースサーバーのログ監視

それぞれの対策について、順に見ていきましょう。

プリペアドステートメントの使用

SQLインジェクション対策として、特に重要なのがプリペアドステートメントの使用です。

プリペアドステートメントとは、SQL文の構造をあらかじめデータベース側で準備し、後から入力値を別のデータとして渡す仕組みです。

SQLインジェクションは、外部から入力された値をSQL文にそのまま組み込んで処理することで発生します。

一方、プリペアドステートメントを使用すると、SQL文の構造と入力値を分けて扱えるため、入力値がSQL命令として解釈されることを防げ、結果として不正なSQLの実行を防止できます。

なお、プリペアドステートメントを利用する際は、プレースホルダを使ってSQL文と入力値を分離するのが一般的です。

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

SQLインジェクションの攻撃手法には、エラーベースSQLインジェクションのように、意図的にSQLエラーを発生させ、エラーメッセージに含まれる情報を悪用するものがあります。

攻撃者に不要な情報を与えないためには、データベースやシステムの詳細がわかるエラーメッセージは表示しない設定にしておくことが重要です。

WAFの導入

WAF(Web Application Firewall)とは、WebアプリケーションへのHTTP/HTTPS通信を監視し、不正なリクエストを検知・遮断するセキュリティ対策です。

WAFを導入することで、SQLインジェクションを含む攻撃を検知し、悪意のあるリクエストがWebアプリケーションに到達する前にブロックできます。

関連ページ

WAFとは?仕組みや必要性をわかりやすく解説

データベースの権限の最小化

Webアプリケーションが利用するデータベースアカウントの権限を必要最低限にすることも重要です。

これにより、SQLインジェクションが万が一成功した場合でも、被害を抑えることができます。

脆弱性診断の実施

脆弱性診断とは、WebサイトやWebアプリケーションにおけるセキュリティ上の脆弱性の有無を確認し、そのリスクを評価する取り組みです。

実施方法はサービスによって異なり、ツールを用いた診断や、セキュリティエンジニアによる手動診断などがあります。

SQLインジェクションをはじめとするサイバー攻撃の被害を防ぐためには、脆弱性を放置せず、定期的に診断と評価を行い、脆弱性が残存しない状態を保つことが重要です。

特に、WebサイトやWebアプリケーションは、機能追加や改修の過程で新たな脆弱性が入り込むことがあります。

そのため、運用中のWebサイトのリスクを継続的に確認することに加え、リリース前や改修後のタイミングで脆弱性診断を実施することが有効です。

継続的に脆弱性診断を行うことで、脆弱性の早期発見と対策につながり、情報漏洩や不正アクセスの予防に役立ちます。

関連ページ

脆弱性診断ツールと手動診断の違いとは? それぞれのメリット・デメリットを解説

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

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

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

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

適切な初動対応を迅速に行うことで、その後の被害拡大を防げます。

データベースサーバーのログには、実行されたSQL文や処理時間、エラーの発生状況などが記録されます。

そのため、ログに不審なSQL文やエラーが記録されていないかを定期的に確認することで、第三者による攻撃の兆候を早期に把握しやすくなります。

ただし、データベースサーバーのログ監視は、SQLインジェクションを未然に防ぐための対策ではなく、主に、攻撃を受けた際の初動対応を早め、被害拡大を防ぐための対策として位置付けられます。

適切な初動対応を迅速に行うことで、その後の被害拡大を抑えやすくなります。

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

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

「LANSCOPE プロフェッショナルサービス」が提供する「Webアプリケーション脆弱性診断」は、セキュリティの専門家がきめ細かい診断を行い、Webアプリケーションの脆弱性の洗い出しや有効な対策を提案するサービスです。

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

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

関連ページ

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

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

関連ページ

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

まとめ

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

本記事のまとめ

  • SQLインジェクションとは、WebサイトやWebアプリケーションの脆弱性を悪用し、不正なSQL文をデータベースに送信するサイバー攻撃
  • SQLインジェクションがなくならない理由として、「レガシーシステムが残っている」「既存コードの修正が難しい」「開発スピードが優先されやすい」などが挙げられる
  • AIが悪用された場合、不正な入力パターンの作成や攻撃対象の調査が効率化され、被害の拡大につながる恐れがある
  • SQLインジェクション対策では、「プリペアドステートメントの使用」といった開発面の対策に加え、「WAFの導入」や「脆弱性診断の実施」といった運用面の対策も重要

被害事例からもわかるように、SQLインジェクションは現在も無視できないセキュリティリスクです。

被害の発生を防ぐためには、攻撃の原因となる脆弱性を放置したり見逃したりしないことが重要です。

定期的に脆弱性診断を実施し、現状のリスクを把握したうえで、必要な対策を継続的に実施することを目指しましょう。

本記事で紹介した「LANSCOPE プロフェッショナルサービス」は、セキュリティの専門家による診断を通じて、Webアプリケーションに潜む脆弱性の把握や、対策の検討に役立つ「Webアプリケーション脆弱性診断」を提供しています。

SQLインジェクションのリスクを低減し、安全なシステム運用につなげたいとお考えの企業・組織の方は、ぜひ実施をご検討ください。

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

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

資料をダウンロードする