Uso permitido de mashups integrados en iFrames
Los secuestros de pulsación (clickjacking) son cuando un atacante utiliza un marco para mostrar un sitio y aplica una o varias capas invisibles sobre el sitio, engañando al usuario para que pulse en algo de la capa invisible. Una defensa frente a los secuestros de pulsación es utilizar cabeceras de respuesta del servidor que indican al explorador si es correcto enmarcar la página. Debido a las diferencias de conformidad de los exploradores, se deben utilizar dos cabeceras distintas para indicar los dominios que tienen permitidos los marcos. Estas cabeceras se describen a continuación. ThingWorx utiliza estas cabeceras, que permiten al administrador rechazar todos los marcos y solo permitir el marco desde su propio origen o permitir el marco 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.
• 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.
Configuración de ThingWorx
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.
|
En ThingWorx 9.3.0, se ha añadido el filtro ClickjackFilterAllowList. Este filtro se reemplazará a ClickjackFilterWhiteList en una versión futura.
|
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 WhiteList 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/en/support/article/CS318637. |