보안 샌드박스

Flash Player 9 이상, Adobe AIR 1.0 이상

클라이언트 컴퓨터는 외부 웹 사이트, 로컬 파일 시스템 또는 설치된 AIR 응용 프로그램 등 다양한 소스로부터 코드, 내용 및 데이터를 포함하는 개별 파일을 가져올 수 있습니다. Flash Player 및 AIR 런타임은 코드 파일과 공유 객체, 비트맵, 사운드, 비디오 및 데이터 파일 등의 기타 리소스를, 이들이 로드될 때의 원래 위치를 기준으로 하여 개별적으로 보안 샌드박스에 할당합니다. 다음 단원에서는 지정된 샌드박스 내에서 실행되는 코드 또는 내용이 액세스할 수 있는 항목을 제어하는 런타임의 규칙에 대해 설명합니다.

Flash Player 보안에 대한 자세한 내용은 www.adobe.com/go/devnet_security_kr 에서 Flash Player 개발자 센터 항목 "보안"을 참조하십시오.

원격 샌드박스

Flash Player 및 AIR 런타임은 인터넷에서 가져온 에셋(SWF 파일 포함)을 원래 도메인에 해당하는 별개의 샌드박스로 분류합니다. 예를 들어 example.com 에서 로드된 에셋은 foo.org 에서 로드된 에셋과 다른 보안 샌드박스에 배치됩니다. 기본적으로 이러한 파일은 해당 서버의 모든 리소스에 대한 액세스가 허용됩니다. 원격 SWF 파일은 URL 정책 파일 및 Security.allowDomain() 메서드와 같은 명시적인 웹 사이트 및 제작자 권한을 사용하여 다른 도메인의 데이터에 추가로 액세스할 수 있습니다. 자세한 내용은 웹 사이트 컨트롤(정책 파일) 제작자(개발자) 컨트롤 을 참조하십시오.

원격 SWF 파일에서는 로컬 파일이나 리소스를 로드할 수 없습니다.

Flash Player 보안에 대한 자세한 내용은 www.adobe.com/go/devnet_security_kr 에서 Flash Player 개발자 센터 항목 "보안"을 참조하십시오.

로컬 샌드박스

로컬 파일 file: 프로토콜이나 UNC(Universal Naming Convention) 경로를 사용하여 참조되는 모든 파일을 의미합니다. 로컬 SWF 파일은 다음 네 개의 로컬 샌드박스 중 하나에 배치됩니다.

  • local-with-filesystem 샌드박스 - 보안을 위해 Flash Player 및 AIR 런타임은 모든 로컬 파일을 기본적으로 local-with-file-system 샌드박스에 배치합니다. 이 샌드박스에서 실행 가능 코드는 URLLoader 클래스 등을 사용하여 로컬 파일을 읽을 수 있지만, 네트워크와는 어떤 방식으로도 통신할 수 없습니다. 사용자는 로컬 데이터가 네트워크로 누출되거나 다른 방식으로 부적절하게 공유되지 않는다는 확신을 가질 수 있습니다.

  • local-with-networking 샌드박스 - SWF 파일을 컴파일할 때, 로컬 파일로 실행되지만 네트워크 액세스가 가능하도록 지정할 수 있습니다( 로컬 SWF 파일의 샌드박스 유형 설정 참조). 이러한 파일은 local-with-networking 샌드박스에 배치됩니다. local-with-networking 샌드박스에 할당된 SWF 파일에서는 해당 로컬 파일에 액세스할 수 없습니다. 대신, SWF 파일은 네트워크의 데이터에 액세스할 수 있습니다. 하지만 URL 정책 파일이나 Security.allowDomain() 메서드에 대한 호출을 통해 권한이 부여되지 않는 한 local-with-networking SWF 파일은 여전히 네트워크의 데이터를 읽을 수 없습니다. 이러한 권한을 부여하려면 URL 정책 파일에서 <allow-access-from domain="*"/> 또는 Security.allowDomain("*") 을 사용하여 모든 도메인에 권한을 부여해야 합니다. 자세한 내용은 웹 사이트 컨트롤(정책 파일) 제작자(개발자) 컨트롤 을 참조하십시오.

  • local-trusted 샌드박스 - 사용자나 설치 프로그램에 의해 신뢰할 수 있는 파일로 등록된 로컬 SWF 파일은 local-trusted 샌드박스에 배치됩니다. 시스템 관리자와 사용자는 보안 고려 사항에 따라 local-trusted 샌드박스에 또는 해당 샌드박스로부터 로컬 SWF 파일을 재할당하거나 이동할 수도 있습니다( 관리자 컨트롤 사용자 컨트롤 참조). local-trusted 샌드박스에 할당된 SWF 파일은 다른 SWF 파일과 상호 작용하고 원격이나 로컬의 모든 위치에서 데이터를 로드할 수 있습니다.

  • AIR 응용 프로그램 샌드박스 - 이 샌드박스에는 실행 중인 AIR 응용 프로그램과 함께 설치된 내용이 들어 있습니다. 기본적으로 AIR 응용 프로그램 샌드박스에서 실행되는 코드는 모든 도메인의 코드를 크로스 스크립팅할 수 있습니다. 그러나 AIR 응용 프로그램 샌드박스 외부의 파일은 응용 프로그램 샌드박스의 코드를 크로스 스크립팅할 수 없습니다. 기본적으로 AIR 응용 프로그램 샌드박스의 코드 및 내용은 도메인에서 내용과 데이터를 로드할 수 있습니다.

