[1] 単独のファイルとなった実体のことを、外部実体といいます。 広義には文書実体や外部部分集合実体も含みますが、 狭義には実体宣言で宣言されるもののみを指します。
[2] XML の外部実体の種類と、その満たさないといけない構文規則:
文書実体 | document |
外部部分集合 | extSubset |
宣言間で参照される外部引数実体 | extSubsetDecl |
宣言中で参照される外部引数実体 | |
実体値中で参照される外部引数実体 | |
文書実現値内で参照される外部解析実体 | extParsedEnt |
外部非解析実体 | (無制限) |
[17] XML処理器は、実体の内容を取得する場合、 次のようにします >>16。
[21] ここでいう“何らかの付加情報”について XML 仕様そのものでは特に規定がありませんが、 SGML 時代以来そのような対応情報ファイルのことを型録と呼んでいます。
[22] いくつかの XML処理器は XML Catalogs に対応しています。
[23] WebブラウザーなどのXML処理器においては HTML Standard
が規定する文字実体参照に関する公開識別子と
data:
URL の対応関係が実装されています。
[13] 外部実体がその参照元と異なる場合など、外部実体を信用できない可能性がある場合には、 利用者や参照元の著者が想定していない悪意ある情報や指示が混入させられることがありますから、 配慮が必要です >>9。
[14] 外部実体による混入だけでなく、例えば外部実体へのアクセスの有無によって利用者が文書を開いたかどうかを判断するなどのプライバシーやセキュリティーに関わる想定外の利用方法もあり得ますから、注意しないといけません。
[15] Webブラウザーにおける XML の実装が外部実体を展開しないのは、 このような問題も一因だったと思われます。
[11] DTD など外部実体が HTTP URL で指定されている場合、 外部実体を取得する処理器でそのような文書を読み込むとその HTTP鯖へとアクセスが発生します。 キャッシュや型録の仕組みがあるとはいえ、広く使われている外部実体には大量のアクセスが集中します。
[12] これはスケーラビリティー上の問題と指摘されている >>9 のみならず、実際に HTML などの DTD がある W3C や RSS の DTD があった Netscape の Webサイトには DDoS攻撃とも言えるほどのアクセスがあり、 苦慮しているようです。
no-external-entities
(WebDAV)[5] DAV:
名前空間の no-external-entities
要素は、外部実体が参照されていることを示す事前条件符号です。
[7] 鯖が payload body に外部実体が含まれることを理由に要求を拒絶するなら、
状態符号 403
と事前条件符号
no-external-entities
を使うべきです >>6, >>9。
[3] なんとなく、
<!ENTITY % ent SYSTEM "data:,%22EntityValue%22"> <!ENTITY entity %ent;>みたいのはありかなあ? って気がしますが、 XML 仕様書にはダメとは書いてないので、いいんでしょう。
[26] ERB decision: External entities (Jon Bosak著, ) <https://lists.w3.org/Archives/Public/w3c-sgml-wg/1997Jun/0460.html>
[27] RFC 5323 - Web Distributed Authoring and Versioning (WebDAV) SEARCH () <https://tools.ietf.org/html/rfc5323#section-7.1>