4.5.32 (Dec 2009)

4.5.32 (Dec 2009)

セキュリティ修正 (Java)

クロスサイトスクリプティング問題の修正

index.jsp の引数としてJavaScriptの記述を行うと、サニタイズされずに出力される箇所があったためパラメータを必ずサニタイズするように修正

新しい機能 (Java)

JVMのバージョンチェック後の振る舞いをコントロールするオプションの追加

従来のバージョンでは、製品として評価されていない JVM を使用していた場合、起動時のチェックによって起動画面上にボタンが表示されていました。
このボタンの表示をコントロールするためのオプションが nexaweb-client.xml に show-unknown-vm-status として追加されました。
詳細については 10653 の修正内容を参照ください。

単一の HTTP セッション上で複数の Nexaweb セッションが管理できるようになりました

従来のバージョンでは 1 HTTP セッションに対して 1 Nexaweb セッションが関連付いていましたが、 新しい機能を使用する事で単一の HTTP セッション上で複数の Nexaweb セッションを管理することができるようになりました。
この機能を利用するためのオプションが nexaweb-client.xml に use-http-request-header-for-session-id として追加されました。
詳細については 10672 の修正内容を参照ください。

振る舞いの変更 (Java)

プッシュコネクションの接続方式の変更

プッシュコネクションの接続方式を変更するためのオプションが追加されました。
詳細については 10661 の修正内容を参照ください。

より完全な ServerDOM 同期のための振る舞いの変更

ServerDOM 同期処理を完全にリクエスト/レスポンスで同期させるために振る舞いの変更をコントロールするためのオプションが追加されました。
詳細については 10662 の修正内容を参照ください。

修正項目 (Java)
 

10233

DataService の dataSource を複数回定義するとメモリリークが発生する

10259

JVM1.3でタブ移動が正常に機能しない

10367

index.jspはクロスサイトスクリプティング問題を持っている

10545

IMEでテキストフィールドよりも長い文字列を入力している場合に、変換候補となる文字列が見えなくなる場合がある。

10547

maxLength属性を持ったテキストフィールドでIMEによって文字入力を行った場合、テキストの自動スクロールが発生すると、全てのテキストが表示されていない状態になる場合がある

10568

autoWrap 属性が "true" に設定されている <textArea/> を使用しており、<textArea/> の中で onTextChange イベントを使用してテキストカーソル位置を取得した場合、自動改行によって正しいカーソル位置を取得できなくなる

10629

互換性:PNGファイルによって半透明処理のされているウインドウの描画処理がおかしい

10635

<textArea/> のデータとして単一の \ を Element#setFirstTextChild() メソッドを使用して設定しようとした場合、例外が発生する

10640

<listBox/>もしくはテーブル系UIコンポーネントの中にデータが存在していない状態で、コンポーネントにフォーカスをセットして矢印キーをおするとNPEが発生する。

10653

JVMのバージョンチェックによって起動時に表示されるボタンのコントロールを行いたい。

10661

プッシュコネクションの接続要求が他のリクエストに乗る問題のオプション化

10662

ServerDOM同期がサーバー側のマルチスレッド処理によって正しく行われない場合がある

10663

XPathの中で"\"を利用できない

10672

1 つのHTTP セッションで複数の Nexaweb セッションのサポート機能を追加

10680

<textArea/> に対してクリップボードから繰り返し同じ文字列長のデータをペーストした場合、ペースト後のテキストカーソルの位置がおかしくなる場合がある

10681

IME による入力を行っている場合に、左カーソルキーを繰り返し押し、テキストカーソル位置を移動させると、テキストカーソルの表示が消える場合がある

10682

WebSphere 上で Nexaweb を使用しており、サーバーが相当な高負荷状態になった場合、ServerProtocolExceptionが発生する場合がある


修正の詳細 (Java)

 

10233

10233

DataService の dataSource を複数回定義するとメモリリークが発生する

環境

OS

:

全て

ブラウザ

:

全て

JVM

:

全て

Nexaweb Platform

:

全て

対象

DataServices

事象
内容

DataService の dataSource を同じ id 値で複数回定義し直した場合、過去の定義情報がメモリ上から削除され続け、メモリリークの原因となる

修正
内容

dataSource を同じ id 値で定義し直した場合、過去の id 値によって定義済みの dataSource を削除してから登録するように修正

10259

JVM1.3でタブ移動が正常に機能しない

環境

OS

:

全て

ブラウザ

:

全て

