機能説明

<IMART type=“string”>タグ。

タグの指定されている個所に指定のデータを文字列として挿入 (実際には、タグ部分が指定文字列で置換されるように動作)します。

エスケープ処理に関して

【概要】

<IMART>タグは、属性「 escapeXml 」および「 escapeJs 」を設定することで、出力される文字列のエスケープ処理が行われます。

【注意】:全ての<IMART>タグがエスケープ機能に対応しているわけではありません。 エスケープ機能に対応している<IMART>タグ、および、エスケープ対象となる属性に関しては、各<IMART>タグのAPIドキュメントを参照してください。

エスケープ処理は、以下の順序で行われます。
  1. XMLエスケープ
  2. JavaScriptエスケープ
XMLエスケープで変換される文字は以下の通りです。
& → &amp; 
< → &lt;
> → &gt;
' → &#039;
" → &#034;
JavaScriptエスケープで変換される文字は以下の通りです。
¥ → ¥¥ 
' → ¥'
" → ¥"
¥b → ¥¥b
¥n → ¥¥n
¥t → ¥¥t
¥f → ¥¥f
¥r → ¥¥r

【サンプル】

ファンクション・コンテナ (.jsファイル)
var bind;
.
.
function init(request) {
bind = "AA&AA<br>BB<BB<br/>CC>CC<BR>DD’DD<BR/>EE¥"EE<br>FF&nbsp;FF<br/>GG GG";
.
.
}
プレゼンテーション・ページ (.htmlファイル)
<html>
<body>
.
.
【A】→<imart type = "string"
value = bind
escapeJs = "false"
escapeXml = "false" />
【B】→<imart type = "string"
value = bind
escapeJs = "true"
escapeXml = "false" />
【C】→<imart type = "string"
value = bind
escapeJs = "true"
escapeXml = "true" />
【D】→<imart type = "string"
value = bind
escapeJs = "true"
escapeXml = "true"
exclusionEscapeXml = "<br>:<br/>" />
【E】→<imart type = "string"
value = bind
escapeJs = "true"
escapeXml = "true"
exclusionEscapeXml = "<br>:<br/>:&nbsp;" />
.
.
</body>
</html>
上記の<imart type = "string" />で出力される文字列
【A】→ AA&AA<br>BB<BB<br/>CC>CC<BR>DD’DD<BR/>EE"EE<br>FF&nbsp;FF<br/>GG GG
【B】→ AA&AA<br>BB<BB<br/>CC>CC<BR>DD¥'DD<BR/>EE¥"EE<br>FF&nbsp;FF<br/>GG GG
【C】→ AA&amp;AA&lt;br&gt;BB&lt;BB&lt;br/&gt;CC&gt;CC&lt;BR&gt;DD&#039;DD&lt;BR/&gt;EE&#034;EE&lt;br&gt;FF&amp;nbsp;FF&lt;br/&gt;GG GG
【D】→ AA&amp;AA<br>BB&lt;BB<br/>CC&gt;CC&lt;BR&gt;DD&#039;DD&lt;BR/&gt;EE&#034;EE<br>FF&amp;nbsp;FF<br/>GG GG
【E】→ AA&amp;AA<br>BB&lt;BB<br/>CC&gt;CC&lt;BR&gt;DD&#039;DD&lt;BR/&gt;EE&#034;EE<br>FF&nbsp;FF<br/>GG GG

【XMLエスケープに関して】

「XMLエスケープの有効・無効」に関して

  • <IMART>タグ内に、属性「 escapeXml 」が指定されて いる 場合、
    属性「 escapeXml 」の値が true ならば、エスケープ対象の属性値が XMLエスケープされて出力されます。
    それ以外 ならば、エスケープ対象の属性値の XMLエスケープ処理は行われません。
  • <IMART>タグ内に、属性「 escapeXml 」が指定されて いない 場合、
    「現在実行中の プレゼンテーション・ページ に紐づく escapeXml の値」が適用されます。
    この値が true ならば、エスケープ対象の属性値が XMLエスケープされて出力されます。
    それ以外 ならば、エスケープ対象の属性値の XMLエスケープ処理は行われません。
  • エスケープ対象となる属性(=どの属性がエスケープ対象となるか?)に関しては、各<IMART>タグのAPIドキュメントを参照してください。
