第30章 XXEから身を守る
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
一般的に言って、XXE を防御するのは実に簡単である。XMLパーサで外部エンティティを無効にするだけでよい(図30-1参照)。どのように行うかはXMLパーサに依存するが、通常は1行の設定で済む:
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);
OWASPは、多くのXXEがデフォルトで有効になっているため、JavaベースのXMLパーサーに対してXXEは特に危険であると指摘している。依存している言語とパーサによっては、XXE がデフォルトで無効になっている可能性がある。必ずXMLパーサーのAPIドキュメントをチェックして確認すること。XXEがデフォルトで無効になっていると思わないこと。
図 30-1. XXE攻撃は、XMLパーサーを適切に設定することで簡単にブロックできる。
他のデータ形式を評価する
アプリケーションのユースケースによっては、XMLではなく別のデータ形式に依存するようにアーキテクトを変更することが可能かもしれない。このような変更は、コードベースを簡素化すると同時に、XXEリスクを排除することができる。通常、XMLはJSONと 、他の形式を見るときはJSONをデフォルトにすることができる。
一方、JSONは、アプリケーションが実際のXML、SVG、その他のXML由来のファイルタイプをパースする場合には実用的ではない。しかし、アプリケーションがたまたまXMLの形をした標準的な階層のペイロードを送信する場合には、実用的なソリューションとなるだろう。
一般的に言って、JSONとXMLは、表30-1が示すように、あたかも直接の競争相手であるかのように並べて比較することができる。
| カテゴリー | XML | JSON |
|---|---|---|
ペイロードサイズ |
大型 |
コンパクト |
仕様の複雑さ |
高い |
低い |
使いやすさ |
複雑な解析が必要 |
JavaScript互換性のためのシンプルな構文解析 |
メタデータのサポート |
はい |
いいえ |
レンダリング(HTMLのような構造化を介して) |
簡単だ |
難しい |
混合コンテンツ |
サポート |
未対応 |
スキーマ検証 |
サポート |
未対応 |
オブジェクトマッピング |
なし |
JavaScript |
読みやすさ |
低い |
高い |
コメントサポート |
はい |
いいえ |
セキュリティ |
より低い |
より高い |
この2つの形式の比較には膨大な時間がかかるだろうが、表30-1を見ればすぐにいくつかのことが把握できるはずだ:
-
JSONはXMLよりもはるかに軽量な形式だ。
-
JSONは剛性に劣るが、より高速で作業しやすいペイロードをもたらす。
-
JSONはJavaScriptのオブジェクトにマッピングされるが、XMLはDOMツリーに近い(DOMはXML由来の形式だから)。
このことから、JavaScriptで解釈される軽量な構造化データを扱うAPIでは、JSONが許容できる選択肢である一方、ペイロードが最終的にレンダリングされるようなケースでは、XMLが依然として理想的であると結論づけることができる。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access