JVM

:

1.3.x

Nexaweb Platform

:

全て

対象

JVM 1.3.x を使用している場合のタブキーによるフォーカス移動

事象
内容

JVM 1.3.x を使用しており、タブキーによってフォーカスを移動しようとした場合に、タブキーでフォーカスを移動できない場合がある

修正
内容

JVM 1.3.x 使用時にタブキーによってフォーカスが正しくコントロールできるように修正

10367

index.jspはクロスサイトスクリプティング問題を持っている

環境

OS

:

全て

ブラウザ

:

全て

JVM

:

全て

Nexaweb Platform

:

全て

対象

index.jsp, errorBadVM.jsp, errorBuggyVM.jsp, errorCookiesDisabled.jsp, errorJavaScriptDisabled.jsp

事象
内容

jsp ファイルのパラメータとして Javascript の記述を行った場合、クロスサイトスクリプティング問題が発生する

修正
内容

クロスサイトスクリプティング問題が発生しないようにパラメータを必ずサニタイズするように修正

10545

IMEでテキストフィールドよりも長い文字列を入力している場合に、変換候補となる文字列が見えなくなる場合がある。

環境

OS

:

全て

ブラウザ

:

全て

JVM

:

全て

Nexaweb Platform

:

全て

対象

全ての文字入力可能 UI コンポーネント

事象
内容

テキストフィールドの幅よりも長い文字列を IME によって一括入力した場合に、変換キーを押して入力文字の変換を行おうとした場合、 テキストフィールドの幅に合わせて表示文字がスクロールしているため、文字列の先頭部分の変換内容が画面上で確認することができない。

修正
内容

テキストフィールドの幅を超えて IME による文字入力を行っている場合、変換キーが押された場合に変換対象となっている文字列が表示するために自動スクロールするように修正

10547

maxLength属性を持ったテキストフィールドでIMEによって文字入力を行った場合、テキストの自動スクロールが発生すると、全てのテキストが表示されていない状態になる場合がある

環境

OS

:

全て

ブラウザ

:

全て

JVM

:

全て

Nexaweb Platform

:

全て

対象

maxLength を指定可能な全ての文字入力可能 UI コンポーネント

事象
内容

テキストフィールドの幅を超えて IME による文字入力を行っている場合、自動するクロールが発生します。
自動するクロールが発生した後に Enter キーによって IME での入力文字列が確定すると、通常は入力文字がテキストフィールドに表示されますが、 maxLength が指定されている場合、 IME によって確定された文字列が欠ける場合があります。
maxLength によって IME での入力文字列が欠けた場合、テキストフィールド内の表示位置の自動調整が行われないため、 テキストフィールドに文字が入力されていないように見えます。

修正
内容

IME による変換、入力確定、キャンセル時にテキストフィールド内のスクロール位置を調整するように修正

10568

autoWrap 属性が "true" に設定されている <textArea/> を使用しており、<textArea/> の中で onTextChange イベントを使用してテキストカーソル位置を取得した場合、自動改行によって正しいカーソル位置を取得できなくなる

環境

OS

:

全て

ブラウザ

:

全て

JVM

:

全て

Nexaweb Platform

:

全て

対象

全ての文字入力可能 UI コンポーネント

事象
内容

autoWrap 属性が "true" に設定されている <textArea/> を使用しており、<textArea/> の中で onTextChange イベントを使用してテキストカーソル位置を取得した場合、 自動改行によって正しいカーソル位置を取得できない

修正
内容

テキストカーソル位置の再計算処理位置を変更し、 onTextChange イベント発生時に正しいテキストカーソル位置を取得できるように修正

10629

互換性:PNGファイルによって半透明処理のされているウインドウの描画処理がおかしい

環境

OS

:

全て

ブラウザ

:

全て

JVM

:

全て

Nexaweb Platform

:

全て

対象

全てのフローティングコンテナ(ウインドウ、ダイアログ等)

事象
内容

UI コンポーネントの背景画像ファイルとして半透明処理が施されている PNG ファイルを使用している場合に、 背景色の半透明処理が正しく行われない

修正
内容

背景画像ファイルの描画時に PNG ファイルの半透明処理を考慮するように修正

10635

<textArea/> のデータとして単一の \ を Element#setFirstTextChild() メソッドを使用して設定しようとした場合、例外が発生する

環境

OS

:

全て

ブラウザ

:

全て

JVM

:

全て

Nexaweb Platform

:

4.5.18~

対象

