string タグ

<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エスケープの有効・無効」に関して


現在実行中の プレゼンテーション・ページ に紐づく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エスケープの有効・無効」に関して


現在実行中の プレゼンテーション・ページ に紐づく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の文字列リテラルとして解釈されることを目的とした設定です。
      <a href="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ファイル) ファンクション・コンテナ (.jsファイル)
    <html>
    <body>
    .
    .
    <imart type = "string"
           value = bind
           exclusionEscapeXml = exclusionStr
           exclusionEscapeJs  = exclusionStr />
    .
    .
    </body>
    </html>
    
    
    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を配置する必要はありません)
    詳しくは、スクリプト開発モデル プログラミングガイド の 「JavaScriptコンパイラ機能について」を参照してください。

  6. 「現在実行中の プレゼンテーション・ページ に紐づく.propertiesファイル」の説明が、
    スクリプト開発モデル プログラミングガイド の 「JavaScriptコンパイラ機能について」の「ファイル単位での自動コンパイル設定方法」に記載されています。 ご参照ください。

内部タグ:
なし

属性一覧
属性名必須説明
valuetrue 挿入データ。
(エスケープ対象の属性です)
escapeXmlfalse XMLエスケープの有効・無効を指定します。

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

詳しくは、「エスケープ処理に関して」を参照してください。
escapeJsfalse JavaScriptエスケープの有効・無効を指定します。

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

詳しくは、「エスケープ処理に関して」を参照してください。

使用例;
<IMART type="string" value="ABC"></IMART>
このタグの位置に「ABC」と表示します。
表示値は、ファンクション・コンテナから変数のバインドによって動的な指定も可能です。
バージョン:1.0
導入されたバージョン:2.0