Composer의 ThingWorx 모델 정의 > 보안 > iFrame에 내장 매쉬업 허용
iFrame에 내장 매쉬업 허용
* 
ThingWorx 고객의 보안 자세를 개선하기 위해 ThingWorx 9.3.15, 9.4.5 및 9.5.1부터 ThingWorx Platform에 콘텐츠 보안 정책(CSP)에 대한 지원이 추가되었습니다. 활성화되면 CSP가 아래에 설명된 대로 클릭재킹을 차단하는 현재 방법을 대체합니다. 자세한 내용은 콘텐츠 보안 정책을 참조하십시오.
클릭재킹(Clickjacking)이란 공격자가 프레임을 사용하여 사이트를 표시하고 해당 사이트 위에 보이지 않는 레이어를 하나 이상 적용하여 사용자가 이 보이지 않는 레이어상의 어떤 것을 클릭하도록 속이는 것을 말합니다. 이러한 클릭재킹 방어는 페이지에 프레임을 지정하는 것이 정상적인 것인지를 브라우저에 알리기 위해 서버의 응답 헤더를 사용합니다. 브라우저 간 규제 준수 차이로 인해 프레임 지정이 허용된 도메인을 표시하는 데 두 개의 서로 다른 헤더를 사용해야 합니다. 이러한 헤더는 아래에 설명되어 있습니다. 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 중 하나를 활성화하거나 비활성화할 수 있습니다. ThingWorx 응용 프로그램의 web.xml 파일에서 세 가지 필터 매핑 중 하나의 주석 처리를 취소하면 됩니다.
예를 들면 다음과 같습니다.
<!-- 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>
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에 로드됩니다.
로그인 프로세스 진행 동안 브라우저에 따라 쿠키 및/또는 팝업의 사용을 허용할 것인지 묻는 메시지가 표시될 수 있습니다. 자세한 내용은 아래 이미지를 참조하십시오.
* 
기본 및 iFrame 응용 프로그램이 다른 사이트에 속하는 경우 Chrome 브라우저에서는 iFrame 응용 프로그램의 쿠키에 대한 액세스를 허용하지 않습니다. 예를 들어 *.ptc.com*.google.com 사이트가 있습니다. 이를 해결하려면 iFrame(Thingworx) 응용 프로그램에 대해 SameSite=None 쿠키 속성을 추가합니다. 자세한 내용은 https://www.ptc.com/en/support/article/CS318637을 참조하십시오.
도움이 되셨나요?