全ての文字列処理

事象
内容

<textArea/> のデータとして単一の \ を Element#setFirstTextChild() メソッドを使用して設定しようとした場合、例外が発生する

修正
内容

内部で文字列を扱う際のエスケープ文字の処理内容を修正
この問題は 4.5.18より発生するようになった互換性問題です。
また、4.5.18~4.5.31 においても <textField/> への文字列設定や nexaweb-client.xml の <ensure-pre-4-dot-2-resolution-syntax-compatibility/> が true に設定されている場合には発生しません。

10640

<listBox/>もしくはテーブル系UIコンポーネントの中にデータが存在していない状態で、コンポーネントにフォーカスをセットして矢印キーをおするとNPEが発生する。

環境

OS

:

全て

ブラウザ

:

全て

JVM

:

全て

Nexaweb Platform

:

全て

対象

<litBox/>, <table/>, <treeTable/>, <tree/>

事象
内容

対象 UI コンポーネント内に選択可能なデータが存在していない場合に UI コンポーネントがフォーカスを受け取り、矢印キーを押すと NullPointerException が発生する

修正
内容

選択可能データが存在していない場合に NullPointerException が発生しないように修正

10653

JVMのバージョンチェックによって起動時に表示されるボタンのコントロールを行いたい。

対象

起動時の JVM バージョンチェッカ

機能
追加
内容

起動時の JVM バージョンチェック時に未知の新しい JVM が存在した場合、起動画面にボタンが表示され、 ボタンをクリックしなければ Nexaweb アプリケーションを開始することができませんでしたが、 このボタンの表示有無をコンフィグレーションによってコントロールできるように以下のオプションが nexaweb-client.xml に機能追加されました。

/client-app/launch-configuration/progress-handler/show-unknown-vm-status

 

progress-handler は <progress-handler class="com.nexaweb.client.launcher.DefaultProgressHandler"> の場合に限ります。

 

show-unknown-vm-status は以下の 2 つの値を設定することができます。

  • true : 動作未確認な JVM 上で稼働させる場合、ボタンを表示させる(デフォルト)

  • false : 動作未確認な JVM 上で稼働している場合であってもボタンを表示させない

4.5.31 以前のバージョンと同様の振る舞いを期待する場合には「true」を指定してください。
指定の詳細な内容については 4.5.32 に同梱される nexaweb-client.xml を参照ください。


nexaweb-client.xml の設定例(抜粋)

<client-app>  ...   <launch-configuration>    <!-- The launch-ui section allows users to customize the look of the   -->    <!-- Nexaweb-loading screen.                                           -->    <launch-ui>       <!-- After 4.2, do not change "class=" assignment -->       <progress-handler class="com.nexaweb.client.launcher.DefaultProgressHandler">         ...         <!-- shows a "more info" button in case JVM cannot be determined if true -->        <show-unknown-vm-status>false</show-unknown-vm-status>      </progress-handler>     </launch-ui>  </launch-configuration>  ... </client-app>               

10661

プッシュコネクションの接続要求が他のリクエストに乗る問題のオプション化

環境

OS

:

全て

ブラウザ

:

全て

JVM

:

全て

Nexaweb Platform

:

全て

対象

プッシュコネクションの接続処理全般

事象
内容

マルチスレッドアプリケーションとしてアプリケーションが実装されており、独自スレッドからサーバーリクエストを行う処理が存在している場合に、 プッシュコネクションの接続要求が通常のリクエスト処理に相乗りしてしまい、サーバープッシュデータがプッシュコネクションではないコネクションを通じて レスポンスされる可能性があり、その場合にプッシュデータに異常が生じる可能性がある

修正
内容

プッシュコネクションの接続要求が通常のリクエスト処理に相乗りしないように修正
この修正により振る舞いが変更されるため、下位互換を確保のために以下のオプションが nexaweb-client.xml に追加されました。

/client-app/open-push-without-protocol
open-push-without-protocol は以下の 2 つの値を設定することができます。

  • true : プッシュコネクションの接続要求を必ず独立したリクエストとして扱う

  • false : プッシュコネクションの接続要求を必ず独立したリクエストとして扱わない(デフォルト)

4.5.31 以前のバージョンと同様の振る舞いを期待する場合には「false」を指定してください。

 

4.5.32 以上の nexaweb-client.xml ではこのコンフィグレーションの値が true として設定された初期設定値を保持しています。
このため、 4.5.32 以上のバージョンを使用してプロジェクトを新規作成した場合はこの設定値の初期値は true となります。
設定項目が存在しない場合のデフォルト値は false になります。

 

