Определение модели ThingWorx в Composer > Безопасность > Разрешение вложения мэшапов в iFrame
Разрешение вложения мэшапов в iFrame
Атакующий может использовать для отображения сайта кадр и накладывать поверх него один или несколько невидимых слоев, чтобы вынудить пользователя щелкнуть объект, расположенный в невидимом слое. Такая атака называется кликджекингом. Защита против кликджекинга состоит в использовании заголовков отклика сервера, которые сообщают браузеру, безопасно ли использовать кадр на странице. Поскольку требования к соответствию отличаются для разных браузеров, необходимо использовать два заголовка для обозначения доменов, которые разрешено кадрировать. Эти заголовки описаны ниже. В 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 - разрешает загружать в кадр только ресурсы из доменов, включенных в данный список.
Список браузеров, поддерживающих Content Security Policy Level 2, см. по адресу http://caniuse.com/#feat=contentsecuritypolicy2.
Конфигурация ThingWorx
ThingWorx поддерживает оба типа заголовков с помощью фильтра HTTP-запросов. Администратор может включить или выключить один из трех фильтров (ClickjackFilterDeny, ClickjackFilterSameOrigin и ClickjackFilterAllowList), раскомментировав одно из трех сопоставлений фильтров в файле web.xml приложения ThingWorx.
* 
В 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.
Если нужно использовать пользовательскую точку входа вместо имени мэшапа, необходимо добавить ее как параметр __entry_point__ URL-адреса. Например, 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 не разрешает доступ к файлам cookie для приложения iFrame. Например, *.ptc.com и *.google.com. Решение заключается в добавлении свойства cookie SameSite=None для приложения iFrame (Thingworx). Дополнительные сведения см. в статье https://www.ptc.com/en/support/article/CS318637 (на английском языке).
Было ли это полезно?