Definición del modelo de ThingWorx en Composer > Seguridad > Uso permitido de mashups integrados en iFrames
Uso permitido de mashups integrados en iFrames
* 
Para reforzar la posición de seguridad de los clientes de ThingWorx, se ha introducido soporte para la directiva de seguridad del contenido (CSP) en las versiones 9.3.15, 9.4.5 y 9.5.1 de ThingWorx Platform. Cuando se activa, CSP reemplaza el método actual que se utiliza para evitar el secuestro de pulsaciones, tal como se describe a continuación. Para obtener más información, consulte Directiva de seguridad de contenido.
El secuestro de pulsaciones es una técnica en la que un atacante utiliza un marco para mostrar un sitio legítimo y lo superpone con una o más capas invisibles. Este enfoque engaña a los usuarios para que pulsen en los elementos de la capa oculta. Para protegerse contra el secuestro de pulsaciones, los servidores utilizan cabeceras de respuesta que indican al explorador si se puede enmarcar la página.
Debido a las diferencias en el cumplimiento del explorador, ThingWorx utiliza dos cabeceras distintas para especificar qué dominios pueden enmarcar su contenido. Estas cabeceras permiten a los administradores hacer lo siguiente:
Bloquear todo el encuadre.
Permitir el encuadre solo desde el mismo origen.
Permitir el encuadre desde un dominio específico.
Descripciones de cabecera
Las cabeceras que se utilizan para combatir el secuestro de pulsaciones son las siguientes:
X-Frame-Options
DENY: la página no se puede mostrar en un marco, independientemente del sitio en el que se intenta mostrar.
SAMEORIGIN: la página se puede mostrar solo en un marco en el mismo origen que la página.
ALLOW-FROM http://example.com: la página se puede mostrar solo en un marco del origen especificado.
Para obtener una lista de exploradores que soportan X-Frame-Options, consulte https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet#Limitations.
Content-Security-Policy
frame-ancestors 'none': permite impedir la carga de recursos en un marco desde cualquier origen.
frame-ancestors 'self': permite la carga de recursos en un marco, pero solo desde el mismo origen.
frame-ancestors domain1.com domain2.com: permite la carga de recursos en un marco, pero solo desde los dominios de la lista dada.
Para obtener una lista de los exploradores que soportan el nivel 2 de la directiva de seguridad de contenido, consulte http://caniuse.com/#feat=contentsecuritypolicy2.
Configuración de ThingWorx
* 
Para obtener más información sobre HTTP y sus tecnologías relacionadas, consulte el manual para desarrolladores HTTP.
ThingWorx soporta ambas cabeceras mediante el uso de un filtro de solicitud HTTP. El administrador puede activar o desactivar uno de tres filtros: ClickjackFilterDeny, ClickjackFilterSameOrigin y ClickjackFilterAllowList mediante la anulación de comentarios de una de las tres asignaciones de filtro en el fichero web.xml de la aplicación de ThingWorx.
Por ejemplo:
<!-- 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>
No es necesaria ninguna otra configuración para ClickjackFilterDeny o ClickjackFilterSameOrigin. Si el administrador decide utilizar ClickjackFilterAllowList, se deben añadir los dominios aceptados en el valor del parámetro "domains" del filtro.
Por ejemplo:
<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>
Los dominios dados deben estar en el formato mostrado, una lista separada por espacios en la que se incluye el esquema (HTTP). La lista de dominios mostrada anteriormente funcionará con todos los exploradores.
[Obligatorio para el SSO] Modificación de aplicaciones de cliente
Para abrir mashups en iFrame, se debe cambiar el URL del punto de entrada.
Los puntos de entrada de ThingWorx que apuntan a un mashup utilizan actualmente uno de los siguientes formatos:
https://<nombre de servidor thingworx>/Thingworx/Runtime/index.html?mashup=<nombre de mashup principal>
Https://<nombre de servidor thingworx>/Thingworx/Thingworx/Mashups/<nombre de mashup principal>
Para abrir mashups en iFrame, se debe cambiar el formato del punto de entrada de la siguiente manera:
https://<nombre de servidor thingworx>/Thingworx/Runtime/iframe-index.html?mashup=<nombre de mashup principal>
* 
Si es necesario pasar algunos parámetros a un mashup abierto, se pueden añadir al URL.
* 
El método POST no está permitido. Se debe utilizar el método GET.
Si se desea utilizar un punto de entrada personalizado en lugar del mashup, se debe añadir como parámetro de URL __entry_point__. Por ejemplo https://<nombre de servidor thingworx>/Thingworx/Runtime/iframe-index.html?__entry_point__=/Thingworx/Common/extensions/My-extension/ui/My-entry-point.html
* 
En caso de que se cambie entre los modos de SSO y los que no son de SSO, este cambio también se aplica al modo que no es de SSO.
Cuando iFrame está activado, se le solicitará al usuario una conexión de SSO en la ventana emergente. La ventana se cierra después de conectarse correctamente y el mashup se carga en el iFrame.
Durante el proceso de inicio de sesión, es posible que se solicite al usuario que permita el uso de cookies y elementos emergentes, según el navegador. Consulte las siguientes imágenes para obtener los detalles:
* 
Si las aplicaciones principales e iFrame pertenecen a sitios diferentes, el navegador Chrome no permite el acceso a las cookies para la aplicación iFrame. Por ejemplo *.ptc.com y *.google.com. La solución consiste en añadir la propiedad de cookie SameSite=None para la aplicación iFrame (Thingworx). Para obtener más información, consulte https://www.ptc.com/support/article/CS318637.
¿Fue esto útil?