「現在実行中の プレゼンテーション・ページ に紐づく escapeXml の値」とは、
source-config.xml や ${ファイルラベル}.properties に設定されている「 XMLエスケープの有効・無効 」を表す値です。
詳しくは、以下の解決順序を参照してください。
XMLエスケープの有効・無効 」を表す設定は、以下の順序で解決されます。
(※ 下記の全てが未設定の場合は、 false が設定されていると解釈します)
1. <IMART>タグの 属性「 escapeXml 」の値
2. 現在実行中の プレゼンテーション・ページ に紐づく.propertiesファイルに定義されている キー「 view.escapeXml.enable 」の値
3. 現在実行中の プレゼンテーション・ページ に紐づく source-config.xmlファイルに定義されている タグ属性「 /resource-file/view/escapeXml/@enable 」の値

「XMLエスケープ処理の対象外とする文字列」と「区切り文字」に関して

特定の文字列をXMLエスケープ対象から除外したい場合は、<IMART>タグの属性「 exclusionEscapeXml 」にその文字列を指定します。
XMLエスケープ対象から除外したい文字列が複数ある場合は、<IMART>タグの属性「 delimiter4exclusionEscapeXml 」で指定した区切り文字で連結します。
(区切り文字が未設定の場合、「 : 」が区切り文字として適用されます)

<IMART>タグ内に、属性「 exclusionEscapeXml 」が指定されて いない 場合、
「現在実行中の プレゼンテーション・ページ に紐づく exclusionEscapeXml の値」が適用されます。
「現在実行中の プレゼンテーション・ページ に紐づく exclusionEscapeXml の値」とは、source-config.xml や ${ファイルラベル}.properties に設定されている「 XMLエスケープ処理の対象外とする文字列 」を表す値です。

<IMART>タグ内に、属性「 delimiter4exclusionEscapeXml 」が指定されて いない 場合、
「現在実行中の プレゼンテーション・ページ に紐づく delimiter4exclusionEscapeXml の値」が適用されます。
「現在実行中の プレゼンテーション・ページ に紐づく delimiter4exclusionEscapeXml の値」とは、source-config.xml や ${ファイルラベル}.properties に設定されている「 区切り文字 」を表す値です。

詳しくは、以下の解決順序を参照してください。
XMLエスケープ処理の対象外とする文字列 」の設定は、以下の順序で解決されます。
(※ XMLエスケープ対象から除外したい文字列がない場合は、下記の全てを null または 空の文字列 または 未設定 にしてください)
1. <IMART>タグの 属性「 exclusionEscapeXml 」の値
2. 現在実行中の プレゼンテーション・ページ に紐づく.propertiesファイルに定義されている キー「 view.escapeXml.exclusion 」の値
3. 現在実行中の プレゼンテーション・ページ に紐づく source-config.xmlファイルに定義されている タグ属性「 /resource-file/view/escapeXml/@exclusion 」の値
区切り文字 」の設定は、以下の順序で解決されます。
(※ 下記の全てが未設定の場合は、「 : 」 が設定されていると解釈します)
1. <IMART>タグの 属性「 delimiter4exclusionEscapeXml 」の値
2. 現在実行中の プレゼンテーション・ページ に紐づく.propertiesファイルに定義されている キー「 view.escapeXml.delimiter4exclusion 」の値
3. 現在実行中の プレゼンテーション・ページ に紐づく source-config.xmlファイルに定義されている タグ属性「 /resource-file/view/escapeXml/@delimiter4exclusion 」の値

【JavaScriptエスケープに関して】

