3.8.3 制限できる項目
この機能で制限できる項目を次に示します。これらの項目は制限値を変更できます。
(1) エンティティに関する制限
XMLPではエンティティ展開時に制限をする機能を提供します。制限する項目を次に示します。
-
エンティティ参照の展開回数
-
一般エンティティの文字列長
-
パラメータエンティティの文字列長
-
一般エンティティとパラメータエンティティの展開後の文字列長の合計
(a) エンティティ参照の展開回数
エンティティ参照の展開回数を制限します。XML解析処理で制限値を超えた場合のエラー通知(fatalErrorイベント)または例外発生時のエラーメッセージはKECX01225-Eエラーとなります。
エンティティ参照の展開回数を制限するXML例を次に示します。
<!DOCTYPE root [ <!ENTITY x3 "abc"> <!ENTITY x2 "&x3;&x3;"> <!ENTITY x1 "&x2;&x2;"> ]> <root>&x1;</root>
上記XML例ではエンティティ参照の展開回数は&x1; &x2; &x3; &x3; &x2; &x3; &x3;の7回となります。
(b) 一般エンティティの文字列長
一般エンティティ実体の文字列長を制限します。XML解析処理で制限値を超えた場合のエラー通知(fatalErrorイベント)または例外発生時のエラーメッセージはKECX01232-Eエラーとなります。
一般エンティティの文字列長を制限するXML例を次に示します。
<!DOCTYPE root [ <!ENTITY GE4 "hijk"> <!ENTITY GE3 "abcd"> <!ENTITY GE2 "efgh&GE3;ijk"> <!ENTITY GE1 "lmn"> ]> <root>&GE1;&GE2;</root>
上記XML例ではエンティティ参照しているエンティティGE1やGE2について”lmn”(3文字),GE3展開後の”efghabcdijk”(11文字)の文字列長をチェックします。GE3だけのチェックはしません。参照していないGE4についてはチェックされません。
(c) パラメータエンティティの文字列長
パラメータエンティティ展開後の文字列長を制限します。XML解析処理で制限値を超えた場合のエラー通知(fatalErrorイベント)または例外発生時のエラーメッセージはKECX01232-Eエラーとなります。
パラメータエンティティの文字列長を制限するXML例を次に示します。
<!ENTITY % PE2 "abcd"> <!ENTITY % PE1 "%PE2;efgh"> <!ENTITY GE1 "ij"> <!ENTITY % PEG1 "&GE1;klmn"> <!ENTITY % PEEXT SYSTEM "ext.xml">
上記XML例では,エンティティPE1はPE2のパラメータエンティティ展開後の”abcdefgh”(8文字)の文字列長を,PE2は“abcd”(4文字)の文字列長をチェックします。エンティティPEG1は一般エンティティGE1を参照しますが,パラメータエンティティから一般エンティティへの参照は展開されず,”&GE1;klmn”(9文字)の文字列長をチェックします。参照されていない外部パラメータエンティティPEEXTのチェックはしません。
(d) 一般エンティティとパラメータエンティティの展開後の文字列長の合計
一般エンティティとパラメータエンティティの展開後のすべての文字列長の合計の値を制限します。XML解析処理で制限値を超えた場合のエラー通知(fatalErrorイベント)または例外発生時のエラーメッセージはKECX01233-Eエラーとなります。
一般エンティティとパラメータエンティティの展開後の文字列長の合計を制限するXML例を次に示します。
<!ENTITY GE3 "abcd"> <!ENTITY GE2 "efgh&GE3;ijk"> <!ENTITY GE1 "lmn"> <!ENTITY % PE2 "abcd"> <!ENTITY % PE1 "%PE2;efgh">
上記XML例では, GE1,GE2だけが参照されている場合,参照されている一般エンティティGE1,GE2と定義されているパラメータエンティティPE1,PE2の展開後の文字列長の合計となるため次のとおり26となります。
-
GE1:”lmn”(3文字)
-
GE2:”efghabcdijk”(11文字)
-
PE1:”abcdefgh”(8文字)
-
PE2:”abcd”(4文字)
(e) エンティティによって置き換えられる文字列や参照されるファイルにあるノード数
エンティティによって置き換えられる文字列や参照されるファイルに次のオブジェクトが含まれる場合,その数をノード数として制限します。
XML解析処理で制限値を超えた場合のエラー通知(fatalErrorイベント)または例外発生時のエラーメッセージはKECX01235-Eエラーとなります。
-
要素タグ
-
要素内容
-
属性
-
処理命令
-
コメント
-
CDATAセクション
-
エンティティの参照
エンティティによって置き換えられる文字列や参照されるファイルにあるノード数を制限するXML例を次に示します。
例1 エンティティによって置き換えられる文字列や参照されるファイルにあるノード数の制限のXML例(test.xml)
<?xml version="1.0" ?> <!DOCTYPE root[ <!ELEMENT root ANY > <!ENTITY GE1 SYSTEM "external.xml"> ]> <root>&GE1;</ root>
例2 エンティティによって置き換えられる文字列や参照されるファイルにあるノード数の制限のXML例(external.xml)
<xmlFile> <filler1>example</filler1> <filler1 attr="abc">example</filler1> <!-- comment --> <![CDATA[ cdata section ]]> ・・・ </xmlFile>
上記XML例では,参照しているエンティティGE1(外部エンティティ参照によって読み込んだexternal.xml)に含まれる要素タグ(xmlFile要素やfilter1要素),要素内容(filter1要素の間にある"example")などのオブジェクトの数をノード数としてチェックします。
(2) XMLスキーマの内容モデルに関する制限
XMLスキーマの内容モデルで作成されるノードの最大数を制限する機能を提供します。XML解析処理で制限値を超えた場合のエラー通知(fatalErrorイベント)または例外発生時のエラーメッセージはKECX06248-Eエラーとなります。XMLスキーマの内容モデルで作成されるノードの最大数を制限するXMLスキーマ例を次に示します。
<xsd:complexType> <xsd:sequence maxOccurs="2"> <xsd:element name="child" maxOccurs="1500"/> </xsd:sequence> </xsd:complexType>
上記例のとおりXMLスキーマの複合型の大域定義(一番外側に定義された<xsd:complexType>)に対しmaxOccursに大きな値を指定した場合エラーとなります。ただし,maxOccursに制限値より小さな値の場合でもネストの深さやその他のmaxOccursの指定によって内部のカウンタが制限値を超える場合エラーとなります。
(3) XML名の文字列長
要素および属性のプレフィックスやローカル名,名前空間URIの文字列長を制限する機能を提供します。XML解析処理で制限値を超えた場合のエラー通知(fatalErrorイベント)または例外発生時のエラーメッセージはKECX01234-Eエラーとなります。XML名の文字列長の制限に該当するXMLの例を次に示します。
<?xml version="1.0" encoding="UTF-8"?> <root> <prefix:localname xmlns:prefix="http://www.hitachi.co.jp/xmlp/sample/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz"/> </root>
上記XML例は,XML名の一つである名前空間URIの文字列長が長い場合の例です。この例のように,XML名に長い文字列を指定した場合エラーとなります。
(4) XPath式に関する制限
XPath式のコンパイル時にXPath式に対する制限をする機能を提供します。制限する項目を次に示します。
-
XPath式に含まれるグループの数
-
XPath式に含まれる演算子の数
-
XPath式に含まれる演算子の総数
(a) XPath式に含まれるグループの数
XPath式に含まれるグループの数を制限します。XPath式に含まれるグループの数が制限値を超えた場合,XPath式のコンパイルをする機能によって,次の表の動作になります。
機能 |
動作 |
---|---|
XPath式を評価するためのAPI |
KECX03139-Eのエラーメッセージを含む例外をスローします。 |
XSLTトランスフォーマ機能 |
KECX02267-Eのエラーメッセージを含む例外をエラー通知(fatalErrorイベント)します。 |
XSLTCトランスフォーマ機能 |
KECX07107-Eのエラーメッセージを含む例外をエラー通知(fatalErrorイベント)します。 |
グループが含まれるXPath式の例を次に示します。
(((((child::*)|(child::*)|(child::*))|((child::*)|(child::*)|(child::*)))))
上記XPath式の例ではグループの数は11個となります。
(b) XPath式に含まれる演算子の数
1つのXPath式に含まれる演算子の数を制限します。XPath式に含まれる演算子の数が制限値を超えた場合,XPath式のコンパイルをする機能によって,次の表の動作になります。
機能 |
動作 |
---|---|
XPath式を評価するためのAPI |
KECX03140-Eのエラーメッセージを含む例外をスローします。 |
XSLTトランスフォーマ機能 |
KECX02268-Eのエラーメッセージを含む例外をエラー通知(fatalErrorイベント)します。 |
XSLTCトランスフォーマ機能 |
KECX07108-Eのエラーメッセージを含む例外をエラー通知(fatalErrorイベント)します。 |
演算子が含まれるXPath式の例を次に示します。
x >= 90.00 and y <= 9.0 and x >= 90.00 and y <= 9.0
上記XPath式の例では演算子の数は7個となります。
(c) XPath式に含まれる演算子の総数
XSLTトランスフォーマおよびXSLTCトランスフォーマの場合,解析するスタイルシートに記述された複数のXPath式に含まれる演算子の総数(総和)を制限します。解析するスタイルシートに記述された複数のXPath式に含まれる演算子の総数が制限値を超えた場合,スタイルシートの解析をした機能によって,次の表の動作になります。
機能 |
動作 |
---|---|
XSLTトランスフォーマ機能 |
KECX02269-Eのエラーメッセージを含む例外をエラー通知(fatalErrorイベント)します。 |
XSLTCトランスフォーマ機能 |
KECX07109-Eのエラーメッセージを含む例外をエラー通知(fatalErrorイベント)します。 |
(d) XPath式に関する制限の互換用システムプロパティ
(a)〜(c)に示したXPath式に関する制限で動作が変化することによる影響を考慮し,XPath式に関する制限の動作を変更する互換用システムプロパティを提供します。提供するシステムプロパティを次の表に示します。
システムプロパティ名 |
内容 |
値※ |
---|---|---|
com.cosminexus.jaxp.secure_processing.xpath_limit.compatible |
(a)〜(c)に示したXPath式に関する制限を無効にします。 |
true(デフォルト) |
(a)〜(c)に示したXPath式に関する制限を有効にします。 |
false |
- 注※
-
小文字の"false"以外の値は,すべて"true"を指定したものとして扱います。