/
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)
 
10233DataService の dataSource を複数回定義するとメモリリークが発生する
10259JVM1.3でタブ移動が正常に機能しない
10367index.jspはクロスサイトスクリプティング問題を持っている
10545IMEでテキストフィールドよりも長い文字列を入力している場合に、変換候補となる文字列が見えなくなる場合がある。
10547maxLength属性を持ったテキストフィールドでIMEによって文字入力を行った場合、テキストの自動スクロールが発生すると、全てのテキストが表示されていない状態になる場合がある
10568autoWrap 属性が "true" に設定されている <textArea/> を使用しており、<textArea/> の中で onTextChange イベントを使用してテキストカーソル位置を取得した場合、自動改行によって正しいカーソル位置を取得できなくなる
10629互換性:PNGファイルによって半透明処理のされているウインドウの描画処理がおかしい
10635<textArea/> のデータとして単一の \ を Element#setFirstTextChild() メソッドを使用して設定しようとした場合、例外が発生する
10640<listBox/>もしくはテーブル系UIコンポーネントの中にデータが存在していない状態で、コンポーネントにフォーカスをセットして矢印キーをおするとNPEが発生する。
10653JVMのバージョンチェックによって起動時に表示されるボタンのコントロールを行いたい。
10661プッシュコネクションの接続要求が他のリクエストに乗る問題のオプション化
10662ServerDOM同期がサーバー側のマルチスレッド処理によって正しく行われない場合がある
10663XPathの中で"\"を利用できない
106721 つのHTTP セッションで複数の Nexaweb セッションのサポート機能を追加
10680<textArea/> に対してクリップボードから繰り返し同じ文字列長のデータをペーストした場合、ペースト後のテキストカーソルの位置がおかしくなる場合がある
10681IME による入力を行っている場合に、左カーソルキーを繰り返し押し、テキストカーソル位置を移動させると、テキストカーソルの表示が消える場合がある
10682WebSphere 上で Nexaweb を使用しており、サーバーが相当な高負荷状態になった場合、ServerProtocolExceptionが発生する場合がある

修正の詳細 (Java)

 

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 インスタンスを使用する際に同期処理を行うように変更しました。