コンテンツセキュリティポリシーを適用する
この記事は作成中です。この新しいバージョンはどの程度参考になりましたか。投票でお聞かせください。
Web上で増加し続ける攻撃を防ぐため、OutSystemsで開発したアプリケーションに、コードインジェクション攻撃への対抗策であるCSP(コンテンツセキュリティポリシー)を使用します。CSPとは、ブラウザが読み込みを認められている許可済みのコンテンツ出元を宣言する標準的な方法です。
特定のHTTPヘッダーでブラウザに送られるディレクティブを使用して構成されます。これにより、ブラウザがアプリケーションのページを実行する際に、リソースをどの場所やタイプから読み込めばよいかわかります。
すべての環境にCSPを設定することをお勧めします。まず、1つの環境のすべてのアプリケーションで許可するソースを指定します。次に必要に応じてアプリケーションごとにソースを指定して、一般構成を上書きします。
このCSP構成は、OutSystemsで開発したWebアプリケーションおよびモバイルアプリケーションの両方で有効です。
LifeTimeでCSPを設定する
LifeTimeをインストールしている場合は、この管理コンソールを使用してコンテンツセキュリティポリシーを設定します。
すべての環境
すべての環境にCSPを設定するには、インフラの管理コンソールであるLifeTimeを使用します。
- [Infrastructure]セクションに移動して、すべての環境を表示します。
- 1つの環境で[Environment Security]オプションを選択します。
- CSPを有効化します。
- 1行につき1つ値を入れる形式でディレクティブを構成します。
アプリ
アプリケーションにCSPを設定するには、LifeTimeで以下の手順を実行します。
- LifeTimeで[Applications]セクションを選択して、アプリケーションを選択します。
- [Security Settings]オプションを選択します。
- ドロップダウンリストで、設定を適用する環境を選択します。
- CSPを有効化します。
- 1行につき1つ値を入れる形式でディレクティブを構成します。
Service CenterでCSPを設定する
LifeTimeをインストールしていない場合は、環境の管理コンソールであるService Centerを使用して各環境のCSPを設定します。
環境
環境内のすべてのアプリにCSPを設定するには、Service Centerで以下の手順を実行します。
- [Administration]セクションで、[Security]オプションを選択します。
- CSPを有効化します。
- 1行につき1つ値を入れる形式でディレクティブを構成します。
アプリ
アプリにCSPを設定するには、Service Centerで以下の手順を実行します。
- [Factory]セクションを選択して、アプリケーションを選択します。
- [Security]タブを選択します。
- CSPを有効化します。
- 1行につき1つ値を入れる形式でディレクティブを構成します。
監視
CSPを設定した後、環境の管理コンソール(Service Center)を使用して、ブロックされたリソースを監視します。
- [Monitoring]セクションに移動して、[Errors]オプションを選択します。
- CSPReportにeSpaceフィルタを設定して、CSPがブロックしたリソースのみを表示します。
CSPを設定する際には、以下の構成ミスにご注意ください。
-
ポリシーの指定漏れ: アプリケーションで使用するソースすべてを許可するポリシーを必ず設定してください。指定漏れがあった場合、ユーザーにビデオが表示されなかったりたり、CSSが適用されなかったりする可能性があります。
-
過剰に寛大なポリシー: ドメインリストで「
*
」を使用してあらゆる場所からのリソースの読み込みを許可する場合、特にご注意ください。ハッカーがアプリケーションのリンク、スクリプト、その他のリソースを悪用して、ユーザーを悪意あるページにリダイレクトする場合があります。
ディレクティブの参照
OutSystemsでCSPを設定する際に利用可能なディレクティブは、以下の表のとおりです。
ディレクティブ | 説明 | デフォルト値 |
---|---|---|
Base-uri | アプリケーション画面のベースURLとして使用できるドメイン。 許可されるソース表現: self 。 |
self |
Child-src | アプリケーションがフレームの組み込みを許可されているドメイン。 許可されるソース表現: self 、* 。 |
self |
Connect-src | アプリケーションがスクリプトインターフェイスを使用してリソースを読み込むことが許可されているドメイン。 許可されるソース表現: self 、* 。 |
self |
Default-src | アプリケーションがデフォルトでリソースの読み込みを許可されているドメイン。 object-srcやimg-srcなど未定義のリソース型専用ディレクティブは、この設定を継承します。 許可されるソース表現: self 、data: 、* 。 |
self |
Font-src | アプリケーションがフォントの読み込みを許可されているドメイン。 許可されるソース表現: self 、data: 、* 。 |
self data: |
Img-src | アプリケーションが画像の読み込みを許可されているドメイン。 許可されるソース表現: self 、data: 、* 。 |
self data: |
Media-src | アプリケーションがメディアファイルの読み込みを許可されているドメイン。 許可されるソース表現: self 、data: 、* 。 |
- |
Object-src | アプリケーションがオブジェクト(<object> 、<embed> 、<applet> 要素用)の読み込みを許可されているドメイン。許可されるソース表現: self 、* 。 |
- |
Plugin-types | ユーザーのブラウザが呼び出し可能な有効なプラグイン。 | - |
Script-src | アプリケーションがスクリプトの読み込みを許可されているドメイン。 許可されるソース表現: self 、data: 、* 。 |
self |
Style-src | アプリケーションがスタイルの読み込みを許可されているドメイン。 許可されるソース表現: self 、data: 、* 。 |
self |
Frame-ancestors | フレームにアプリケーションを組み込むことが許可されているドメイン。 許可されるソース表現: self 、* 。 |
self |
Report-to | コンテンツセキュリティ違反が報告されるURI。 | <internal> |
Other directives | CSPのヘッダーに付加されるその他のディレクティブ。 | - |
コンテンツセキュリティポリシーとMABS
MABS 6以降で生成されたiOSアプリに適用されます。
MABS 6以降で生成されたモバイルアプリをiOSデバイス上で実行する場合は、outsystems://
を使用して読み込む必要があります。Androidアプリでコンテンツを読み込む場合は、引き続きhttps://
を使用します。iOSアプリで、画像、フォント、動画、スクリプト、スタイルシートの各リソースが適切に読み込まれるようにするには、URL式にhttps://
のプレフィックスが付くようにCSP構成値を入力します。
以下に例をいくつか示します。
MABS 6以前 | MABS 6以降 |
---|---|
example.com |
https://example.com |
subdomain.example.com |
https://subdomain.example.com |
*.example.com |
https://*.example.com |
https://example.com |
https://example.com (変更なし) |
http://example.com |
http://example.com (変更なし) |
ただし、これらの変更はモバイルアプリにのみ適用されます。LifeTimeで環境全体にCSPを設定する場合は、モバイルアプリケーションのCSP構成でこれらの変更を行い、従来のWebアプリやプログレッシブWebアプリ(PWA)に副作用がないようにすることが推奨されます。