Webアプリケーションへの攻撃には、SQLインジェクション、OSコマンドインジェクション、ディレクトリトラバーサル、クロスサイトスクリプティング、CSRF、クリックジャッキングなどがあります。
名称は似ていますが、見分けるポイントは明確です。
- 外部から与えられた情報が、何として解釈されたか
- どこで不正な処理が実行されたか
- 誰の権限・操作が悪用されたか
例えば、入力がSQL文の一部として扱われればSQLインジェクション、閲覧者のブラウザで不正なスクリプトが動けばXSS、ログイン済み利用者のブラウザから意図しない要求を送らせればCSRFです。
この記事では、対応問題の中心となるSQLインジェクション、XSS、CSRF、ディレクトリトラバーサルに加え、現行SGシラバスに含まれるOSコマンドインジェクション、クリックジャッキング、バッファオーバーフロー、ドライブバイダウンロードまで整理します。
- 先に結論:何が、どこで不正に扱われたかを見る
- 1.SQLインジェクション:入力をSQL文の一部として解釈させる
- 2.OSコマンドインジェクション:入力をOSコマンドとして実行させる
- 3.ディレクトリトラバーサル:外部からファイルパスを操作する
- 4.クロスサイトスクリプティング(XSS):閲覧者のブラウザでスクリプトを実行させる
- 5.CSRF:ログイン済み利用者へ意図しない要求を送らせる
- 6.クリックジャッキング:画面を重ねて意図しないクリックをさせる
- 7.バッファオーバーフロー:メモリ領域の境界を超えて書き込ませる
- 8.ドライブバイダウンロード:Web閲覧をマルウェア感染の入口にする
- 9.ゼロデイ攻撃は個別のWeb攻撃名ではない
- 10.対策方法を取り違えない
- よくある取り違え
- 科目Bでの判断手順
- まとめ
- 関連記事
- 参考資料・基準日
先に結論:何が、どこで不正に扱われたかを見る
| 攻撃 | 不正に扱われるもの | 主な実行・影響箇所 | 典型的な結果 |
|---|---|---|---|
| SQLインジェクション | SQL文の構造 | データベース | 情報閲覧、改ざん、削除、認証回避 |
| OSコマンドインジェクション | OSコマンドの構造 | WebサーバのOS | ファイル操作、任意コマンド実行 |
| ディレクトリトラバーサル | ファイル名・パス | Webサーバ内のファイル | 非公開ファイルの閲覧・改ざん |
| クロスサイトスクリプティング(XSS) | Webページへ出力される文字列 | 閲覧者のブラウザ | 偽表示、情報窃取、不正操作 |
| CSRF | 認証済み利用者からの要求 | 対象Webサービス | 意図しない送金、設定変更、投稿 |
| クリックジャッキング | 画面表示とクリック操作 | 閲覧者のブラウザ | 意図しないボタン・リンク操作 |
| バッファオーバーフロー | メモリ領域への書込み | サーバ側プログラムなど | 異常終了、任意コード実行 |
| ドライブバイダウンロード | Web閲覧とソフトウェアの脆弱性 | 利用者端末 | マルウェア感染 |
試験では、被害結果だけでなく、次のどこに問題があったかを確認します。
- データベース
- OSコマンド
- ファイルパス
- 閲覧者のブラウザ
- 認証済み要求
- 画面上のクリック
- メモリ領域
- Web閲覧を契機とする感染
1.SQLインジェクション:入力をSQL文の一部として解釈させる
SQLインジェクションは、外部からの入力を安全に扱わずSQL文へ組み込み、入力内容を単なる値ではなく、SQLの命令・条件・構文の一部として解釈させる攻撃です。
典型例
商品の検索画面で入力された文字列を、文字列連結によってSQL文へ直接組み込んでいるとします。
攻撃者が特殊な文字列を入力し、SQL文の条件や構造を変えると、次の被害が生じる可能性があります。
- 本来表示されない顧客情報の閲覧
- データの改ざん・削除
- 認証処理の回避
- データベース構造の推測
- データベース権限の範囲内での不正操作
- 製品や設定によってはOSコマンド実行への発展
見分ける語
- SQL
- データベース
- 問合せ文
- 検索条件
- レコード
- 認証回避
- データの取得・改ざん・削除
主な対策
基本は、SQL文の構造と入力値を分離することです。
- プレースホルダを用いたパラメータ化クエリを利用する
- プレースホルダなどで値をバインドできるデータベースAPIを利用する
- データベース接続用アカウントを最小権限にする
- 詳細なデータベースエラーを利用者へ表示しない
- 入力形式・長さを業務要件に基づいて確認する
危険な文字を入力時に削除するだけでは、符号化、DBMSの違い、構文の違いなどによって回避される可能性があります。
根本対策は、入力値をSQLの構文として解釈させない実装です。
OSコマンドインジェクションとの違い
| SQLインジェクション | OSコマンドインジェクション |
|---|---|
| SQL文の構造を変える | OSコマンドの構造を変える |
| 主にデータベースが影響を受ける | 主にWebサーバのOSが影響を受ける |
| DB接続アカウントの権限範囲で被害が生じる | WebアプリケーションのOS権限範囲で被害が生じる |
両者は「外部入力が命令の一部として解釈される」という点では似ていますが、注入先が異なります。
2.OSコマンドインジェクション:入力をOSコマンドとして実行させる
OSコマンドインジェクションは、Webアプリケーションが外部入力を使ってOSコマンドを組み立てる際に、攻撃者の入力をコマンドや追加命令の一部として解釈させる攻撃です。
典型例
利用者が入力したホスト名を使い、Webサーバ上で通信確認コマンドを実行する機能があるとします。
入力値をそのままシェルへ渡している場合、攻撃者が区切り文字や追加コマンドを含めることで、想定外の命令を実行させる可能性があります。
発生し得る被害
- サーバ内ファイルの閲覧・改ざん・削除
- アカウント・設定の変更
- 不正プログラムのダウンロード・実行
- バックドアの設置
- 認証情報の窃取
- 内部ネットワークへの攻撃
- Webサーバ権限の範囲での任意操作
主な対策
- 外部入力を使ってシェルコマンドを組み立てない
- 必要な処理を安全なAPI・ライブラリで実装する
- 実行する機能・引数を固定する
- 許可する値を業務要件に基づいて限定する
- Webアプリケーションを最小権限で実行する
ブラックリストで特定の記号だけを削除する対策には、漏れや回避の可能性があります。
3.ディレクトリトラバーサル:外部からファイルパスを操作する
ディレクトリトラバーサルは、ファイル名やパスを指定する入力へ相対パスなどを含め、本来公開を想定していないディレクトリ・ファイルへ不正にアクセスする攻撃です。
パストラバーサルと呼ばれることもあります。
典型例
ダウンロード機能で、URLのパラメータから受け取ったファイル名をそのままサーバ内のパスへ連結しているとします。
攻撃者が親ディレクトリを表す指定などを入力すると、公開領域の外にある次の情報を読み出す可能性があります。
- 設定ファイル
- 認証情報
- 個人情報
- ソースコード
- ログ
- 暗号鍵
- システムファイル
書込み・削除機能が存在する場合は、閲覧だけでなく改ざん・削除へつながる場合もあります。
見分ける語
- ファイル名
- パス
- 相対パス
- 親ディレクトリ
- 公開範囲外
- ダウンロード機能
- 設定ファイル
主な対策
- 利用者へサーバ内のパスを直接指定させない
- 利用者にはファイルIDを指定させ、サーバ側で管理済みファイルへ対応付ける
- 許可した保存領域の外へアクセスできないことを確認する
- パスを正規化した後に許可範囲を検証する
- Webアプリケーションのファイルアクセス権限を最小化する
特定の文字列だけを削除する方法では、URLエンコード、二重エンコード、OSごとの区切り文字などによって回避される可能性があります。
外部入力でサーバ内のパスを自由に操作させない設計が基本です。
DoS・バッファオーバーフローとの違い
| 攻撃 | 中心となる動作 |
|---|---|
| ディレクトリトラバーサル | ファイルパスを操作し、許可範囲外のファイルへアクセスする |
| DoS・DDoS攻撃 | サービス提供に必要な通信・処理資源などを消費させ、利用を妨害する |
| バッファオーバーフロー | メモリ領域の境界を超えてデータを書き込ませる |
ディレクトリトラバーサルは、通信量やメモリ境界ではなく、ファイルパスの扱いが中心です。
4.クロスサイトスクリプティング(XSS):閲覧者のブラウザでスクリプトを実行させる
クロスサイトスクリプティングはXSSと略されます。
外部からの入力を安全に処理せずWebページへ出力し、そのページを閲覧した利用者のブラウザで、不正なスクリプトを実行させる攻撃です。
典型例
掲示板の投稿内容を、そのままHTMLへ埋め込んで表示するWebサイトがあるとします。
攻撃者がスクリプトを含む投稿を行い、他の利用者が閲覧すると、その利用者のブラウザ上で不正な処理が実行される可能性があります。
主な影響
- 正規サイト上への偽画面表示
- 入力情報の窃取
- Cookie・セッション情報の窃取
- 利用者権限を利用した不正操作
- 不正サイトへの誘導
- 表示内容の改ざん
- マルウェア配布への誘導
SQLインジェクションとの違い
| SQLインジェクション | XSS |
|---|---|
| SQL文へ入力を組み込む | Webページへ入力を出力する |
| 主にデータベースで不正処理が行われる | 主に閲覧者のブラウザでスクリプトが実行される |
| サイト側のデータが主な攻撃対象 | サイトを閲覧する利用者が主な被害対象になる |
「攻撃対象のWebサイト」と「実際に不正コードが動く場所」を分けて考えます。
格納型・反射型・DOMベース
- 格納型XSS:不正な入力が掲示板やプロフィールなどへ保存され、閲覧した利用者へ影響する
- 反射型XSS:URLパラメータなどの入力が応答ページへ反映され、リンクを開いた利用者へ影響する
- DOMベースXSS:ブラウザ側のJavaScriptが外部入力を不安全にDOMへ反映して発生する
SGでは細分類の暗記より、外部入力がブラウザ内で実行可能なコードとして扱われることを押さえます。
主な対策
- 出力先の文脈に応じて適切にエスケープする
- HTML、属性値、JavaScript、URLなどの文脈を区別する
- 外部入力から実行可能な要素を動的に生成しない
- 安全なテンプレート・フレームワーク機能を利用する
- 必要に応じて入力を安全なHTMLへサニタイズする
- Content Security Policyを補助的に利用する
- CookieへHttpOnly属性を適切に設定する
入力時に全ての特殊文字を一律削除するのではなく、実際に出力する場所に応じた処理が重要です。
5.CSRF:ログイン済み利用者へ意図しない要求を送らせる
CSRFはCross-Site Request Forgeryの略で、クロスサイトリクエストフォージェリと呼ばれます。
ログイン済み利用者のブラウザから、利用者が意図していない要求を対象Webサービスへ送信させる攻撃です。
典型例
- 利用者がネットバンキングへログインしている
- 同じブラウザで攻撃者の用意したページを開く
- 攻撃者のページから銀行サイトへ送金・設定変更の要求が送られる
- ブラウザが銀行サイトのCookieを自動的に付加する
- 銀行サイトが要求の正当性を確認せず処理する
銀行サイトから見ると、ログイン済み利用者のブラウザから正しい認証情報付きで要求が届きます。
問題は、その要求が本当に利用者の意思によるものか確認できないことです。
XSSとの違い
| XSS | CSRF |
|---|---|
| 対象サイトのページ内で不正スクリプトを実行させる | 外部サイトなどから意図しない要求を送らせる |
| ブラウザ上でのコード実行が中心 | 認証済み要求の正当性・本人意思の確認不足が中心 |
| 出力処理の不備が中心 | リクエスト検証の不備が中心 |
セッションハイジャックとの違い
| セッションハイジャック | CSRF |
|---|---|
| 攻撃者が奪ったセッション情報を使って操作する | 利用者本人のブラウザへ要求を送らせる |
| 認証済みセッションの識別情報を盗用する | ブラウザが正規Cookieを自動付加する性質を悪用する |
| 攻撃者がセッションを利用する | 利用者が気付かないまま要求を送信する |
CSRFでは「本人のブラウザから送られた」ことと、「本人が意図した」ことは同じではありません。
主な対策
- 利用者・セッションに結び付いた推測困難なCSRF対策トークンを検証する
- 重要処理の直前に再認証・取引内容確認を行う
- CookieのSameSite属性を適切に設定する
- GET要求でデータ変更・重要処理を行わない
- Origin・Refererヘッダを補助的に検証する
- フレームワークのCSRF対策機能を正しく利用する
CSRF対策トークンなど、利用者が意図した要求かをサーバ側で識別する仕組みを中心にし、SameSite属性やOrigin・Referer確認などは補助的に組み合わせます。
6.クリックジャッキング:画面を重ねて意図しないクリックをさせる
クリックジャッキングは、正規サイトのボタン・画面を透明又は見えにくい状態で別ページへ重ね、利用者を視覚的に欺いて、意図しない操作を行わせる攻撃です。
典型例
利用者には「動画を再生する」ボタンが表示されているように見えますが、その上又は下に透明な正規サイトの設定変更ボタンが重ねられており、クリックによって意図しない設定変更が実行されます。
CSRFとの違い
| CSRF | クリックジャッキング |
|---|---|
| ブラウザから不正な要求を自動的に送らせる | 利用者の実際のクリックを別の操作へ向ける |
| 利用者が対象ボタンを直接押さなくても成立し得る | 視覚的な欺きとクリック操作が中心 |
| 要求の正当性検証が中心課題 | 他サイトからのフレーム表示制御が中心課題 |
主な対策
- Content-Security-Policyの`frame-ancestors`でフレーム表示元を制限する
- X-Frame-Optionsを適切に設定する
- 重要処理の直前に再認証・内容確認を求める
- クリック一回だけで重大処理を完了させない
クリックジャッキングは、主にマウス・タップなど画面操作で実行できる機能が対象です。
7.バッファオーバーフロー:メモリ領域の境界を超えて書き込ませる
バッファオーバーフローは、プログラムが確保したメモリ領域の境界を超えてデータを書き込ませ、異常終了や任意コード実行などを引き起こす攻撃です。
Webアプリケーション固有の攻撃というより、Webサーバ、ライブラリ、ミドルウェア、拡張機能などを含むプログラム全般で発生し得るメモリ安全性の問題です。
主な影響
- プログラムの異常終了
- サービス停止
- 任意コード実行
- 情報漏えい
- マルウェア感染
- バックドアの設置
- 権限の奪取
ディレクトリトラバーサルとの違い
- ディレクトリトラバーサル:パスを操作してファイルへアクセスする
- バッファオーバーフロー:メモリ境界を超えてデータを書き込ませる
基本的な対策
- メモリ安全性を備えた言語・ライブラリを利用する
- 入力長とバッファ境界を適切に確認する
- 危険なメモリ操作を最小化する
- コンパイラ・OSの保護機能を利用する
- 脆弱性が修正された製品・ライブラリへ更新する
- 不要な権限でプログラムを実行しない
8.ドライブバイダウンロード:Web閲覧をマルウェア感染の入口にする
ドライブバイダウンロードは、改ざんされたWebサイトや攻撃者が用意したWebコンテンツなどの閲覧を契機に、ブラウザ、プラグイン、OSなどの脆弱性を悪用し、マルウェアを取得・実行させる手口です。
利用者が明示的にインストール操作をしなくても感染が進む場合があります。
他のWeb攻撃との違い
ドライブバイダウンロードは、SQLインジェクションやXSSのような一つのWebアプリケーション脆弱性の名称ではありません。
Webサイトの閲覧を、利用者端末へマルウェアを送り込む感染経路として利用する攻撃手法です。
攻撃者が正規サイトを改ざんするためにSQLインジェクションなどを悪用し、訪問者への感染段階でドライブバイダウンロードを行うこともあります。
水飲み場型攻撃との違い
| 水飲み場型攻撃 | ドライブバイダウンロード |
|---|---|
| 標的集団が利用するサイトを選び、待ち伏せする攻撃戦略 | Web閲覧を契機にマルウェアへ感染させる方法 |
| 誰が訪れるサイトを狙うかに重点 | どのように感染させるかに重点 |
一つの攻撃が、水飲み場型攻撃であると同時に、感染方法としてドライブバイダウンロードを利用する場合があります。
基本的な対策
- OS、ブラウザ、PDF閲覧ソフトなどを更新する
- 不要なプラグイン・拡張機能を削除する
- マルウェア対策、EDR(Endpoint Detection and Response)、Webフィルタリングを利用する
- Webサイト運営側はCMS・サーバを更新する
- Web改ざんを監視する
- 不審な警告や広告からファイルを実行しない
9.ゼロデイ攻撃は個別のWeb攻撃名ではない
ゼロデイ攻撃は、SQLインジェクション、XSS、CSRFのように「どの処理を悪用するか」を表すWeb攻撃名ではありません。
SGでは、脆弱性に対する修正プログラムが提供される前にその脆弱性を悪用する攻撃として整理します。NISTでは、従来知られていなかった脆弱性を悪用する攻撃として定義しています。いずれも、SQLやブラウザなど特定の処理方式そのものを表す名称ではない点が重要です。
ゼロデイ攻撃の詳しい説明は、「標的型攻撃」で扱います。本記事では、Webアプリケーションへの個別攻撃手法との境界だけを確認します。
10.対策方法を取り違えない
| 攻撃 | 中心となる対策の考え方 |
|---|---|
| SQLインジェクション | パラメータ化クエリでSQL文と値を分離する |
| OSコマンドインジェクション | シェル呼出しを避け、外部入力をコマンドへ組み込まない |
| ディレクトリトラバーサル | 外部からサーバ内パスを自由に指定させない |
| XSS | 出力先の文脈に応じて適切にエスケープする |
| CSRF | CSRF対策トークン、再認証、要求の正当性確認 |
| クリックジャッキング | `frame-ancestors`などでフレーム表示を制限する |
| バッファオーバーフロー | メモリ安全な実装、境界確認、更新済み製品を利用する |
| ドライブバイダウンロード | 端末ソフト更新、Web改ざん対策、エンドポイント保護 |
全てを「入力チェック」や「WAF(Web Application Firewall)」で防げるわけではありません。
WAFなどは検知・被害軽減に役立つ場合がありますが、根本対策は、攻撃ごとに脆弱性の原因となる実装・設定・運用を修正することです。
よくある取り違え
| 誤った理解 | 正しい整理 |
|---|---|
| SQLインジェクションは閲覧者のブラウザでスクリプトを実行する | それはXSS。SQLインジェクションはSQL文を不正に変える |
| SQLインジェクション対策は危険な記号を削除するだけでよい | SQL文と値を分離する実装が基本 |
| OSコマンドインジェクションはデータベースへの攻撃である | WebサーバのOSコマンドを不正に実行させる |
| ディレクトリトラバーサルは大量通信でサービスを止める | それはDoS・DDoS。トラバーサルはファイルパスの悪用 |
| XSSはWebサーバ上で不正スクリプトを実行する | 主に閲覧者のブラウザで実行させる |
| XSS対策は入力時に全ての特殊文字を削除する | 出力先の文脈に応じたエスケープが基本 |
| CSRFでは攻撃者が盗んだセッションIDで操作する | それはセッションハイジャック。CSRFは利用者のブラウザへ要求を送らせる |
| SameSite属性だけで全てのCSRFを防げる | トークンや重要処理時の確認も組み合わせる |
| クリックジャッキングは不正要求を自動送信するだけの攻撃 | 画面を重ね、利用者のクリックを別操作へ向ける |
| バッファオーバーフローは公開範囲外のファイルを読む | それはディレクトリトラバーサル。バッファオーバーフローはメモリ境界を超える |
| ドライブバイダウンロードは一つの実装脆弱性名である | Web閲覧をマルウェア感染の入口にする攻撃手法 |
| ゼロデイ攻撃はWebアプリケーション固有の一手口である | 修正等が利用できない段階で脆弱性を悪用する状況・時点の名称 |
| WAFを導入すれば安全な実装は不要になる | 補助的対策であり、根本原因の修正が必要 |
科目Bでの判断手順
- データベースのSQL文が変えられたか
SQL文の条件・命令として入力が扱われていればSQLインジェクションです。
- サーバ上でOSコマンドが実行されたか
外部入力による任意コマンド実行ならOSコマンドインジェクションです。
- ファイル名・パスが操作されたか
公開範囲外のファイルへアクセスしていればディレクトリトラバーサルです。
- 閲覧者のブラウザで不正スクリプトが動いたか
Webページへ出力された入力が実行されたならXSSです。
- ログイン済み利用者へ意図しない要求を送らせたか
利用者のブラウザと認証状態を悪用していればCSRFです。
- 画面を重ねて利用者へクリックさせたか
視覚的に欺いて別の操作を行わせればクリックジャッキングです。
- メモリ領域の境界を超えて書き込ませたか
異常終了・任意コード実行へつながるならバッファオーバーフローです。
- Web閲覧を契機にマルウェアへ感染したか
ソフトウェア脆弱性を悪用した感染ならドライブバイダウンロードです。
- 手口ではなく修正前という時点を問うていないか
その場合はゼロデイ攻撃であり、「標的型攻撃」の論点です。
まとめ
- Webアプリケーションへの攻撃は、何が、どこで不正に解釈・実行されたかで見分ける
- SQLインジェクションは、入力をSQL文の一部として解釈させる
- SQLインジェクションの根本対策は、パラメータ化クエリによるSQL文と値の分離
- OSコマンドインジェクションは、入力をサーバ上のOSコマンドとして実行させる
- ディレクトリトラバーサルは、ファイルパスを操作して許可範囲外へアクセスする
- XSSは、Webページへ出力された入力を閲覧者のブラウザでスクリプトとして実行させる
- XSS対策は、出力先の文脈に応じたエスケープが基本
- CSRFは、ログイン済み利用者のブラウザへ意図しない要求を送らせる
- CSRFはセッションハイジャックと異なり、攻撃者がセッションIDを直接利用することが本質ではない
- クリックジャッキングは、画面を重ねて利用者のクリックを別の操作へ向ける
- バッファオーバーフローは、メモリ領域の境界を超えて書き込ませる
- ドライブバイダウンロードは、Web閲覧をマルウェア感染の入口にする
- ゼロデイ攻撃は特定のWeb攻撃手法ではなく、脆弱性への修正が整う前などの時点・状況に着目する
- WAFなどの補助的対策だけに依存せず、攻撃ごとに根本原因を修正する
- 科目Bでは、被害結果だけでなく、入力・要求・コードが処理された位置を確認する
関連記事
- C1-T03:マルウェアの分類
- C1-T05:標的型攻撃
- C1-T07:ソーシャルエンジニアリングとフィッシング
- C1-T09:ネットワーク・通信への攻撃
- C2-T03:ハッシュ関数とメッセージ認証
- C5-T02:脆弱性管理とCVSS
- C5-T07:マルウェア対策
- C5-T08:セキュリティ製品の使い分け
- C5-T11:セキュアプロトコルと実装技術
- C9-T04:データベースとセキュリティ
参考資料・基準日
本記事は、2026年8月3日時点のSGシラバスVer.4.1を基準に作成しています。
- IPA「情報セキュリティマネジメント試験(レベル2)シラバス Ver.4.1」
- IPA「安全なウェブサイトの作り方」(2026年8月7日参照)
- NIST CSRC Glossary「Zero Day Attack」
記事最終確認日:2026年8月7日

コメント