Définition du modèle ThingWorx dans Composer > Sécurité > Autoriser l'incorporation d'applications composites intégrées dans des iFrames
Autoriser l'incorporation d'applications composites intégrées dans des iFrames
Le détournement de clic (aussi clickjacking) est une technique malveillante consistant à utiliser une frame pour afficher un site et appliquer une ou plusieurs couches invisibles sur le site, poussant l'utilisateur à cliquer à son insu sur un élément d'une couche invisible. Un des moyens de se protéger contre le détournement de clic consiste à utiliser des en-têtes de réponse du serveur, qui indiquent au navigateur si l'utilisation de frames pour afficher la page n'engendre aucun risque. Compte tenu des différences de conformité présentes entre les navigateurs, deux en-têtes différents doivent être utilisés pour indiquer quels domaines peuvent être utiliser des frames. Ces en-têtes sont décrits ci-dessous. ThingWorx utilise ces en-têtes, ce qui permet à l'administrateur d'interdire l'utilisation de frames, d'autoriser uniquement les frames de sa propre origine ou d'autoriser les frames d'un domaine spécifique.
Descriptions des en-têtes
Les en-têtes utilisés pour se protéger du détournement de clic sont les suivants :
X-Frame-Options
DENY : la page ne peut pas être affichée dans une frame, quel que soit le site qui tente de l'afficher.
SAMEORIGIN : la page peut uniquement être affichée dans une frame si elle possède la même origine que la page.
ALLOW-FROM http://example.com : la page peut uniquement être affichée dans une frame depuis le domaine indiqué.
Pour obtenir une liste des navigateurs qui prennent en charge X-Frame-Options, consultez la page suivante : https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet#Limitations.
Content Security Policy
frame-ancestors 'none' : empêche le chargement de ressources dans une frame, quelle qu'en soit l'origine.
frame-ancestors 'self' : autorise le chargement de ressources dans une frame uniquement si leur origine est la même.
frame-ancestors domain1.com domain2.com : autorise le chargement de ressources dans une frame uniquement depuis les domaines de la liste spécifiée.
Pour obtenir une liste des navigateurs qui prennent en charge Content Security Policy 2, consultez la page suivante : http://caniuse.com/#feat=contentsecuritypolicy2.
Configuration de ThingWorx
ThingWorx prend en charge les deux en-têtes en utilisant un filtre de requête HTTP. L'administrateur peut activer ou désactiver un des filtres ClickjackFilterDeny, ClickjackFilterSameOrigin ou ClickjackFilterWhiteList en décommentant l'un des trois mappages de filtre dans le fichier web.xml de l'application ThingWorx.
Par exemple :
<!-- 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>ClickjackFilterWhiteList</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Aucune autre configuration n'est nécessaire pour les filtres ClickjackFilterDeny ou ClickjackFilterSameOrigin. Si l'administrateur décide d'utiliser le filtre ClickjackFilterWhiteList, il doit ajouter les domaines acceptés dans la valeur de paramètre "domains" du filtre.
Par exemple :
<filter>
<filter-name>ClickjackFilterWhiteList</filter-name>
<filter-class>com.thingworx.security.filter.ClickjackFilter</filter-class>
<init-param>
<param-name>mode</param-name>
<param-value>WHITELIST</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>
Les domaines doivent être indiqués dans le format illustré ci-dessus, dans une liste dont les éléments comprennent le schéma (HTTP) et sont séparés par des espaces. La liste de domaine affichée ci-dessus est compatible avec n'importe quel navigateur.