신뢰할 수 없는 내용과 안전하게 작업

Adobe AIR 1.0 이상

응용 프로그램 샌드박스에 할당되지 않은 내용은 런타임의 보안 기준에 맞는 경우에만 응용 프로그램에 추가 스크립팅 기능을 제공할 수 있습니다. 이 항목에서는 비 응용 프로그램 내용을 포함하는 AIR 보안 계약에 대해 설명합니다.

Security.allowDomain()

AIR 응용 프로그램은 Flash Player 브라우저 플러그인에서 신뢰할 수 없는 내용에 대한 스크립팅 액세스를 제한하는 것보다 더 엄격하게 비 응용 프로그램 내용에 대한 스크립팅 액세스를 제한합니다. 예를 들어 브라우저의 Flash Player에서 local-trusted 샌드박스에 할당된 SWF 파일이 System.allowDomain() 메서드를 호출하는 경우 지정된 도메인에서 로드된 모든 SWF에 스크립팅 액세스 권한이 부여됩니다. AIR 응용 프로그램의 응용 프로그램 내용에서 유사한 접근 방식이 허용되지 않습니다. 그 이유는 사용자 파일 시스템에 비 응용 프로그램 파일에 대한 비정상적인 액세스 권한을 부여하기 때문입니다. 원격 파일은 Security.allowDomain() 메서드에 대한 호출에 상관없이 응용 프로그램 샌드박스에 직접 액세스할 수 없습니다.

응용 프로그램 내용과 비 응용 프로그램 내용 간 스크립팅

응용 프로그램 내용과 비 응용 프로그램 내용 간을 스크립팅하는 AIR 응용 프로그램의 보안 배열은 다소 복잡합니다. 응용 프로그램 샌드박스에 없는 파일만 샌드박스 브리지를 사용하여 응용 프로그램 샌드박스에 있는 파일의 속성 및 메서드에 액세스할 수 있습니다. 샌드박스 브리지는 응용 프로그램 내용과 비 응용 프로그램 내용 간 게이트웨이로 사용되어 두 파일 간의 명시적인 상호 작용을 제공합니다. 샌드박스 브리지는 올바르게 사용되는 경우 추가 보안 계층을 제공하여 비 응용 프로그램 내용이 응용 프로그램 내용에 포함된 객체 참조에 액세스하지 못하도록 지정합니다.

샌드박스 브리지의 장점은 예제에 가장 잘 설명되어 있습니다. AIR music store 응용 프로그램이 저장소 응용 프로그램이 통신할 수 있는 자체 SWF 파일을 만들려고 하는 광고자에게 API를 제공하려고 합니다. 저장소는 광고자에게 저장소에서 아티스트와 CD를 조회하는 메서드를 제공할 뿐만 아니라 보안을 위해 타사 SWF 파일의 일부 메서드 및 속성을 격리하려고 합니다.

샌드박스 브리지가 이러한 기능을 제공할 수 있습니다. 기본적으로 런타임에 AIR 응용 프로그램에 외부적으로 로드된 내용은 주 응용 프로그램의 메서드 또는 속성에 액세스할 수 없습니다. 개발자는 사용자 정의 샌드박스 브리지 구현을 통해 이러한 메서드 또는 속성을 표시하지 않고 원격 내용에 서비스를 제공할 수 있습니다. 샌드박스 브리지를 신뢰할 수 있는 내용과 신뢰할 수 없는 내용 간 통로로 사용하여 객체 참조를 표시하지 않고 로더와 로드되는 내용 간 통신을 제공할 수 있도록 합니다.

샌드박스 브리지를 안전하게 사용하는 방법에 대한 자세한 내용은 다른 도메인의 내용 간 스크립팅을 참조하십시오.

동적으로 생성되는 안전하지 않은 SWF 내용 보호

Loader.loadBytes() 메서드는 응용 프로그램이 바이트 배열에서 SWF 내용을 생성하는 방법을 제공합니다. 그러나 원격 소스에서 로드한 데이터에 대한 삽입 공격은 내용을 로드할 때 심각한 손상을 일으킬 수 있습니다. 이러한 손상은 특히 생성된 SWF 내용이 전체 AIR API 집합에 액세스할 수 있는 응용 프로그램 샌드박스로 데이터를 로드할 때 발생합니다.

실행 SWF 코드를 생성하지 않고 loadBytes() 메서드를 이용하는 합법적인 사용이 있습니다. 예를 들어 loadBytes() 메서드를 사용하여 이미지 표시의 타이밍을 제어하는 이미지 데이터를 생성할 수 있습니다. 오디오 재생을 위한 SWF 내용의 동적 생성과 같이 실행 중인 코드를 이용하는 합법적인 사용도 있습니다. AIR에서 기본적으로 loadBytes() 메서드는 사용자가 SWF 내용을 로드하도록 허용하지 않고 사용자가 이미지 내용만 로드하도록 허용합니다. AIR에서 loadBytes() 메서드의 loaderContext 속성은 allowLoadBytesCodeExecution 속성을 포함합니다. 사용자는 이 속성을 true로 설정하여 응용 프로그램이 loadBytes()를 사용하여 실행 SWF 내용을 로드하도록 명시적으로 허용할 수 있습니다. 다음 코드에서는 이 기능을 사용하는 방법을 보여 줍니다.

var loader:Loader = new Loader(); 
var loaderContext:LoaderContext = new LoaderContext(); 
loaderContext.allowLoadBytesCodeExecution = true; 
loader.loadBytes(bytes, loaderContext);

loadBytes()를 호출하여 SWF 내용을 로드하고 LoaderContext 객체의 allowLoadBytesCodeExecution 속성을 false(기본값)로 설정하면 Loader 객체에서 SecurityError 예외가 발생합니다.

참고: Adobe AIR의 이후 릴리스에서는 이 API가 변경될 수 있습니다. 그 경우 사용자는 LoaderContext 클래스의 allowLoadBytesCodeExecution 속성을 사용하는 내용을 다시 컴파일할 수 있습니다.