Skip to main content

CSP ベースの Web アプリケーションの構成

その他のアプリケーションを構成するのと同じ管理ポータルのページ (および同じ API) を使用して、CSP ベースの Web アプリケーションを構成できます。このページでは、主に CSP ベースのアプリケーションに固有の設定について取り上げます。

CSP ベースの Web アプリケーションを構成するには、以下の手順を実行します。

  1. アプリケーション定義を表示 (必要に応じてその前に作成) するには、"アプリケーションの作成および編集" の手順に従います。

  2. [一般] タブで、以下の情報を使用して Web アプリケーションを定義します。

  3. アプリケーション定義のその他の部分については、"アプリケーションの作成および編集" を参照してください。

  4. この Web アプリケーションへのアクセスを提供するよう Web ゲートウェイ構成も更新するようにしてください (基礎的な情報は、"CSP ベースの Web アプリケーションのコンポーネント" を参照してください)。

CSP ベースの Web アプリケーションの一般設定

CSP ベースの Web アプリケーションの場合、[一般] タブの最初のセクションに以下のように値を指定します。

名前

アプリケーションの識別子を指定します。名前の先頭にはスラッシュ (/) を含める必要があります (例えば、/myorg/myapp アプリケーションのようにします)。

名前 /csp/docbook は予約されていることに注意してください。

説明

アプリケーションの説明テキストを指定します。

ネームスペース

このアプリケーションが実行されるネームスペースを指定します。別のネームスペースを選択すると、そのネームスペースの既定アプリケーションがこのドロップダウン・メニューの右側に即座に表示されます。

ネームスペースのデフォルト・アプリケーション

アプリケーションがこのネームスペースの既定アプリケーションかどうかを指定します。%System.CSP.GetDefaultApp() メソッドは、ネームスペースの既定アプリケーションを返します。$system.OBJ.Load$system.OBJ.ImportDir などの InterSystems IRIS® データ・プラットフォームのインポート関数は、関連付けられているアプリケーションなしでページをインポートする際に、この既定アプリケーションを使用します。

アプリケーション有効

アプリケーションを使用できるかどうかを指定します。有効になっていれば、認証および承認されたユーザはアプリケーションを使用できます。無効の場合は使用できません。

[REST] または [CSP/ZEN] の有効化

[CSP/ZEN] を選択します。

アナリティクス

このアプリケーション内で Business Intelligence自然言語処理の使用を有効にするかどうかを指定します。

着信 Web サービス

このアプリケーション内で SOAP 要求を処理するかどうかを指定します。無効にするには、チェックを外します。

ログイン CSRF 攻撃を防ぐ

アプリケーションでクロスサイト・リクエスト・フォージェリ (CSRF) 攻撃を自動的に防ぐかどうかを指定します。すべての新しいアプリケーションでこのオプションを有効にすることをお勧めします。また、そのアプリケーションのページをプログラムによって要求するコードが存在する場合を除き、すべての既存のアプリケーションについてもそうすることをお勧めします。

セキュリティの設定

CSP ベースの Web アプリケーションについては、以下のように [セキュリティの設定] を指定します。

必要なリソース

ユーザがアプリケーションを実行するために Use 許可を保持していなければならないリソース

CSP ページのクラス内で必要なリソースを指定することもできます。両方のメカニズムが適用されます。

ID でグループ化

By-ID グループで使用して、複数の Web アプリケーション間で認証を共有することを可能にします。このアプリケーションのグループ名を入力して、このグループ名を持つその他すべてのアプリケーションと認証特権を共有します。

許可された認証方法

一連の定義済みのメカニズムの中で、このアプリケーションでサポートされている認証メカニズム。

許可したクラス

このアプリケーション内で実行できるメソッドを持つクラスを指定します。これを行うには、以下の 3 つの方法があります。

  • ObjectScript パターン・マッチを使用します。例 : 1"myclass".3N は、myclass123.cls がこのアプリケーションで実行されることを許可しますが、myclassxy.cls は許可しません。

  • 先頭に @ が付いた、ブーリアン値に評価される ObjectScript 式を使用します。要求されたクラス名は、class という名前の変数として渡されます。例 : @class = "PermittedClasses.PermittedPage"

  • クラス・メソッドへの呼び出しを使用します (@syntax も使用できます)。例 : ##class(MyPackage).CheckClassIsPermitted(class)

"ページおよびクラスへのアクセスの有効化" も参照してください。

セッションの設定

CSP ベースの Web アプリケーションについては、以下のように [セッションの設定] を指定します。

セッションタイムアウト