また、このコンフィグレーションは Nexaweb Platform 4.5.169963 の修正によって 追加された synchronize-nexaweb-server-requests が true に設定されている場合、効果がありません。
synchronize-nexaweb-server-requests が true の場合、このコンフィグレーションは常に true が設定されているのと同じ状態になります。

指定の詳細な内容については 4.5.32 に同梱される nexaweb-client.xml を参照ください。


nexaweb-client.xml の設定例(抜粋)

<client-app>  ...   <!-- =================================================================== -->  <!-- In multithreaded UI applications that use persistent connections,   -->  <!-- this value indicates to open the push connection cleanly, ensuring  -->  <!-- that there will be no possibility for timing issues transmitting    -->  <!-- outbound client information to the server when a push connection    -->  <!-- needs to re-establish.                                              -->  <!-- It is not recommended to change this setting.                       -->  <!-- If synchronize-nexaweb-server-requests is set to true, this setting -->  <!-- will have no effect, and the push connection will ALWAYS be opened  -->  <!-- without additional outbound protocol information, regardless.       -->  <!-- =================================================================== -->  <open-push-without-protocol>true</open-push-without-protocol>  ... </client-app>               

10662

ServerDOM同期がサーバー側のマルチスレッド処理によって正しく行われない場合がある

環境

OS

:

全て

ブラウザ

:

全て

JVM

:

全て

Nexaweb Platform

:

全て

対象

ServerDOM 同期を使用している場合

事象
内容

ServerDOM 同期を使用して連続したリクエストが発生する状況で、1度目のレスポンス処理が完了する前に次のリクエスト処理が開始され、 次のリクエスト処理の中で一つ前のレスポンス処理が完了していない処理の値を参照する場合にレスポンス処理が完了していないため、 ServerDOM 同期が終了しておらず、想定外の値を ServerDOM から取得する場合がある

修正
内容

ServerDOM 同期処理が完了するまで次のリクエスト処理が開始されないように修正。
Nexaweb Server ではパフォーマンス向上のために、実際にクライアントにレスポンスするストリームデータとサーバー上の ServerDOM を 同期するための更新処理がサーバー上でマルチスレッド化されて処理されます。
このため、クライアントからのリクエストがキューに蓄積される程の頻発するリクエストが発生した場合、場合によっては、 以前のレスポンスによる ServerDOM 同期処理と、次のリクエストの処理が並行して実行される可能性があります。
この場合に、リクエスト処理から ServerDOM を参照した場合、以前のレスポンスによる ServerDOM 同期処理が完了していない可能性があります。

この修正により振る舞いが変更されるため、下位互換を確保のために以下のオプションが nexaweb-server.xml に追加されました。

/server/output-stream-wrapper
output-stream-wrapper は waitForServerToCompleteProcessing の属性値として以下の 2 つの値を設定することができます。

  • true : サーバー処理が完了するのを待ちます。

  • false : サーバー処理が完了するのを待ちません(デフォルト)。

4.5.31 以前のバージョンと同様の振る舞いを期待する場合には「false」を指定してください。
指定の詳細な内容については 4.5.32 に同梱される nexaweb-server.xml を参照ください。


nexaweb-server.xml の設定例(抜粋)

<server>  ...   <!-- Use the following if you want the client to wait until the server -->  <!-- completes Server DOM processing request (make it synchronous).    -->   <!-- Default is asynchronous processing which allows the client not    -->  <!-- to wait for the server to complete absorbing Server DOM stream.   -->  <output-stream-wrapper waitForServerToCompleteProcessing="false"/>       ... </server>               

この新しい振る舞いはパフォーマンスの劣化を伴います。
このため、このオプションを有効にする場合は、必要性について十分に吟味するよう注意してください。
一般的にこの問題が原因で問題が引き起こされることは非常に希です。
この問題が発生する場合は、以下の条件を全て満たしている必要があります。

  • ServerDOM 同期オプションを使用している場合

  • マルチスレッド処理によってクライアントからのリクエストがキューに蓄積され、連続したリクエストが発生する場合

  • サーバー処理の中で、キューに蓄積されている自身のリクエストよりも前のリクエスト処理の結果更新されるであろう ServerDOM の値を参照している場合

  • ServerDOM 値を参照した場合に、以前の処理によって更新されている値を正しく取得できない場合、処理場問題が生じる場合