local-with-networking과 local-with-filesystem 샌드박스 간의 통신은 물론 local-with-filesystem과 원격 샌드박스 간의 통신이 엄격하게 금지됩니다. Flash Player에서 실행되는 응용 프로그램이나 사용자 또는 관리자는 이러한 통신을 허용하는 권한을 부여할 수 없습니다.

어느 방향으로든 로컬 HTML 파일과 로컬 SWF 파일 간에 스크립팅하려면(예: ExternalInterface 클래스 사용) 관련 HTML 파일과 로컬 SWF 파일이 모두 local-trusted 샌드박스에 있어야 합니다. 이것은 브라우저의 로컬 보안 모델이 Flash Player 로컬 보안 모델과 다르기 때문입니다.

local-with-networking 샌드박스의 SWF 파일은 local-with-filesystem 샌드박스의 SWF 파일을 로드할 수 없습니다. local-with-filesystem 샌드박스의 SWF 파일은 local-with-networking 샌드박스의 SWF 파일을 로드할 수 없습니다.

AIR 응용 프로그램 샌드박스

Adobe AIR 런타임은 application 샌드박스라는 추가 샌드박스를 Flash Player 보안 샌드박스 모델에 추가합니다. AIR 응용 프로그램의 일부로 설치된 파일은 응용 프로그램 샌드박스에 로드됩니다. 응용 프로그램에서 로드된 다른 모든 파일의 보안 제한은 일반적인 Flash Player 보안 모델에서 지정한 제한 사항을 따릅니다.

응용 프로그램이 설치되면 AIR 패키지 내에 포함된 모든 파일이 사용자 컴퓨터의 응용 프로그램 디렉토리에 설치됩니다. 개발자는 app:/ URL 스킴을 통해 코드에서 이 디렉토리를 참조할 수 있습니다( URI 스킴 참조). 응용 프로그램이 실행하면 응용 프로그램 디렉토리 트리 내의 모든 파일이 응용 프로그램 샌드박스에 할당됩니다. 응용 프로그램 샌드박스의 내용은 로컬 파일 시스템과의 상호 작용을 포함하여 AIR 응용 프로그램에서 사용할 수 있는 전체 권한으로 보호됩니다.

많은 AIR 응용 프로그램에서는 로컬로 설치된 이러한 파일만 사용하여 응용 프로그램을 실행합니다. 그러나 AIR 응용 프로그램은 응용 프로그램 디렉토리 내의 파일만 제한하지 않고 모든 소스에서 파일 유형을 로드할 수 있습니다. 이러한 파일에는 사용자 컴퓨터에 대한 로컬 파일은 물론 로컬 네트워크 또는 인터넷에서의 소스와 같이 사용 가능한 외부 소스에서 가져온 파일도 포함됩니다. 파일 유형은 보안 제한 사항에는 영향을 주지 않습니다. 로드된 HTML 파일의 보안 권한은 동일한 소스에서 로드한 SWF 파일의 보안 권한과 동일합니다.