既定のセッション・タイムアウトを秒単位で指定します。この値はプログラムによりオーバーライドできます。

ユーザがセッション中に Web アプリケーション間を移動しても、タイムアウト時間はそのセッションの間に使用された最初の Web アプリケーションによって制御されます。例えば、既定のタイムアウト値が 900 秒の Web アプリケーション A でセッションが開始し、その後、既定のタイムアウト値が 1800 秒の Web アプリケーション B に移動した場合、セッションは 900 秒後にタイムアウトになります。そのような場合、セッション・タイムアウトを更新するためにセッション・イベント・クラスを定義することができます。

イベントクラス

タイムアウトやセッションの終了など、Web アプリケーションを処理するクラスの既定名。

セッションにクッキーを使用する

アプリケーションでブラウザ・セッションを追跡するために cookie を使用するかどうかの設定。選択肢は以下のとおりです。

  • 常時 — 既定。ブラウザ・セッションを追跡するために常に cookie を使用します。

  • なし — ブラウザ・セッションを追跡するために cookie を使用しません。

  • 自動検出 — クライアント・ブラウザで無効になっている場合を除き、ブラウザ・セッションを追跡するために cookie を使用します。ユーザが cookie を無効にしている場合、アプリケーションではブラウザ・セッションを追跡するために URL 書き換えが使用されます。

このオプションは、アプリケーションが cookie を使用するかどうかを設定するものではなく、ユーザの設定に従ってアプリケーションがどのようにセッションを管理するかを制御するものです。さらに、値が [常時] または [自動検出] であっても、アプリケーションは、そうするよう記述された固有のコードが存在する場合にのみ cookie を使用します。

セッションクッキーパス

このアプリケーションに関するセッション Cookie をブラウザから InterSystems IRIS に返送する際に使用する URL の一部。このフィールドの値を指定しない場合、アプリケーションは、[名前] フィールドの値の先頭と末尾にスラッシュを付けたものを既定のスコープとして使用します。したがって、ここで値を指定しない場合、myapp という名前のアプリケーションのスコープは /myapp/ になります。

アプリケーションは、指定されたスコープ内にあるページの cookie のみを送信します。スコープを 1 つの Web アプリケーションで必要なページに制限すると、このマシン上の他の Web アプリケーションがこのセッション cookie を使用するのを防ぐことができます。また、この Web サーバ上の他の Web アプリケーションが cookie を参照するのも防ぐことができます。

1 つのセッション cookie を同時に共有しながら、プライマリ・アプリケーションとそのサブアプリケーションとで異なるセキュリティ設定を使用できます (すべてのアプリケーションがプライマリ・アプリケーションのパスを使用している場合)。

セッションCookieのスコープ

セッション cookie の SameSite 属性の既定値を制御します。

ユーザCookieスコープ

アプリケーション固有の cookieSameSite 属性の既定値を制御します。

SameSite 属性について

SameSite 属性では、サードパーティ・アプリケーションに関連する Cookie をアプリケーションでどのように処理するかを指定します (クロスサイト・リクエストともいいます)。SameSite には、以下の値を設定できます。

  • [None] — アプリケーションはクロスサイト・リクエストに応じて Cookie を送信します。SameSite の値が [None] の場合、ブラウザにより、アプリケーションで HTTPS 接続を使用するよう要求されることがあります。

  • [Lax] — アプリケーションは、安全な最上位のクロスサイト・ナビゲーションを使用して Cookie を送信します。

  • [Strict] — アプリケーションはクロスサイト・リクエストに応じて Cookie を送信することはありません(システム Web アプリケーション、および新規またはアップグレードしたユーザ・アプリケーションの既定値)。

CSP ページのクラス内で、この属性をプログラムによってオーバーライドできます。

SameSite 属性は IETFOpens in a new tab の計画の一環であり、IETF のいくつものドキュメントで扱われています。

CSP ファイルの設定

CSP サーバは CSP ページによって生成されたコンテンツを戻すことに加えて、静的ファイルを処理できます。CSP ベースの Web アプリケーションの場合、[CSP ファイルの設定] は、CSP サーバが静的ファイルを処理する方法を制御します。"CSP サーバで静的ファイルを処理する方法" も参照してください。

Web サーバから静的ページを提供する従来の構成を使用できます (この場合、ここで説明する設定は無関係です)。これは特定の状況では望ましい場合があります。例えば、1 つの Web サーバで複数のリモート InterSystems IRIS インスタンスを処理しているシステムがある場合、この Web サーバ マシンにとってローカルな共通の場所からこれらのファイルを提供する方が効率的である可能性があります。

