コンテンツセキュリティポリシー
ThingWorx の顧客のセキュリティ体制を強化するため、ThingWorx 9.3.15、9.4.5、9.5.1 以降の ThingWorx Platform にコンテンツセキュリティポリシー (CSP) が追加されました。
CSP
CSP は、クロスサイトスクリプティング (XSS)、クリックジャッキング、その他のデータインジェクション攻撃から保護するために Web ブラウザで使用される主要なセキュリティツールです。CSP に従って、ThingWorx Platform から Web ブラウザに CSP ヘッダーが注入されて、ブラウザにロード可能な動的データとリソースおよびロード元のドメインが制御されます。許可されたドメイン外からのリソースリクエストをブラウザにロードすることはできません。
制御されるリソースの例を次に示します。
• フォント、イメージ、JavaScript ライブラリのロード
• 外部ソースから ThingWorx マッシュアップ上の iFrame へのコンテンツのレンダリング
• 外部ページ上の iFrame への ThingWorx ページコンテンツのレンダリング (Windchill ページでの ThingWorx マッシュアップのレンダリングなど)
管理者は ThingWorx Composer を介して CSP ディレクティブを設定します。CSP ヘッダーはすべてのディレクティブの組み合わせであり、CSP ポリシーを構成します。CSP ヘッダーは 1200 文字に制限されています。
ThingWorx では、コンテンツセキュリティポリシーレベル 2 が実装されています。CSP の詳細については、以下を参照してください。
Composer
メインページバナー
この新しいセキュリティ機能について管理者に通知し、これらの機能が有効になっていないことを警告するため、ThingWorx Composer では非ブロック警告バナー「コンテンツセキュリティポリシー (CSP) が有効ではありません。詳細については、ヘルプセンターを参照してください。」が Composer の上部に表示されます。
このバナーは、CSP が有効になっていない場合にのみ表示され、管理者にのみ表示されます。管理者は警告を各自で閉じて、今後のログイン時に表示されないようにすることができます。それ以降も他の管理者には各自で閉じるまでバナーが表示されます。バナーには、コンテンツセキュリティポリシーのトピックへのヘルプセンターリンクが含まれています。
CSP の設定
管理者は、プラットフォームサブシステムの「コンテンツセキュリティポリシー規則」サブページから CSP を設定します。このページで、管理者はポリシーを定義するディレクティブを追加および修正できます。詳細については、
コンテンツセキュリティポリシーのヘッダー値の設定を参照してください。
CSP の有効化
CSP を有効にするには、platform-settings.json で新しいパラメータを次のように設定します: “EnableContentSecurityPolicyFilter”: true
"EnableContentSecurityPolicyFilter" が true に設定されている場合、CSP 保護が有効になります。"EnableContentSecurityPolicyFilter" が false に設定されているか、platform-settings.json に含まれていない場合、CSP は無効になります。
インストールとアップグレードの手順については、ヘルプセンターの
インストールおよびアップグレードのセクションを参照してください。
CSP フィルタを使用した ThingWorx Platform の新規インストール
• 手動インストール
• ThingWorx Foundation インストーラ
CSP をサポートするバージョンへの ThingWorx のアップグレード
メンテナンスリリースのアップグレードについては、
メンテナンスリリースのアップグレードを参照してください。
Windows での手動アップグレードについては、以下を参照してください。
Linux での手動アップグレードについては、以下を参照してください。
ThingWorx Foundation インストーラによるアップグレードについては、
インストーラアップグレードを参照してください。
既存の環境での CSP の有効化または無効化
既存の環境で CSP を有効または無効にするには、次の手順を実行します。
1. platform-settings.json の PlatformSettingsConfig の下にある BasicSettings セクションで EnableContentSecurityPolicyFilter フラグを true に設定します。
2. Tomcat サーバーを再起動します。
|
ThingWorx の起動時に、以下のすべての条件が満たされている場合、ClickjackFilter コンフィギュレーションが web.xml から CSP に自動的に移行されます。
• CSP フィルタがオンになっている。
• web.xml でクリックジャックフィルタが設定されている。
• ThingWorx Composer で ThingWorx 管理者によって CSP フィルタがまだ設定されていない。
|
CSP への ClickjackFilter 設定の移行
ThingWorx の起動時に、以下の条件が満たされている場合、ClickjackFilter コンフィギュレーションが CSP に自動的に移行されます。
• コンテンツセキュリティポリシーフィルタがオンになっている。つまり、EnableContentSecurityPolicyFilter が true に設定されている。
• web.xml を使用してクリックジャックフィルタが設定されている。
• UI から CSP フィルタがまだ設定されていない。
ClickjackFilter は SAMEORIGIN、DENY、ALLOWLIST の 3 つのモードのいずれかで設定できます。
• ClickjackFilter が SAMEORIGIN に設定されている場合、これは frame-ancestors の CSP デフォルトコンフィギュレーションなので、何も移行されません。
<filter>
<filter-name>ClickjackFilterSameOrigin</filter-name>
<filter-class>com.thingworx.security.filter.ClickjackFilter</filter-class>
<init-param>
<param-name>mode</param-name>
<param-value>SAMEORIGIN</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ClickjackFilterSameOrigin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
• ClickjackFilter が DENY に設定されている場合、CSP ヘッダー frame-ancestors は 'none' に設定されます。
<filter>
<filter-name>ClickjackFilterDeny</filter-name>
<filter-class>com.thingworx.security.filter.ClickjackFilter</filter-class>
<init-param>
<param-name>mode</param-name>
<param-value>DENY</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ClickjackFilterDeny</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
• ClickjackFilter が ALLOWLIST に設定されている場合、CSP ヘッダー frame-ancestors および frame-src は設定済みドメインを許可するように設定されます。
<filter>
<filter-name>ClickjackFilterAllowList</filter-name>
<filter-class>com.thingworx.security.filter.ClickjackFilter</filter-class>
<init-param>
<param-name>mode</param-name>
<param-value>ALLOWLIST</param-value>
</init-param>
<init-param>
<param-name>domains</param-name>
<param-value>http://example.com</param-value>
</init-param>
</filter>
<filter>
<filter-mapping>
<filter-name>ClickjackFilterAllowList</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>