응용 프로그램 보안 샌드박스의 내용은 다른 샌드박스의 내용 사용을 금지하는 AIR API에 액세스할 수 있습니다. 예를 들어 응용 프로그램에 대한 응용 프로그램 설명자 파일의 내용을 반환하는 air.NativeApplication.nativeApplication.applicationDescriptor 속성은 응용 프로그램 보안 샌드박스의 내용에만 적용됩니다. 제한된 API의 또 다른 예는 로컬 파일 시스템을 읽고 쓰는 메서드를 포함하는 FileStream 클래스입니다.

응용 프로그램 보안 샌드박스의 내용에만 사용할 수 있는 ActionScript API는 ActionScript 3.0 Reference for Adobe Flash Platform 에서 AIR 로고로 표시됩니다. 기타 샌드박스에서 이러한 API를 사용하면 런타임에서 SecurityError 예외가 발생합니다.

HTMLLoader 객체에 있는 HTML 내용의 경우 모든 AIR JavaScript API(AIRAliases.js 파일을 사용할 때 air 객체를 통해 또는 window.runtime 속성을 통해 사용 가능)를 응용 프로그램 보안 샌드박스의 내용에서 사용할 수 있습니다. 다른 샌드박스의 HTML 내용이 window.runtime 속성에 액세스할 수 없으므로 이 내용은 AIR 또는 Flash Player API에 액세스할 수 없습니다.

AIR 응용 프로그램 내에서 실행되는 내용은 다음과 같은 추가 제한을 가집니다.

  • 응용 프로그램 보안 샌드박스에 있는 HTML 내용의 경우 코드를 로드한 후 문자열을 실행 코드로 동적으로 변환할 수 있는 API를 사용할 때 제한 사항이 있습니다. 이는 응용 프로그램이 잠재적으로 안전하지 않은 네트워크 도메인과 같은 비 응용 프로그램 소스의 코드를 실수로 삽입 및 실행하지 않도록 하는 것입니다. 예를 들어 eval() 함수를 사용할 때 이러한 제한 사항이 적용됩니다. 자세한 내용은 서로 다른 샌드박스의 내용에 대한 코드 제한 사항 을 참조하십시오.

  • 가능한 피싱 공격을 막기 위해 ActionScript TextField 객체에 있는 HTML 내용의 img 태그가 응용 프로그램 보안 샌드박스의 SWF 내용에서 무시됩니다.

  • 응용 프로그램 샌드박스의 내용은 ActionScript 2.0 텍스트 필드의 HTML 내용에 asfunction 프로토콜을 사용할 수 없습니다.

  • 응용 프로그램 샌드박스의 SWF 내용은 Flash Player 9 업데이트 3에 추가된 기능인 크로스 도메인 캐시를 사용할 수 없습니다. 이 기능을 통해 Flash Player에서는 Adobe 플랫폼 구성 요소 내용을 영구적으로 캐시하고 필요 시 로드된 SWF 내용에서 다시 사용할 수 있습니다. 이 경우 내용을 여러 번 다시 로드할 필요가 없습니다.

AIR 내부의 JavaScript에 대한 제한

응용 프로그램 보안 샌드박스의 내용과 달리 비 응용 프로그램 보안 샌드박스의 JavaScript 내용은 eval() 함수를 호출하여 동적으로 생성된 코드를 언제든지 실행할 수 있습니다 . 하지만 AIR 내의 비 응용 프로그램 보안 샌드박스에서 실행되는 JavaScript에는 제한이 있습니다. 그 중 일부는 다음과 같습니다.

  • 비 응용 프로그램 샌드박스의 JavaScript 코드에서는 window.runtime 객체에 액세스할 수 없으며 그러므로 이 코드에서 AIR API를 실행할 수 없습니다.

  • 기본적으로 비 응용 프로그램 보안 샌드박스의 내용은 XMLHttpRequest 호출을 사용하여 요청을 호출하는 도메인 이외의 다른 도메인에서 데이터를 로드할 수 없습니다. 그러나 응용 프로그램 코드는 포함하는 프레임 또는 iframe에서 allowCrossdomainXHR 특성을 설정하여 이를 수행하도록 비 응용 프로그램 내용 권한을 부여할 수 있습니다. 자세한 내용은 서로 다른 샌드박스의 내용에 대한 코드 제한 사항 을 참조하십시오.

  • JavaScript window.open() 메서드 호출에 대한 제한 사항이 있습니다. 자세한 내용은 JavaScript window.open() 메서드 호출에 대한 제한 사항 을 참조하십시오.

  • 원격(네트워크) 보안 샌드박스의 HTML 내용은 원격 도메인(네트워크 URL)에서 CSS, frame , iframe img 내용을 로드할 수만 있습니다.

  • local-with-filesystem, local-with-networking 또는 local-trusted 샌드박스의 HTML 내용은 응용 프로그램 또는 네트워크 URL이 아닌 로컬 샌드박스에서 CSS, frame , iframe img 내용을 로드할 수만 있습니다.