ただし、静的ファイルを提供するよう Web サーバを構成することで問題が生じる可能性があることに注意してください。例えば、共通の Web サーバが異なるバージョンの InterSystems IRIS を提供する場合、同じファイルの 2 つの異なるバージョン間で競合が発生する可能性があります (ハイパーベントのブローカ・コンポーネントなど)。各 CSP サーバが独自のアプリケーションの静的コンテンツを提供する場合は、そのような競合は発生しません。また、Web サーバ自体で静的ファイルを提供するように構成する場合は、その静的コンテンツがシステム内のすべての Web サーバに存在するようにしてください。

静的ファイルの提供

[物理パス] によって指定されたディレクトリから静的ファイルを提供するかどうかを制御します。

  • いいえ — このアプリケーション・パスからファイルを提供しません。

  • 常時 — 既定。常にこのアプリケーション・パスからファイルを提供し、静的ファイルのこのパスの CSP セキュリティ設定を無視します。新規アプリケーションではこれが既定です。この設定には以前に Web サーバから静的ファイルが提供されていたアプリケーションとの後方互換性があります。

  • 常時かつキャッシュ — 常にこのアプリケーション・パスからファイルを提供し、Web ゲートウェイがこれらのファイルをキャッシュして、InterSystems IRIS からファイルを要求せずに済むようにします。これは、導入されたアプリケーションで使用することが想定されるモードです。

  • CSPセキュリティ使用 — このアプリケーションで CSP ページを表示する許可がある場合は、静的ファイルも表示することができます。ページを表示する許可がない場合は、「404 page not found」というメッセージが表示されます。

静的ファイルの提供タイムアウト

ブラウザが静的ファイルをキャッシュする時間の長さ (秒単位) を指定します。既定値は 3600 です。

物理パス

この Web アプリケーションへのファイルの提供元である InterSystems IRIS サーバ上のディレクトリ。パスは install-dir/csp/ ディレクトリを基準にした相対パスです。

タグベースの開発にのみ適用されるオプションである [パッケージ名][デフォルトスーパークラス][再帰][自動コンパイル]、および [CSP名ロック] は無視してください。(必要に応じて、Caché/Ensemble のドキュメントの "アプリケーションの作成および編集 : [一般] タブ" を参照してください。)

カスタム・ページ

CSP ベースの Web アプリケーションについては、以下のように [カスタム・ページ] を指定します。

ログインページ

必要に応じて、CSP ページ・クラスの名前を指定します。この名前の前には Web アプリケーションのフル・パスを付ける場合があります。例えば、/csp/user/MyApp.LoginPage.cls のようになります。

通常、ログイン・ページはユーザが InterSystems IRIS にログインする前にロードされるため、要求プロセスは CSPSystem ユーザ (または CSP ゲートウェイを InterSystems IRIS に接続する任意のユーザ) の下で実行されます。その結果として、CSPSystem ユーザにはログイン・ページのコードをロードして実行するのに十分な特権が必要になります。これには通常ログイン・ページが配置されているデータベースを保護するリソースの READ 許可が含まれます。

パスワード変更ページ

必要に応じて、パスワードを変更する際に使用するページのクラス名を指定します。

カスタムエラーページ

必要に応じて、このアプリケーション内でページを生成するときにエラーが発生した場合に表示する CSP エラー・ページ・クラスの名前を指定します。

ページおよびクラスへのアクセスの有効化

Web アプリケーションからページとクラスへのアクセスには、以下の規則が適用されます。

  1. 既定では、ユーザ・アプリケーションは以下のページへのアクセスが許可されます。

    • /csp/sys/ アプリケーションとそのすべてのサブアプリケーションのページが許可されます。

    • /isc/studio/templates/ および /isc/studio/usertemplates/ アプリケーションのページが許可されます。

  2. 既定では、ユーザ・アプリケーションは現在のネームスペース内のすべての非 % クラスへのアクセスが許可されます。

  3. また、ユーザ・アプリケーションは以下のクラスにもアクセスできます。

Web アプリケーション内の設定のチェックに加えて、許可されるクラスのチェックが実行されます。

追加のクラスへのアクセスを許可するには、%SYS ネームスペースでグローバル ^SYS("Security","CSP","category") を構成します。ここで、categoryAllowClassAllowPrefix、または AllowPercent です。後続のセクションでは、これらのプロセスについて説明します。

Important:

チェックは、まず既定のルールを適用し、その後リストされている順序でカテゴリを適用します。

