Definizione del modello ThingWorx in Composer > Protezione > Abilitazione di mashup incorporati nelle iFrame
Abilitazione di mashup incorporati nelle iFrame
* 
Per migliorare la sicurezza dei clienti ThingWorx, a partire dalle versioni ThingWorx 9.3.15, 9.4.5 e 9.5.1 è stato aggiunto il supporto per Content Security Policy (CSP) alle piattaforme ThingWorx. Se attivata, la CSP sostituisce il metodo corrente di blocco del clickjacking, come descritto di seguito. Per ulteriori informazioni, vedere: Content Security Policy.
Per clickjacking si intende l'azione di un utente malintenzionato che utilizza un frame per visualizzare un sito e applica uno o più livelli invisibili sul sito, inducendo l'utente a fare clic su un oggetto nel livello invisibile. Una difesa contro il clickjacking consiste nell'utilizzare intestazioni di risposta del server che indicano al browser se è sicuro inserire la pagina in un frame. A causa delle differenze di conformità dei browser, è necessario utilizzare due intestazioni diverse per indicare i domini di cui è possibile eseguire il framing. Tali intestazioni sono descritte di seguito. ThingWorx utilizza queste intestazioni permettendo così all'amministratore di impedire completamente il framing oppure di consentire solo il framing dalla propria origine o da un dominio specifico.
Descrizioni delle intestazioni
Di seguito sono riportate le intestazioni utilizzate per contrastare il clickjacking.
X-Frame-Options
DENY - La pagina non può essere visualizzata in un frame, indipendentemente dal sito che tenta di visualizzarla.
SAMEORIGIN - La pagina può essere visualizzata solo in un frame nella stessa origine della pagina.
ALLOW-FROM http://example.com - La pagina può essere visualizzata solo in un frame sull'origine specificata.
Per un elenco dei browser che supportano X-Frame-Options, vedere https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet#Limitations.
Content-Security-Policy
frame-ancestors ‘none’ - Impedisce il caricamento di risorse in un frame da qualsiasi origine.
frame-ancestors ‘self’ - Consente il caricamento di risorse in un frame, ma solo dalla stessa origine.
frame-ancestors domain1.com domain2.com - Consente il caricamento di risorse in un frame, ma solo dai domini nell'elenco specificato.
Per un elenco dei browser che supportano il livello 2 di Content Security Policy Level, vedere http://caniuse.com/#feat=contentsecuritypolicy2.
Configurazione di ThingWorx
ThingWorx supporta entrambe le intestazioni tramite l'utilizzo di un filtro di richiesta HTTP. L'amministratore può attivare o disattivare uno dei tre filtri ClickjackFilterDeny, ClickjackFilterSameOrigin e ClickjackFilterAllowList annullando il commento di una delle tre mappature di filtro nel file web.xml dell'applicazione ThingWorx.
Ad esempio:
<!-- 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 AllowList version to allow framing from specified domains -->
<filter-mapping>
<filter-name>ClickjackFilterAllowList</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Non sono necessarie altre configurazioni per ClickjackFilterDeny o ClickjackFilterSameOrigin. Se l'amministratore sceglie di utilizzare ClickjackFilterAllowList, è necessario aggiungere i domini accettati nel valore del parametro "domains" dei filtri.
Ad esempio:
<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>
I domini specificati devono essere nel formato indicato, un elenco separato da spazi che include lo schema (HTTP). L'elenco di domini indicato precedentemente funziona con tutti i browser.
[Obbligatorio per SSO] Modifica dell'applicazione cliente
Per aprire i mashup nell'iFrame, è necessario modificare l'URL del punto di entrata.
I punti di entrata ThingWorx che puntano a un mashup utilizzano attualmente uno dei formati riportati di seguito.
https://<nome del server thingworx>/Thingworx/Runtime/index.html?mashup=<Nome del mashup principale>
https://<nome del server thingworx>/Thingworx/Thingworx/Mashups/<Nome del mashup principale>
Per aprire i mashup in iFrame, è necessario modificare il formato del punto di entrata come descritto di seguito.
https://<nome del server thingworx>/Thingworx/Runtime/iframe-index.html?mashup=<Nome del mashup principale>
* 
Se è necessario passare alcuni parametri a un mashup aperto, è possibile aggiungerli all'URL.
* 
Il metodo POST non è consentito. È necessario utilizzare il metodo GET.
Se si desidera utilizzare un punto di entrata personalizzato anziché il mashup, è necessario aggiungerlo come parametro URL __entry_point__. Ad esempio https://<nome del server thingworx>/Thingworx/Runtime/iframe-index.html?__entry_point__=/Thingworx/Common/extensions/My-extension/ui/My-entry-point.html
* 
Nel caso in cui si passi dalla modalità SSO alla modalità non SSO, questa modifica è applicabile anche alla modalità non SSO.
Quando l'iFrame è attivata, all'utente viene richiesto un accesso SSO nella finestra popup. La finestra si chiude dopo l'accesso e il mashup viene caricato nell'iFrame.
Durante il processo di accesso, all'utente potrebbe essere chiesto di consentire l'utilizzo di cookie e/o popup, a seconda del browser. Per maggiori dettagli, vedere le immagini seguenti:
* 
Se le applicazioni principali e iFrame appartengono a siti diversi, il browser Chrome non consente l'accesso ai cookie per l'applicazione iFrame. Ad esempio *.ptc.com e *.google.com. La soluzione consiste nell'aggiungere la proprietà dei cookie SameSite=None per l'applicazione iFrame (ThingWorx). Per ulteriori informazioni, vedere https://www.ptc.com/en/support/article/CS318637.
È stato utile?