「JavaScriptエスケープの有効・無効」に関して

  • <IMART>タグ内に、属性「 escapeJs 」が指定されて いる 場合、
    属性「 escapeJs 」の値が true ならば、エスケープ対象の属性値が JavaScriptエスケープされて出力されます。
    それ以外 ならば、エスケープ対象の属性値の JavaScriptエスケープ処理は行われません。
  • <IMART>タグ内に、属性「 escapeJs 」が指定されて いない 場合、
    「現在実行中の プレゼンテーション・ページ に紐づく escapeJs の値」が適用されます。
    この値が true ならば、エスケープ対象の属性値が JavaScriptエスケープされて出力されます。
    それ以外 ならば、エスケープ対象の属性値の JavaScriptエスケープ処理は行われません。
  • エスケープ対象となる属性(=どの属性がエスケープ対象となるか?)に関しては、各<IMART>タグのAPIドキュメントを参照してください。
「現在実行中の プレゼンテーション・ページ に紐づく escapeJs の値」とは、
source-config.xml や ${ファイルラベル}.properties に設定されている「 JavaScriptエスケープの有効・無効 」を表す値です。
詳しくは、以下の解決順序を参照してください。
JavaScriptエスケープの有効・無効 」を表す設定は、以下の順序で解決されます。
(※ 下記の全てが未設定の場合は、 false が設定されていると解釈します)
1. <IMART>タグの 属性「 escapeJs 」の値
2. 現在実行中の プレゼンテーション・ページ に紐づく.propertiesファイルに定義されている キー「 view.escapeJs.enable 」の値
3. 現在実行中の プレゼンテーション・ページ に紐づく source-config.xmlファイルに定義されている タグ属性「 /resource-file/view/escapeJs/@enable 」の値

「JavaScriptエスケープ処理の対象外とする文字列」と「区切り文字」に関して

特定の文字列をJavaScriptエスケープ対象から除外したい場合は、<IMART>タグの属性「 exclusionEscapeJs 」にその文字列を指定します。
JavaScriptエスケープ対象から除外したい文字列が複数ある場合は、<IMART>タグの属性「 delimiter4exclusionEscapeJs 」で指定した区切り文字で連結します。
(区切り文字が未設定の場合、「 : 」が区切り文字として適用されます)

<IMART>タグ内に、属性「 exclusionEscapeJs 」が指定されて いない 場合、
「現在実行中の プレゼンテーション・ページ に紐づく exclusionEscapeJs の値」が適用されます。
「現在実行中の プレゼンテーション・ページ に紐づく exclusionEscapeJs の値」とは、source-config.xml や ${ファイルラベル}.properties に設定されている「 JavaScriptエスケープ処理の対象外とする文字列 」を表す値です。

<IMART>タグ内に、属性「 delimiter4exclusionEscapeJs 」が指定されて いない 場合、
「現在実行中の プレゼンテーション・ページ に紐づく delimiter4exclusionEscapeJs の値」が適用されます。
「現在実行中の プレゼンテーション・ページ に紐づく delimiter4exclusionEscapeJs の値」とは、source-config.xml や ${ファイルラベル}.properties に設定されている「 区切り文字 」を表す値です。

詳しくは、以下の解決順序を参照してください。
JavaScriptエスケープ処理の対象外とする文字列 」の設定は、以下の順序で解決されます。
(※ JavaScriptエスケープ対象から除外したい文字列がない場合は、下記の全てを null または 空の文字列 または 未設定 にしてください)
1. <IMART>タグの 属性「 exclusionEscapeJs 」の値
2. 現在実行中の プレゼンテーション・ページ に紐づく.propertiesファイルに定義されている キー「 view.escapeJs.exclusion 」の値
3. 現在実行中の プレゼンテーション・ページ に紐づく source-config.xmlファイルに定義されている タグ属性「 /resource-file/view/escapeJs/@exclusion 」の値
区切り文字 」の設定は、以下の順序で解決されます。
(※ 下記の全てが未設定の場合は、「 : 」 が設定されていると解釈します)
1. <IMART>タグの 属性「 delimiter4exclusionEscapeJs 」の値
2. 現在実行中の プレゼンテーション・ページ に紐づく.propertiesファイルに定義されている キー「 view.escapeJs.delimiter4exclusion 」の値
3. 現在実行中の プレゼンテーション・ページ に紐づく source-config.xmlファイルに定義されている タグ属性「 /resource-file/view/escapeJs/@delimiter4exclusion 」の値

