Composer의 ThingWorx 모델 정의 > 보안 > iFrame에 내장 매쉬업 허용
iFrame에 내장 매쉬업 허용
* 
ThingWorx 고객의 보안 태세를 강화하기 위해 콘텐츠 보안 정책(CSP)에 대한 지원이 ThingWorx Platform 버전 9.3.15, 9.4.5 및 9.5.1에 도입되었습니다. CSP를 활성화하면, 아래에 설명된 대로 클릭재킹을 방지하기 위해 사용되던 기존 방식이 CSP로 대체됩니다. 자세한 내용은 콘텐츠 보안 정책을 참조하십시오.
클릭재킹은 공격자가 프레임을 이용해 정상 사이트를 표시하고 그 위에 하나 이상의 보이지 않는 레이어를 겹쳐 씌우는 기법입니다. 이 접근 방식은 사용자를 속여 숨겨진 레이어에 있는 요소를 클릭하게 만듭니다. 클릭재킹을 방어하기 위해 서버는 페이지가 프레임 안에서 표시될 수 있는지를 브라우저에 지시하는 응답 헤더를 사용합니다.
브라우저마다 규정 준수 방식이 달라서, 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 구성
* 
HTTP 및 해당 관련 기술에 대한 자세한 내용은 HTTP 개발자 안내서를 참조하십시오.
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/support/article/CS318637을 참조하십시오.
도움이 되셨나요?