no-external-entities

外部実体 (SGML、XML)

[1] 単独のファイルとなった実体のことを、外部実体といいます。 広義には文書実体外部部分集合実体も含みますが、 狭義には実体宣言宣言されるもののみを指します。

仕様書

分類

[2] XML の外部実体の種類と、その満たさないといけない構文規則:

文書実体document
外部部分集合extSubset
宣言間で参照される外部引数実体extSubsetDecl
宣言中で参照される外部引数実体
実体値中で参照される外部引数実体
文書実現値内で参照される外部解析実体extParsedEnt
外部非解析実体(無制限)

取得

[17] XML処理器は、実体内容取得 (retrieve) する場合、 次のようにします >>16

  1. [18] 公開識別子システム識別子、および何らかの付加情報を使って、 URL を決定しようと試みて構いません。
  2. [19] >>18 によって決定しない、できない場合には、システム識別子URL を使わなければなりません。

[20] 公開識別子システム識別子正規化については、 それぞれの項を参照。

[21] ここでいう“何らかの付加情報”について XML 仕様そのものでは特に規定がありませんが、 SGML 時代以来そのような対応情報ファイルのことを型録と呼んでいます。

実体解決器も参照。

[22] いくつかの XML処理器XML Catalogs に対応しています。

[24] XML Catalogs では実体名も決定に使うことができます。

[23] WebブラウザーなどのXML処理器においては HTML Standard が規定する文字実体参照に関する公開識別子data: URL の対応関係が実装されています。

[25] Webブラウザーの実装では参照される文脈も決定に使われます。

セキュリティーとプライバシー

[13] 外部実体がその参照元と異なる場合など、外部実体を信用できない可能性がある場合には、 利用者や参照元の著者が想定していない悪意ある情報や指示が混入させられることがありますから、 配慮が必要です >>9

[14] 外部実体による混入だけでなく、例えば外部実体へのアクセスの有無によって利用者文書を開いたかどうかを判断するなどのプライバシーセキュリティーに関わる想定外の利用方法もあり得ますから、注意しないといけません。

[15] Webブラウザーにおける XML の実装が外部実体展開しないのは、 このような問題も一因だったと思われます。

[11] DTD など外部実体HTTP URL で指定されている場合、 外部実体を取得する処理器でそのような文書を読み込むとその HTTP鯖へとアクセスが発生します。 キャッシュ型録の仕組みがあるとはいえ、広く使われている外部実体には大量のアクセスが集中します。

[12] これはスケーラビリティー上の問題と指摘されている >>9 のみならず、実際に HTML などの DTD がある W3CRSSDTD があった NetscapeWebサイトには DDoS攻撃とも言えるほどのアクセスがあり、 苦慮しているようです。

[29] RSSシステム識別子の人も困っていました。

事前条件符号 no-external-entities (WebDAV)

[5] DAV: 名前空間no-external-entities 要素は、外部実体参照されていることを示す事前条件符号です。

[7] payload body外部実体が含まれることを理由に要求を拒絶するなら、 状態符号 403事前条件符号 no-external-entities を使うべきです >>6, >>9

[10] WebDAV外部実体は信頼出来ないもので注意するべき >>9 としながらも、利用や対応を禁止まではしていないようです。

[8] この要素内容です >>6

メモ

[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>