また、各キーワードは複数回呼び出すことができます。つまり、パッケージ全体をアクセス可能にして、その後そのパッケージ内の 1 つのクラスにアクセスを制限することができます。

^SYS グローバルについての背景情報

^SYS グローバルは %SYS ネームスペースで利用でき、構成情報が含まれています。最初にこのグローバルの関連する部分の現在のコンテンツを調べると役立つ場合があります。そのためには、ターミナルを開いて、%SYS ネームスペースに切り替えます。次に、以下のコマンドを入力します。

 zw ^SYS("Security", "CSP")

各ノードに 1 行が表示され、その現在の値が表示されます。以下に例を示します。

^SYS("Security","CSP")=1
^SYS("Security","CSP","AllowClass","/csp/samples/","%CSP.UI.Portal.About")=1
^SYS("Security","CSP","AllowClass","/csp/samples/","%SOAP.WebServiceInfo")=1
^SYS("Security","CSP","AllowClass","/csp/samples/","%SOAP.WebServiceInvoke")=1
^SYS("Security","CSP","AllowPrefix","/csp/samples/","%DeepSee.")=1

カテゴリ : AllowClass

アプリケーションが特定のクラスの呼び出しに依存している場合、AllowClass オプションを使用してそのクラスを利用可能にします。

Important:

アプリケーションが "ページおよびクラスへのアクセスの有効化" の最初に許可済みとしてリストされているクラス以外のクラスの呼び出しに依存している場合は、使用するのは安全ではない可能性があります。このクラスの呼び出しが必要かどうかを判断し、導入環境のリスク評価を実施して、そのクラスを利用可能にすることによる影響を把握することをお勧めします。

特定の Web アプリケーションが特定のクラスを呼び出せるようにするには、%SYS ネームスペースで以下のコマンドを使用します。

 Set ^SYS("Security", "CSP", "AllowClass", "web-app-name", "package.class") = value

以下はその説明です。

  • web-app-name は、Web アプリケーションの名前です。Web アプリケーション名は小文字で、先頭と末尾の両方にスラッシュを付ける必要があります。

    すべての Web アプリケーションで特定のクラスまたはパッケージを使用できるようにするには、web-app-name を 0 に指定します。この場合、二重引用符で囲む必要はありません。

  • package.class は、クラスの完全修飾名です。class を省略すると、指定されたパッケージのすべてのクラスが許可されます。

  • value は 1 または 0 です。

    これに 1 を指定すると、Web アプリケーションはこのクラス (またはパッケージ) を呼び出すことができます。

    これに 0 を指定すると、Web アプリケーションはこのクラス (またはパッケージ) を呼び出せません。

例えば、/csp/webapps アプリケーションがクラス %User.Page を使用できるようにするには、以下のコマンドを使用します。

 Set ^SYS("Security", "CSP", "AllowClass", "/csp/webapps/", "%User.Page") = 1

または、すべての Web アプリケーションが %User.Page を使用できるようにするには、以下のコマンドを使用します。

 Set ^SYS("Security", "CSP", "AllowClass", 0, "%User.Page") = 1 

別の例として、/csp/myapp アプリケーションが、%User パッケージ内の %User.Other クラスを除くすべてのクラスを使用できるようにするには、以下の 2 つのコマンドを使用します。

 Set ^SYS("Security", "CSP", "AllowClass", "/csp/myapp/", "%User") = 1
 Set ^SYS("Security", "CSP", "AllowClass", "/csp/myapp/", "%User.Other") = 0

カテゴリ : AllowPrefix

アプリケーションが、同じ文字セットで始まる複数のクラスまたはパッケージの呼び出しに依存している場合、AllowPrefix オプションを使用します。

Important:

アプリケーションが上記でリストされているクラス以外のクラスの呼び出しに依存している場合は、使用するのは安全ではない可能性があります。このクラスの呼び出しが必要かどうかを判断し、導入環境のリスク評価を実施して、そのクラスを利用可能にすることによる影響を把握することをお勧めします。

特定の Web アプリケーションが、同じ文字セットで始まるクラスまたはパッケージを呼び出せるようにするには、%SYS ネームスペースで以下のコマンドを使用します。

 Set ^SYS("Security", "CSP", "AllowPrefix", "web-app-name", "prefix") = value

