원격 도메인에서 Flash (AS3)를 사용하여 Flex SWF 호출하는 방법

Flash와 Flex를 사용해 본 적이 있다면, 다른 도메인에서 SWF 파일을 호출할 때 유명한 SecurityError에 직면한 적이 있을 것입니다. 이 오류, 특히 Error #2119는 애플리케이션 개발 과정에서 장애물이 될 수 있으며, 서로 다른 도메인에 호스팅된 SWF 간의 원활한 상호작용을 방해합니다. 오늘은 이 문제를 깊이 살펴보고 ActionScript 3 (AS3)를 사용하여 이 문제를 효과적으로 해결하는 방법을 탐구해 보겠습니다.

문제: 보안 샌드박스 위반

한 도메인에 호스팅된 Flex SWF, 예를 들어 http://www.a.com/a.swf가 있고, 다른 도메인에서 http://services.nuconomy.com/n.swf라는 다른 SWF를 로드하고 싶다고 가정해 봅시다. 코드가 다음과 같이 보일 수 있습니다:

_loader = new Loader();
var req:URLRequest = new URLRequest("http://services.nuconomy.com/n.swf");
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderFinish);
_loader.load(req);

하지만 실행하면 다음과 같은 예외가 발생합니다:

SecurityError: Error #2119: Security sandbox violation: caller http://localhost.service:1234/flashTest/Main.swf cannot access LoaderInfo.applicationDomain owned by http://www.b.com/b.swf.

이 오류는 일반적으로 Flash Player가 서로 다른 도메인에서 제공되는 SWF 파일 간의 직접적인 상호작용을 방지하는 보안 샌드박스 제한을 시행하기 때문에 발생합니다.

해결 방법: Security.allowDomain()을 사용하여 접근 권한 부여

교차 도메인 접근을 허용하기 위해서는 ActionScript에서 Security.allowDomain() 메서드를 사용하여 명시적으로 권한을 부여해야 합니다. 이 해결 방법을 효과적으로 설정하는 방법은 다음과 같습니다.

1단계: 로드하려는 SWF 수정

로드하려는 SWF 파일(예: http://services.nuconomy.com/n.swf)에는 다음 코드 스니펫을 포함해야 합니다:

import flash.system.Security;

// 이 SWF와 상호작용할 도메인 허용
Security.allowDomain("http://localhost.service:1234");

2단계: Security.allowDomain() 올바르게 구현하기

  • 여러 도메인: 애플리케이션에서 여러 도메인의 접근을 허용해야 하는 경우, 각 도메인에 대해 Security.allowDomain()을 여러 번 호출할 수 있습니다.
  • 모범 사례: allowDomain()을 광범위하게 사용하는 것에 주의해야 하며, 보안 취약점에 노출될 수 있습니다. 신뢰할 수 있는 도메인만 허용하도록 하세요.

3단계: 구성 테스트하기

SWF 코드를 업데이트한 후, 애플리케이션을 다시 실행할 수 있습니다. 모든 것이 올바르게 설정되어 있다면, 보안 위반 없이 원격 SWF에서 클래스를 로드할 수 있어야 합니다.

추가 자료

자세한 이해를 위해 Adobe의 Flash 보안에 대한 방대한 문서를 참조할 수 있습니다. 특히 Flash Player 보안 및 교차 스크립팅을 다루는 27장인 Adobe Flex 3 Programming ActionScript 3 PDF를 확인해 보세요.

결론

보안 샌드박스 위반에 직면하는 것은 실망스러울 수 있으며, 애플리케이션의 기능을 향상시키기 위한 기능을 구현할 때 더욱 그렇습니다. 다행히도 Security.allowDomain() 메서드를 사용하면 이러한 제한을 우회하고 서로 다른 도메인 간의 원활한 통신을 가능하게 할 수 있습니다. 신중하게 구현하고 신뢰할 수 있는 도메인에만 접근 권한을 부여하면 성공적인 통합을 이루어낼 수 있습니다.

안전한 코딩 관행은 연결된 환경에서 애플리케이션의 무결성을 유지하기 위해 필수적입니다.