注意事項

1. APIドキュメントで「 その他 」と説明されている属性に関しては、設定する属性値のバリデーションやサニタイジングを正しく行う必要があります。

2. プレゼンテーションページ(.htmlファイル)の書き方によっては、IMARTタグのエスケープ機能を用いても、クロスサイトスクリプティング(以下、XSS)が発生する場合があります。IMARTタグが、ClientSideJavaScriptとして実行される可能性のある箇所に記載されている場合には、特に注意が必要です。
<a href="javascript:func1('<imart type= "string" value= bind />');">リンク</a>
例えば、プレゼンテーションページ(.htmlファイル)に上記のような<a>タグが記載されていた場合、 XMLエスケープ と JavaScriptエスケープ を有効にしてもXSSが発生する可能性があります。
(source-config.xmlにて、XMLエスケープ と JavaScriptエスケープが有効になっているという前提でお読みください)

以下に、XSSを回避するための例を記します。
1. IMARTタグに設定する属性値に対して、ファンクションコンテナ(.jsファイル)側でバリデーションやサニタイジングを正しく行う。上記の例では、バインド変数「bind」の値を、バリデーション、または、サニタイジングするということです。

2. JavaScript関数の引数に、IMARTタグを直接指定せず、<input type=“hidden”>を別途設け、その値を参照するように変更する。
<imart type= "input" style= "hidden" id= "id_001" value= bind />
<a href="javascript:void(0);"onclick=“var temp = getElementById('id_001'); func1(temp.value); return false;”>リンク</a>

