SC Workbook
科目 A-2 · セキュリティ

XXE の対策

Web API に次のリクエストを送信したところ,応答のエラーメッセージに「商品 root:x:0:0:root:/root:/bin/bash(以下略)は存在しません」と表示された。この脆弱性への対策として,最も適切なものはどれか。

POST /api/order HTTP/1.1
Content-Type: application/xml

<?xml version="1.0"?>
<!DOCTYPE order [<!ENTITY x SYSTEM "file:///etc/passwd">]>
<order><item>&x;</item></order>
  1. アXML パーサの設定で DTD の処理を無効にするか,外部実体の解決と外部 DTD の読込みを無効にする。
  2. イ実体参照の展開回数や展開後のサイズに上限を設け,上限を超えた XML 文書の解析を中止する。
  3. ウエラーメッセージに入力値を含めないようにして,応答から外部実体の内容を読み取れないようにする。
  4. エXML 文書から取り出した値を Web ページに出力する際に,HTML の特殊文字をエスケープする。
正解と解説を見る

正解 ア

この問題の基礎知識

  • XML の DTD では実体(エンティティ)を定義でき,SYSTEM で URI を指定した外部実体は,そのファイルなどの内容を読み込んで,文書中の実体参照(&x; など)の位置に展開される。
  • XXE(XML 外部実体攻撃)は,外部実体の展開を悪用してサーバ上のファイルを読み出させたり,サーバから内部の宛先にリクエストを送らせたりする攻撃であり,XML の解析時にサーバ上で起こる。
  • Billion Laughs は,実体を入れ子に定義して大量に展開させ,メモリなどの資源を枯渇させるサービス妨害攻撃であり,XXE とは狙いも対策も異なる。
  • 出力時の HTML エスケープは,ブラウザでの解釈によるクロスサイトスクリプティングを防ぐものであり,サーバでの XML の解析時に起こる問題には効かない。
アXML パーサの設定で DTD の処理を無効にするか,外部実体の解決と外部 DTD の読込みを無効にする。正解

DTD で定義した外部実体 x が展開され,/etc/passwd の内容がエラーメッセージに出力されている(XXE)。OWASP は,可能な限り DTD を無効にし,DTD が必要な場合は外部実体の解決と外部 DTD の読込みを無効にするよう推奨している。

イ実体参照の展開回数や展開後のサイズに上限を設け,上限を超えた XML 文書の解析を中止する。

展開の上限は,実体を入れ子に展開させて資源を枯渇させる Billion Laughs などのサービス妨害への対策である。この外部実体はファイルを 1 回読み込むだけなので,上限を設けてもファイルの読込みは防げない。

ウエラーメッセージに入力値を含めないようにして,応答から外部実体の内容を読み取れないようにする。

応答に表示されなくても外部実体は展開されており,外部 DTD やパラメタ実体を使ってファイルの内容を取り出す手口や,http の URI を指定した外部実体でサーバから内部の宛先にリクエストを送らせる手口が残る。

エXML 文書から取り出した値を Web ページに出力する際に,HTML の特殊文字をエスケープする。

出力時のエスケープはクロスサイトスクリプティングへの対策である。外部実体の展開は XML の解析時にサーバ上で行われ,ファイルの内容は既に読み込まれているので,出力時の処理では防げない。

検証用の出典出典照合済み
OWASP XML External Entity Prevention Cheat Sheet / OWASP XML Security Cheat Sheet / CWE-611 Improper Restriction of XML External Entity Reference
照合の根拠(4 件)

リクエストの DTD で外部実体 x に file:///etc/passwd を指定し,item 要素で &x; を参照しているため,エラーメッセージに /etc/passwd の内容が出ている(XXE)。エは出力時の XSS 対策で,解析時に起きる読込みを防げないことは論理的に明らか。

問題 ID A2-SEC-0512 · AI 作成のオリジナル問題 · 正解と各選択肢の根拠を出典の原文で確認しています。 照合日 2026-11-08

非公式の学習用アプリです(IPA とは関係ありません)。問題はすべて AI が作成したオリジナルで、誤りを含む場合があります。