자세한 내용은 서로 다른 샌드박스의 내용에 대한 코드 제한 사항 을 참조하십시오.

로컬 SWF 파일의 샌드박스 유형 설정

컴퓨터의 최종 사용자나 관리자는 로컬 SWF 파일을 신뢰할 수 있는 파일로 지정하여 해당 파일에서 로컬과 네트워크의 모든 도메인에 있는 데이터를 로드하도록 할 수 있습니다. 이것은 전역 Flash Player Trust 및 사용자 Flash Player Trust 디렉토리에 지정됩니다. 자세한 내용은 관리자 컨트롤 사용자 컨트롤 을 참조하십시오.

로컬 샌드박스에 대한 자세한 내용은 로컬 샌드박스 를 참조하십시오.

Adobe Flash Professional

제작 도구에서 문서의 제작 설정을 설정함으로써 local-with-filesystem 샌드박스 또는 local-with-networking 샌드박스에 대해 SWF 파일을 구성할 수 있습니다.

Adobe Flex

Adobe Flex 컴파일러에서 use-network 플래그를 설정하여 local-with-filesystem 샌드박스 또는 local-with-networking 샌드박스에 대해 SWF 파일을 구성할 수 있습니다. 자세한 내용은 Adobe Flex 3 응용 프로그램 작성 및 배포 의 "응용 프로그램 컴파일러 옵션 정보"를 참조하십시오.

Security.sandboxType 속성

SWF 파일의 제작자는 읽기 전용의 정적 Security.sandboxType 속성을 사용하여 Flash Player 또는 AIR 런타임이 SWF 파일에 할당한 샌드박스의 유형을 확인할 수 있습니다. Security 클래스에는 다음과 같이 Security.sandboxType 속성의 가능한 값을 나타내는 상수가 포함되어 있습니다.

  • Security.REMOTE - 인터넷 URL에서 가져온 SWF 파일이며 도메인 기반 샌드박스 규칙에 따라 작동합니다.

  • Security.LOCAL_WITH_FILE - 로컬 SWF 파일이지만 사용자가 신뢰하지 않았고 네트워킹이 지정되지 않았습니다. 이 SWF 파일은 로컬 데이터 소스에서 읽을 수 있지만 인터넷과 통신할 수 없습니다.

  • Security.LOCAL_WITH_NETWORK - 로컬 SWF 파일이고 사용자가 신뢰하지 않았지만 네트워킹이 지정되었습니다. 이 SWF 파일은 인터넷과 통신할 수 있지만 로컬 데이터 소스에서 읽을 수는 없습니다.

  • Security.LOCAL_TRUSTED - 로컬 SWF 파일이고 설정 관리자나 Flash Player 신뢰 구성 파일을 사용하여 사용자가 신뢰한 파일입니다. 이 SWF 파일은 로컬 데이터 소스에서 읽을 수 있고 인터넷과 통신할 수 있습니다.

  • Security.APPLICATION - SWF 파일은 AIR 응용 프로그램에서 실행되고 있고 해당 응용 프로그램용 패키지(AIR 파일)와 함께 설치되었습니다. 기본적으로 AIR 응용 프로그램 샌드박스의 파일은 모든 도메인의 임의 파일을 크로스 스크립팅할 수 있습니다. 그러나 AIR 응용 프로그램 샌드박스 외부의 파일은 AIR 파일을 크로스 스크립팅할 수 없습니다. 기본적으로 AIR 응용 프로그램 샌드박스의 파일은 도메인에서 내용과 데이터를 로드할 수 있습니다.