また、以下の条件は必須条件ではありませんが、問題を発生させる要因として大きな要因になります。

  • レスポンス処理の結果クライアントに戻される更新データが多量である場合
    データが多量である場合、 ServerDOM 同期処理に時間が掛かるため、非同期状態が引き起こされやすくなります。

10663

XPathの中で"\"を利用できない

環境

OS

:

全て

ブラウザ

:

全て

JVM

:

全て

Nexaweb Platform

:

全て

対象

全ての文字列処理

事象
内容

XPath で "\" 文字のみ、"\" 文字で終わる評価式を使用した場合、 XPath が正しく処理されない。

修正
内容

内部で文字列を扱う際のエスケープ文字の処理内容を修正。

10672

1 つのHTTP セッションで複数の Nexaweb セッションのサポート機能を追加

機能
追加
内容

Nexaweb ではこれまで、一つの HTTP セッションに対して Nexaweb のセッション情報は 1 対 1 で関連付いていました。
これを解決するために、一つの HTTP セッションに対して複数の Nexaweb セッションが管理できるように以下のオプションが nexaweb-client.xml に機能追加されました。

/client-app/use-http-request-header-for-session-id
use-http-request-header-for-session-id は以下の 2 つの値を設定することができます。

  • true : HTTP セッションとの関連づけの管理にリクエストヘッダを使用し、 1 HTTP セッションに対して複数 Nexaweb セッションを管理する

  • false : HTTP セッションとの関連づけの管理に Cookie を使用し、 1 HTTP セッションに対して 1 Nexaweb セッションを管理する(デフォルト)

4.5.31 以前のバージョンと同様の振る舞いを期待する場合には「false」を指定してください。
指定の詳細な内容については 4.5.32 に同梱される nexaweb-client.xml を参照ください。


nexaweb-client.xml の設定例(抜粋)

<client-app>  ...   <use-http-request-header-for-session-id>true</use-http-request-header-for-session-id>  ... </client-app>               

10680

<textArea/> に対してクリップボードから繰り返し同じ文字列長のデータをペーストした場合、ペースト後のテキストカーソルの位置がおかしくなる場合がある

環境

OS

:

全て

ブラウザ

:

全て

JVM

:

全て

Nexaweb Platform

:

全て

対象

全ての文字入力可能 UI コンポーネント

事象
内容

同じな文字列長のコピーデータを繰り返し、 <textArea/> に対して貼り付けた場合、ペースト後のテキストカーソル位置がおかしくなる場合があります。
ペースト後は通常カーソル位置は貼り付けデータの末尾に移動すべきですが、この問題が発生した場合、カーソル位置は貼り付けデータの末尾ではなく先頭になる場合があります。

修正
内容

データの貼り付け後にテキストカーソル位置が必ず貼り付けデータの末尾に移動するように修正

10681

IME による入力を行っている場合に、左カーソルキーを繰り返し押し、テキストカーソル位置を移動させると、テキストカーソルの表示が消える場合がある

環境

OS

:

全て

ブラウザ

:

全て

JVM

:

全て

Nexaweb Platform

:

全て

対象

全ての文字入力可能 UI コンポーネント

事象
内容

IME を使用して文字列を入力した際にテキストフィールドの幅よりも IME による入力文字列が長くなった場合に自動スクロールが起こります。
この自動スクロールが起こった後に IME による入力を確定し、確定後の文字列上をカーソルキーを使用して左に移動させた場合、テキストカーソルの表示が消える場合があります。

修正
内容

自動スクロールが起こった場合の表示位置を計算するロジックを修正し、テキストカーソルが消えないように修正

10682

WebSphere 上で Nexaweb を使用しており、サーバーが相当な高負荷状態になった場合、ServerProtocolExceptionが発生する場合がある

環境

OS

:

全て

ブラウザ

:

全て

JVM

:

全て

Nexaweb Platform

:

全て

対象

WebSphrer を使用しており、サーバーが相当な高負荷状態になった場合のサーバー処理

事象
内容

WebSphrer を使用しており、サーバーが相当な高負荷状態になった場合のリクエスト受付処理で ArrayIndexOutOfBoundsException が発生する場合がある

修正
内容

この問題は、 Nexaweb 内部で使用している SimpleDateFormat のインスタンスがスレッドセーフでなかったこと発生していました。
この問題を修正するために内部的に SimpleDateFormat インスタンスを使用する際に同期処理を行うように変更しました。