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 - 지정된 원본의 프레임에만 페이지를 표시할 수 있습니다.
• Content-Security-Policy
◦ frame-ancestors 'none' - 어떤 원본의 리소스도 프레임으로 로드할 수 없습니다.
◦ frame-ancestors 'self' - 동일한 원본의 리소스만 프레임으로 로드할 수 있습니다.
◦ frame-ancestors domain1.com domain2.com - 제공된 목록에 있는 도메인의 리소스만 프레임으로 로드할 수 있습니다.
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을 참조하십시오. |