以下はその説明です。

  • web-app-name は、Web アプリケーションの名前です。Web アプリケーション名は小文字で、先頭と末尾の両方にスラッシュを付ける必要があります。

    すべての Web アプリケーションが特定のクラスまたはパッケージを使用できるようにするには、web-app-name を 0 に指定します。この場合、引用符で囲む必要はありません。

  • prefix は、名前の接頭語です。

  • value は 1 または 0 です。

    これに 1 を指定すると、Web アプリケーションはこれらのクラス (またはパッケージ) を呼び出すことができます。

    これに 0 を指定すると、Web アプリケーションはこれらのクラス (またはパッケージ) を呼び出せません。

例えば、/csp/webapps アプリケーションが MyApp パッケージ全体を呼び出せるようにするには、以下のコマンドを使用します。

 Set ^SYS("Security", "CSP", "AllowPrefix", "/csp/webapps/", "MyApp.") = 1

prefix"MyApp." であることに注意してください。接頭語にピリオドが含まれるため、Web アプリケーションは MyAppUtils のようなパッケージにはアクセスできません。しかし、Web アプリケーションは MyApp.UtilsMyApp.UnitTests のようなパッケージにはアクセスできます。

別の例として、すべてのアプリケーションが My で始まるすべてのパッケージにアクセスできるようにするには、以下のコマンドを使用します。

 Set ^SYS("Security", "CSP", "AllowPrefix", 0, "My") = 1 

さらに別の例として、/csp/myapp アプリケーションが %MyPkg パッケージ内の %MyPkg.Class1 クラスを除くすべてのクラスにアクセスできるようにする必要があるとします。その場合、以下のコマンドを使用します。

 Set ^SYS("Security", "CSP", "AllowClass", "/csp/myapp/", "%MyPkg.Class1") = 0 
 Set ^SYS("Security", "CSP", "AllowPrefix", "/csp/myapp/", "%MyPkg.") = 1

カテゴリ : AllowPercent

アプリケーションが、通常 % 文字で始まるパッケージの呼び出しに依存している場合、AllowPercent オプションによってこれらのクラスが利用可能になります。

Important:

アプリケーションが上記でリストされているクラス以外のクラスの呼び出しに依存している場合は、使用するのは安全ではない可能性があります。このクラスの呼び出しが必要かどうかを判断し、導入環境のリスク評価を実施して、そのクラスを利用可能にすることによる影響を把握することをお勧めします。

すべての Web アプリケーションが、% 文字で始まるすべてのパッケージを使用できるようにするには、%SYS ネームスペースで以下のコマンドを使用します。

 Set ^SYS("Security", "CSP", "AllowPercent") = 1
Note:

または、値 0 を使用して、すべての Web アプリケーションがこれらのパッケージにアクセスすることを明示的に禁止します。

CSP サーバで静的ファイルを処理する方法

Web アプリケーションが静的ファイルを提供するよう構成されている場合、CSP サーバ (特にストリーム・サーバ・コンポーネント) は静的ファイルを処理します。CSP サーバは、ファイル拡張子を使用して以下を特定します。

  • ファイル・タイプ (MIME タイプ)

  • ファイルがバイナリ・ファイルであるかどうか

  • ファイルの文字エンコード (該当する場合)

JavaScript ファイルの場合、ストリーム・サーバは、以下に説明する主要な Web サーバと同じ方法で文字エンコードを決定します。必要に応じて既定の動作をオーバーライドできます。

JavaScript ファイルの文字エンコード

最近の慣例では、すべての JavaScript ファイルが application/javascript のコンテンツ・タイプとしてマークされます。JavaScript ファイルがこのようにマークされている場合、

  • ファイルに BOM (バイト・オーダー・マーク) が含まれていれば、これをブラウザが自動的に検出し、適切な文字セットを利用してこれを読み取ります。

  • ファイルに BOM が含まれていなければ、ブラウザはこのファイルを UTF-8 と見なします。

この動作をオーバーライドして、JavaScript ファイルに文字セットを指定する必要がある場合は、グローバル ^%SYS("CSP","MimeFileClassify","JS") をリスト値 $listbuild(contenttype, binary, charset) に設定します。以下に例を示します。

 Set list=$listbuild("text/javascript", 0 ,"ISO-8859-1")
 Set ^%SYS("CSP", "MimeFileClassify", "JS") = list

これにより、古い Content-Type が設定され、ISO-8859-1 文字セットが使用されます。また、既定の InterSystems IRIS 変換テーブルが空の文字列以外に定義されている場合、またはグローバル・ノード ^%SYS("CSP","DefaultFileCharset") が NULL 値に設定されている場合、InterSystems IRIS はすべての JavaScript およびその他のテキスト・ファイルにこの文字セットを使用します。既定では、これらのグローバル・ノードはどちらも設定されていません。

FeedbackOpens in a new tab