Composer での ThingWorx モデルの定義 > セキュリティ > iFrame の埋め込みマッシュアップの許可
iFrame の埋め込みマッシュアップの許可
クリックジャッキングは、攻撃者がフレームを使用してサイトを表示し、そのサイトに 1 つ以上の見えないレイヤーを貼り付けて、ユーザーが気付かないうちにその見えないレイヤーにある何かをクリックしてしまうものです。クリックジャッキングを防止するには、ページにフレームを使用しても問題がないかどうかをブラウザに指示する、サーバーからの応答ヘッダーが使用されます。各ブラウザのコンプライアンスが異なるため、フレームに表示できるドメインを示すために、2 つの異なるヘッダーが使用される必要があります。これらのヘッダーについて以下に説明します。ThingWorx はこれらのヘッダーを使用するため、管理者はフレーム表示を全面的に禁止したり、正当なドメインからのフレーム表示のみ、または特定のドメインからのフレーム表示のみを許可したりできます。
ヘッダーの説明
クリックジャッキングに対処するために使用するヘッダーは次のとおりです。
X-Frame-Options
DENY - サイトがページをフレームに表示しようとしても関係なく、ページはフレームに表示されません。
SAMEORIGIN - フレームのドメインがページのドメインと同じである場合にかぎり、ページはフレームに表示されます。
ALLOW-FROM http://example.com - フレームのドメインが指定されているドメインである場合にかぎり、ページはフレームに表示されます。
X-Frame-Options をサポートするブラウザのリストについては、https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet#Limitations を参照してください。
Content-Security-Policy
frame-ancestors ‘none’ - ドメインに関係なく、フレームにリソースがロードされるのを禁止します。
frame-ancestors ‘self’ - ドメインが同じである場合にかぎり、フレームにリソースがロードされるのを許可します。
frame-ancestors domain1.com domain2.com - フレームのドメインが指定されたリストに含まれる場合にかぎり、フレームにリソースがロードされるのを許可します。
コンテンツのセキュリティポリシーレベル 2 をサポートするブラウザのリストは、http://caniuse.com/#feat=contentsecuritypolicy2 を参照してください。
ThingWorx のコンフィギュレーション
ThingWorx は HTTP リクエストフィルタの使用によって両方のヘッダーをサポートします。管理者は、ClickjackFilterDenyClickjackFilterSameOrigin、および ClickjackFilterAllowList の 3 つのフィルタのいずれかを有効または無効にできます。これを行うには、ThingWorx アプリケーションの web.xml ファイル内にある 3 つのフィルタマッピングのいずれかをコメント解除します。
* 
ThingWorx 9.3.0 で、ClickjackFilterAllowList フィルタが追加されました。今後のリリースでは ClickjackFilterWhiteList がこのフィルタに置き換えられます。
次に例を示します。
<!-- use the Deny version to exclude all framing -->
<!--
<filter-mapping>
<filter-name>ClickjackFilterDeny</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->
<!-- use the SameOrigin version to allow your application to frame, but nobody else -->
<!--
<filter-mapping>
<filter-name>ClickjackFilterSameOrigin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->
<!-- use the WhiteList version to allow framing from specified domains -->
<filter-mapping>
<filter-name>ClickjackFilterAllowList</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
ClickjackFilterDeny または ClickjackFilterSameOrigin の設定を変更する必要はありません。管理者が ClickjackFilterAllowList を使用することにした場合は、許可するドメインをフィルタの "domains" パラメータ値に追加する必要があります。
次に例を示します。
<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://media-pc:8080
http://192.168.152.133:8080 http://domainY.com</param-value>
</init-param>
</filter>
指定するドメインは、スキーム (HTTP) を含んでいるスペース区切りリストのフォーマットである必要があります。上記のドメインリストは、すべてのブラウザに使用できます。
[SSO で必須] 顧客アプリケーションの修正
iFrame でマッシュアップを開くには、エントリポイントの URL を変更する必要があります。
マッシュアップを指す ThingWorx エントリポイントは、現在、次のいずれかのフォーマットを使用しています。
https://<ThingWorx サーバー名>/Thingworx/Runtime/index.html?mashup=<メインマッシュアップ名>
https://<ThingWorx サーバー名>/Thingworx/Thingworx/Mashups/<メインマッシュアップ名>
iFrame でマッシュアップを開くには、エントリポイントのフォーマットを次のように変更する必要があります。
https://<ThingWorx サーバー名>/Thingworx/Runtime/iframe-index.html?mashup=<メインマッシュアップ名>
* 
開いているマッシュアップに一部のパラメータを渡す必要がある場合、これらを URL に追加できます。
* 
POST メソッドは使用できません。GET メソッドを使用する必要があります。
マッシュアップの代わりにカスタムエントリポイントを使用する場合、これを URL パラメータ __entry_point__ として追加する必要があります。例: https://<ThingWorx サーバー名>/Thingworx/Runtime/iframe-index.html?__entry_point__=/Thingworx/Common/extensions/My-extension/ui/My-entry-point.html
* 
SSO モードと非 SSO モードの間で切り替えた場合、この変更は非 SSO モードにも適用されます。
iFrame がアクティブ化すると、ポップアップウィンドウで SSO ログインが要求されます。ログインに成功するとウィンドウが閉じ、マッシュアップが iFrame にロードされます。
ブラウザによっては、ログインプロセス中に、cookie やポップアップの使用を許可するよう求められる場合があります。詳細については、以下のイメージを参照してください。
* 
プライマリアプリケーションと iFrame アプリケーションが異なるサイトに属している場合、Chrome ブラウザは iFrame アプリケーションに対して cookie へのアクセスを許可しません。たとえば、*.ptc.com*.google.com などです。解決策としては、iFrame (Thingworx) アプリケーションに cookie プロパティ SameSite=None を追加します。詳細については、https://www.ptc.com/en/support/article/CS318637 を参照してください。
これは役に立ちましたか?