3. IMARTタグの値が、必ずJavaScriptの文字列リテラルとして解釈されるように設定する。
以下の例では、exclusionEscapeXml=" ' " を追加しています。 「 ' 」をXMLエスケープを対象外とすることで、「 ' 」がJavaScriptエスケープ対象となり、 その結果、IMARTタグの値が、必ずJavaScriptの文字列リテラルとして解釈されることを目的とした設定です。
<ahref="javascript:func1('<imart type= "string" value= bind exclusionEscapeXml= " ' " />');">リンク</a>
上記に記載した回避策は、あくまで例として記載しております。 プレゼンテーションページ(.htmlファイル)の書き方によって、回避方法が異なる場合があります。 XSSが発生しないことを確認した上で、適切な対応を行ってください。
3. エスケープ処理対象外の文字列を設定する際、「<」や「>」など 直接記述できない文字や記号を source-config.xml に 設定する場合は、 文字参照や実体参照 形式で設定してください。
例えば、JavaScriptエスケープ処理の対象外とする文字列に「 <br/> 」と「 <BR/> 」を、JavaScriptエスケープ処理の対象外とする文字列に「 改行コード Line Feed (¥n) 」と「 水平タブ(¥t) 」を指定する場合は、以下のように設定します。
source-config.xmlの設定例
<resource-file>
<view>
<escapeXml enable=“true” exclusion=“&lt;br/&gt;:&lt;BR/&gt;” />
<escapeJs enable=“true” exclusion=“&#10;:&#9;” />
</view>
</resource-file>
4. エスケープ処理対象外の文字列を設定する際、「 ダブルクォーテーション(¥") 」や「 改行コード Line Feed (¥n)」や「 水平タブ(¥t) 」など 「 ¥ 」でエスケープが必要な文字は、<IMART>タグの属性に直接設定することは出来ません。
ファンクション・コンテナにて代入した変数をバインドするか、${ファイルラベル}.properties に設定してください。
以下に、例を示します。
プレゼンテーション・ページ (.htmlファイル)
<html>
<body>
.
.
<imart type = "string"
value = bind
exclusionEscapeXml = exclusionStr
exclusionEscapeJs = exclusionStr />
.
.
</body>
</html>
ファンクション・コンテナ (.jsファイル)
var bind;
var exclusionStr = " ¥": ¥n: ¥t";
.
.
function init(request){
bind = "サ ¥"¥n¥t ル";
.
.
.
}
以下に記載された、IMARTタグの属性値に対する定数も利用可能です。
定数名定数値
@IM_TAG_ESCAPE_QUOT"
@IM_TAG_ESCAPE_BACKSLASH_LF¥¥n
@IM_TAG_ESCAPE_LF¥n
@IM_TAG_ESCAPE_BACKSLASH¥
【注意】
上記の定数を含め、エスケープ処理 対象外 の文字列を設定した場合、 クロスサイトスクリプティング(以下、XSS)が発生しやすい状態になるケースがあります。XSSが発生しないことを確認した上で、設定を行ってください。

定数の利用例を以下に示します。
以下の例では、変数「sample_1」と「sample_2」は、同じ値となります。
プレゼンテーション・ページ (.htmlファイル)
<html>
.
.
<script>
var sample_1 = "<imart type= "string" value= bind exclusionEscapeXml= exclusionXml exclusionEscapeJs= exclusionJs />";
var sample_2 = "<imart type= "string" value= bind exclusionEscapeXml= " @IM_TAG_ESCAPE_QUOT
" exclusionEscapeJs= " @IM_TAG_ESCAPE_BACKSLASH_LF " />";
</script>
.
.
</html>
ファンクション・コンテナ (.jsファイル)
var bind;
var exclusionXml = " ¥"";
var
exclusionJs = "¥¥n";
.
.
function init(request){
bind = "サ ¥"¥¥n プル";
.
.
.
}
5. source-config.xml は、source-config.xml が配置されているディレクトリ内、および、サブディレクトリ内のプログラムに対する設定ファイルです。
(サブディレクトリ毎にsource-config.xmlを配置する必要はありません)
詳しくは、 設定ファイルリファレンスの source-config.xml を参照してください。

6. HTMLファイルとJSファイルのペア単位で設定を行う場合は「対象ファイルラベル名.properties」ファイルを作成して設定します。
詳しくは、 設定ファイルリファレンスの source-config.xml を参照してください。

属性一覧

注釈 属性名 説明 省略時の動作
escapeJs JavaScriptエスケープの有効・無効を指定します。

「true」の場合、エスケープ対象の属性値が JavaScriptエスケープされて出力されます。
「false」の場合、エスケープ対象の属性値の JavaScriptエスケープ処理は行われません。
未指定の場合は「現在実行中の プレゼンテーション・ページ に紐づくescapeJsの値」に則ってJavaScriptエスケープ処理行われます。

詳しくは、「 エスケープ処理に関して 」を参照してください。
-
escapeSpace 空白文字(半角スペース)の変換の有効・無効を指定します。

「true」の場合、空白文字が実体参照(&nbsp;)に変換されて出力されます。
「false」の場合、空白文字の変換処理を行いません。
false
escapeXml XMLエスケープの有効・無効を指定します。

「true」の場合、エスケープ対象の属性値が XMLエスケープされて出力されます。
「false」の場合、エスケープ対象の属性値の XMLエスケープ処理は行われません。
未指定の場合は、「現在実行中の プレゼンテーション・ページ に紐づくescapeXmlの値」に則ってXMLエスケープ処理行われます。

詳しくは、「 エスケープ処理に関して 」を参照してください。
-
nl2br String/Boolean 改行文字の変換の有効・無効を指定します。

「true」の場合、改行文字がbrタグに変換されて出力されます。
「false」の場合、改行文字の変換処理を行いません。
false
必須
value 挿入データ。
(エスケープ対象の属性です)
-

内部タグ

なし

サンプル

サンプル

サンプル
		<IMART type="string" value="ABC"></IMART><br/>
		<blockquote>
		このタグの位置に「ABC」と表示します。<br/>
		表示値は、ファンクション・コンテナから変数のバインドによって動的な指定も可能です。<br/>
		</blockquote>