Flash CS3 설명서 |
|||
| ActionScript 3.0 프로그래밍 > Flash Player 보안 > 권한 컨트롤 개요 | |||
Flash Player 클라이언트 런타임 보안 모델은 리소스를 중심으로 설계되어 있으며, 이러한 리소스는 SWF 파일, 로컬 데이터 및 인터넷 URL 등의 객체입니다. 이러한 리소스를 소유하거나 사용하는 관계자는 자신이 소유한 리소스에 대해 컨트롤(보안 설정)을 실행할 수 있습니다. 각 리소스에는 네 명의 관계자가 있습니다. Flash Player에서는 다음 그림과 같이 컨트롤에 대해 권한 계층 구조를 엄격하게 적용합니다.
보안 컨트롤 계층 구조
예를 들어, 관리자가 리소스에 대한 액세스를 제한하면 다른 관계자가 해당 제한을 무시할 수 없습니다.
관리자, 사용자 및 웹 사이트 컨트롤은 다음 단원에서 자세히 설명합니다. 제작자(개발자) 설정은 이 장의 뒷부분에 설명되어 있습니다.
컴퓨터에 관리자 권한으로 로그인한 관리자의 경우 해당 컴퓨터의 다른 모든 사용자에게 영향을 주는 Flash Player 보안 설정을 적용할 수 있습니다. 가정용 컴퓨터와 같이 엔터프라이즈 환경이 아닌 컴퓨터에는 보통 한 명의 사용자가 관리자 권한도 가지고 있습니다. 엔터프라이즈 환경에서도 개별 사용자가 컴퓨터에 대해 관리자 권한을 가질 수 있습니다.
관리자 컨트롤에는 다음 두 가지 유형이 있습니다.
mms.cfg 파일은 Mac OS X 시스템인 경우 /Library/Application Support/Macromedia/mms.cfg에 있고, Microsoft Windows 시스템인 경우 시스템 디렉토리의 Macromedia Flash Player 폴더에 있습니다(예: 기본 Windows XP 설치인 경우 C:\windows\system32\macromed\flash\mms.cfg).
Flash Player를 시작하면 이 파일의 보안 설정을 읽어 기능을 제한하는 데 사용합니다.
mms.cfg 파일에는 다음과 같은 작업을 수행하기 위해 관리자가 사용하는 설정이 포함되어 있습니다.
SWF 파일은 Capabilities.avHardwareDisable 및 Capabilities.localFileReadDisable 속성을 호출하여 비활성화된 기능에 대한 일부 정보를 액세스할 수 있습니다. 그러나 mms.cfg 파일의 설정 대부분은 ActionScript에서 쿼리할 수 없습니다.
컴퓨터에 응용 프로그램과 무관한 보안 및 개인 정보 보호 정책을 적용하려면 시스템 관리자가 mms.cfg 파일을 수정해야 합니다. 응용 프로그램의 설치 관리자에서는 mms.cfg 파일을 사용할 수 없습니다. 관리자 권한으로 실행되는 설치 관리자는 mms.cfg 파일의 내용을 수정할 수 있지만, Adobe는 이러한 사용을 사용자의 신뢰 위반으로 간주하고 설치 프로그램 작성자에게 mms.cfg 파일을 수정하지 않도록 권고합니다.
관리자 및 설치 프로그램은 지정된 로컬 SWF 파일을 신뢰할 수 있는 파일로 등록할 수 있습니다. 이러한 SWF 파일은 local-trusted 샌드박스에 할당되며, 다른 SWF 파일과 상호 작용하고 원격이나 로컬의 모든 위치에서 데이터를 로드할 수 있습니다. 파일은 다음 위치에서 mms.cfg 파일과 동일한 디렉토리에 있는 Global Flash Player Trust 디렉토리에 신뢰할 수 있는 파일로 지정됩니다(위치는 현재 사용자에 따라 다름).
(예: C:\windows\system32\Macromed\Flash\FlashPlayerTrust)
(예: /Library/Application Support/Macromedia/FlashPlayerTrust)
Flash Player Trust 디렉토리에는 텍스트 파일을 무제한으로 포함할 수 있으며 각 텍스트 파일에는 신뢰할 수 있는 경로가 한 줄에 하나씩 나열되어 있습니다. 각 경로는 개별 SWF 파일, HTML 파일 또는 디렉토리일 수 있습니다. 주석 행은 # 심볼로 시작됩니다. 예를 들어, 다음과 같은 텍스트가 포함된 Flash Player 신뢰 구성 파일은 지정된 디렉토리 및 모든 하위 디렉토리의 모든 파일에 대해 신뢰 상태를 부여합니다.
# Trust files in the following directories: C:\Documents and Settings\All Users\Documents\SampleApp
신뢰 구성 파일에 나열된 경로는 항상 로컬 경로나 SMB 네트워크 경로여야 합니다. 신뢰 구성 파일의 모든 HTTP 경로는 무시되며, 로컬 파일만 신뢰할 수 있습니다.
충돌을 피하려면 각 신뢰 구성 파일에 설치 응용 프로그램에 해당하는 파일 이름을 부여하고 .cfg 파일 확장명을 사용합니다.
설치 프로그램을 통해 로컬로 실행되는 SWF 파일을 배포하려는 개발자의 경우, 설치 프로그램에서 Global Flash Player Trust 디렉토리에 구성 파일을 추가하도록 함으로써, 배포하는 파일에 전체 권한을 부여할 수 있습니다. 이때, 설치 프로그램은 관리자 권한이 있는 사용자가 실행해야 합니다. mms.cfg 파일과 달리 Global Flash Player Trust 디렉토리는 신뢰 권한을 부여하기 위한 목적으로 설치 프로그램에 포함될 수 있습니다. 관리자와 설치 프로그램 모두 Global Flash Player Trust 디렉토리를 사용하여 신뢰할 수 있는 로컬 응용 프로그램을 지정할 수 있습니다.
또한 개별 사용자를 위한 Flash Player Trust 디렉토리도 있습니다(다음 단원, 사용자 컨트롤 참조).
Flash Player에서는 권한 설정에 대해 설정 UI, 설정 관리자 및 User Flash Player Trust 디렉토리의 서로 다른 세 가지의 사용자 수준 메커니즘을 제공합니다.
설정 UI는 특정 도메인의 설정을 구성하는 빠른 대화형 메커니즘입니다. 설정 관리자는 보다 자세한 인터페이스와 많은 도메인이나 전체 도메인의 권한에 영향을 주는 글로벌 변경 기능을 제공합니다. 또한 SWF 파일에서 새로운 권한을 요청할 때 보안 또는 개인 정보에 대해 런타임 의사 결정이 필요한 경우, 사용자가 일부 Flash Player 설정을 조정할 수 있는 대화 상자가 표시됩니다.
설정 관리자 및 설정 UI에서는 다음과 같은 보안 관련 옵션을 제공합니다.
|
중요 |
|
mms.cfg 파일에 지정된 모든 설정(관리자 컨트롤 참조)은 설정 관리자에 반영되지 않습니다. |
설정 관리자에 대한 자세한 내용은 www.adobe.com/go/settingsmanager_kr을 참조하십시오.
사용자 및 설치 프로그램은 지정된 로컬 SWF 파일을 신뢰할 수 있는 파일로 등록할 수 있습니다. 이러한 SWF 파일은 local-trusted 샌드박스에 할당되며, 다른 SWF 파일과 상호 작용하고 원격이나 로컬의 모든 위치에서 데이터를 로드할 수 있습니다. 사용자는 다음 위치에서 Flash 공유 객체 저장 영역과 동일한 디렉토리에 있는 User Flash Player Trust 디렉토리에 신뢰할 수 있는 파일로 지정합니다(위치는 현재 사용자에 따라 다름).
(예: C:\Documents and Settings\JohnD\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust)
(예: /Users/JohnD/Library/Preferences/Macromedia/Flash Player/#Security/FlashPlayerTrust)
이러한 설정은 현재 사용자에게만 영향을 주며 컴퓨터에 로그인한 다른 사용자에게는 적용되지 않습니다. 관리자 권한이 없는 사용자가 시스템의 자체 소유 부분에 응용 프로그램을 설치한 경우, 설치 관리자에서 User Flash Player Trust 디렉토리에 이 응용 프로그램을 해당 사용자에 대해 신뢰할 수 있는 것으로 등록할 수 있습니다.
설치 프로그램을 통해 로컬로 실행되는 SWF 파일을 배포하는 개발자의 경우, 설치 프로그램에서 User Flash Player Trust 디렉토리에 구성 파일을 추가하도록 함으로써 배포하는 파일에 전체 권한을 부여할 수 있습니다. 이런 경우에도 User Flash Player Trust 디렉토리 파일이 사용자 컨트롤로 간주되며, 이는 사용자 액션(설치)으로 시작되기 때문입니다.
또한 관리자나 설치 프로그램에서 Global Flash Player Trust 디렉토리를 사용하여 컴퓨터의 모든 사용자에 대해 응용 프로그램을 등록할 수 있습니다(관리자 컨트롤 참조).
웹 서버의 데이터를 다른 도메인의 SWF 파일에서 사용할 수 있도록 하기 위해 사용자 서버에 크로스 도메인 정책 파일을 작성할 수 있습니다. 크로스 도메인 정책 파일은 특정 또는 모든 도메인에서 제공되는 SWF 파일에서 해당 서버의 데이터나 문서를 사용할 수 있음을 나타내기 위해 사용되는 XML 파일입니다. 서버의 정책 파일에 지정된 도메인에서 제공되는 SWF 파일은 해당 서버의 데이터나 에셋에 대한 액세스가 허용됩니다.
크로스 도메인 정책 파일은 다음을 포함하여 많은 에셋에 대한 액세스에 영향을 줍니다.
자세한 사항은 이 장의 뒷부분에 설명되어 있습니다.
다음 예제는 *.example.com, www.friendOfExample.com 및 192.0.34.166에서 시작되는 SWF 파일에 대한 액세스를 허용하는 정책 파일을 보여 줍니다.
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*.example.com" />
<allow-access-from domain="www.friendOfExample.com" />
<allow-access-from domain="192.0.34.166" />
</cross-domain-policy>
SWF 파일에서 다른 도메인의 데이터에 액세스하려고 하면 Flash Player는 자동으로 해당 도메인에서 정책 파일을 로드하려고 시도합니다. 액세스하려는 SWF 파일의 도메인이 정책 파일에 포함되어 있으면 자동적으로 데이터에 액세스할 수 있게 됩니다.
기본적으로 crossdomain.xml이라는 이름의 정책 파일이 해당 서버의 루트 디렉토리에 상주해야 합니다. 하지만 SWF 파일에서 Security.loadPolicyFile() 메서드를 호출하여 다른 이름 또는 다른 디렉토리 위치를 확인할 수 있습니다. 크로스 도메인 정책 파일은 정책 파일이 로드되어 있는 디렉토리와 해당 하위 디렉토리에만 적용됩니다. 따라서 루트 디렉토리에 있는 정책 파일은 전체 서버에 적용되지만 임의의 하위 디렉토리에서 로드된 정책 파일은 해당 디렉토리와 하위 디렉토리에만 적용됩니다.
정책 파일은 해당 파일이 상주하는 특정 서버에 대한 액세스에만 영향을 줍니다. 예를 들어, https://www.adobe.com:8080/crossdomain.xml에 있는 정책 파일은 8080 포트에서 HTTPS를 통해 www.macromedia.com에 수행된 데이터 로드 호출에만 적용됩니다.
크로스 도메인 정책 파일에는 0개 이상의 <allow-access-from> 태그가 포함된 단일 <cross-domain-policy> 태그가 들어 있습니다. 각 <allow-access-from> 태그에는 domain이라는 속성이 있습니다. 이 속성은 정확한 IP 주소, 정확한 도메인 또는 와일드카드 도메인(임의의 도메인)을 지정합니다. 와일드카드 도메인은 모든 도메인과 IP 주소를 나타내는 경우 단일 별표(*) 또는 특정 접미어로 끝나는 도메인을 나타내는 경우 접미어가 뒤에 붙은 별표로 표현됩니다. 접미어는 점으로 시작해야 합니다. 그러나, 접미어가 붙은 와일드카드 도메인은 앞에 오는 점을 제외한 접미어만으로 구성되는 도메인을 나타낼 수 있습니다. 예를 들어, foo.com은 *.foo.com에 속한 것으로 생각할 수 있습니다. 와일드카드는 IP 도메인 형식에 사용할 수 없습니다.
IP 주소를 지정하면 IP 구문(예: http://65.57.83.12/flashmovie.swf)을 사용하여 해당 IP 주소에서 로드된 SWF에만 액세스 권한이 부여됩니다. 이 경우 도메인 이름 구문을 사용하여 로드된 SWF에는 액세스 권한이 부여되지 않습니다. Flash Player는 DSN 이름 확인을 수행하지 않습니다.
다음 예제와 같이 모든 도메인의 문서에 액세스할 수 있도록 허용할 수 있습니다.
<?xml version="1.0"?> <!-- http://www.foo.com/crossdomain.xml --> <cross-domain-policy> <allow-access-from domain="*" /> </cross-domain-policy>
각 <allow-access-from> 태그에는 선택 사항인 secure 속성이 포함될 수 있으며 기본값은 true입니다. 정책 파일이 HTTPS 서버에 있을 경우 HTTPS가 아닌 서버의 SWF 파일이 HTTPS 서버에서 데이터를 로드할 수 있도록 허용하려면 이 속성을 false로 설정합니다.
secure 속성을 false로 설정하면 HTTPS에서 제공하는 보안 기능이 약화될 수 있습니다. 특히 이 속성을 false로 설정하면 보안 내용이 열려서 스누핑(snooping) 및 스푸핑(spoofing) 공격에 취약해집니다. 따라서 secure 속성을 false로 설정하지 않아야 합니다.
로드할 데이터가 HTTPS 서버에 있고, 해당 데이터를 로드하는 SWF 파일이 HTTP 서버에 있는 경우에는 로드하는 SWF 파일을 HTTPS 서버로 이동하여 HTTPS의 보호 하에 보안 데이터의 모든 복사본을 보관하는 것이 좋습니다. 그러나 로드하는 SWF 파일을 HTTP 서버에 두기로 결정한 경우에는 다음 코드에 표시된 대로 secure="false" 속성을 <allow-access-from> 태그에 추가합니다.
<allow-access-from domain="www.example.com" secure="false" />
정책 파일에 <allow-access-from> 태그가 없으면 서버에 정책이 없는 것과 동일한 결과가 발생합니다.
ActionScript 객체는 문서 기반 서버 연결 및 소켓 연결의 서로 다른 두 종류의 서버 연결을 인스턴스화합니다. Loader, Sound, URLLoader 및 URLStream과 같은 ActionScript 객체는 문서 기반 연결을 인스턴스화하며 각각은 URL에서 파일을 로드합니다. ActionScript Socket 및 XMLSocket 객체는 소켓 연결을 만들어 로드된 문서가 아니라 스트리밍 데이터로 작업합니다. Flash Player에서는 문서 기반 정책 파일과 소켓 정책 파일의 두 종류의 정책 파일을 지원합니다. 문서 기반 연결에는 문서 기반 정책 파일이 필요하고 소켓 연결에는 소켓 정책 파일이 필요합니다.
Flash Player에서는 정책 파일을 전송할 때 연결 시도에서 사용하려는 프로토콜과 동일한 프로토콜을 사용해야 합니다. 예를 들어, 정책 파일이 HTTP 서버에 있는 경우 다른 도메인의 SWF 파일은 HTTP 서버로 데이터를 로드할 수 있습니다. 하지만 동일한 서버에 소켓 파일을 제공하지 않으면 다른 도메인의 SWF 파일에서 소켓 수준의 서버에 연결할 수 없게 됩니다. 소켓 정책 파일을 가져올 때는 연결할 때와 같은 방법을 사용해야 합니다.
소켓 서버에서 제공하는 정책 파일은 액세스가 허용되는 포트를 지정해야 한다는 점을 제외하고 다른 정책 파일과 동일한 구문을 사용합니다. 1024보다 낮은 포트에서 제공되는 정책 파일에서는 모든 포트에 액세스를 허용할 수 있고, 1024 이상의 포트에서 제공되는 정책 파일에서는 1024 이상의 포트에만 액세스를 허용할 수 있습니다. 허용되는 포트는 <allow-access-from> 태그의 to-ports 속성에 지정됩니다. 단일 포트 번호, 포트 범위 및 와일드카드가 모두 허용되는 값입니다.
XMLSocket 정책 파일의 예는 다음과 같습니다.
<cross-domain-policy> <allow-access-from domain="*" to-ports="507" /> <allow-access-from domain="*.example.com" to-ports="507,516" /> <allow-access-from domain="*.example2.com" to-ports="516-523" /> <allow-access-from domain="www.example2.com" to-ports="507,516-523" /> <allow-access-from domain="www.example3.com" to-ports="*" /> </cross-domain-policy>
정책 파일이 처음으로 Flash Player 6에 도입되었을 때는 소켓 정책 파일이 지원되지 않았습니다. 따라서 소켓 서버에 대한 연결은 소켓 서버와 동일한 호스트의 포트 80에 있는 HTTP 서버의 크로스 도메인 정책 파일의 기본 위치에 있는 정책 파일에 의해 허가되었습니다. Flash Player 9에서는 기존의 서버 연결 방식을 보존하기 위해 이 기능을 지원합니다. 그러나 이제 Flash Player에서는 기본적으로 소켓 연결과 동일한 포트에 있는 소켓 정책 파일을 가져옵니다. HTTP 기반 정책 파일을 사용하여 소켓 연결을 허가하려면 다음과 같은 코드를 사용하여 명시적으로 HTTP 정책 파일을 요청해야 합니다.
Security.loadPolicyFile("http://socketServerHost.com/crossdomain.xml")
또한 소켓 연결을 허가하려면 HTTP 정책 파일을 다른 HTTP 위치가 아닌 크로스 도메인 정책 파일의 기본 위치에서 가져와야 합니다. HTTP 서버에서 가져온 정책 파일은 암시적으로 1024 이상의 모든 포트에 대해 소켓 액세스를 허가하며 HTTP 정책 파일의 to-ports 속성은 무시됩니다.
소켓 정책 파일에 대한 자세한 내용은 소켓 연결을 참조하십시오.
서버에서 데이터를 로드하고 소켓에 연결하는 것은 비동기식 작업으로, Flash Player에서는 단순히 주요 작업을 시작하기 전에 크로스 도메인 정책 파일이 다운로드되기를 기다립니다. 그러나 이미지에서 픽셀 데이터를 추출하거나 사운드에서 샘플 데이터를 추출하는 것은 동기식 작업으로, 데이터를 추출하기 전에 크로스 도메인 파일을 먼저 로드해야 합니다. 미디어를 로드하는 경우에는 다음과 같이 미디어에서 크로스 도메인 정책 파일을 확인하도록 지정해야 합니다.
Loader.load() 메서드를 사용하는 경우에는 LoaderContext 객체인 context 매개 변수의 checkPolicyFile 속성을 설정합니다.<img> 태그를 사용하여 텍스트 필드에 이미지를 포함하는 경우, <img checkPolicyFile = "true" src = "example.jpg">와 같이 <img> 태그의 checkPolicyFile 속성을 "true"로 설정합니다.Sound.load() 메서드를 사용하는 경우에는 SoundLoaderContext 객체인 context 매개 변수의 checkPolicyFile 속성을 설정합니다.checkPolicyFile 속성을 설정합니다.이 매개 변수 중 하나를 설정하는 경우에는 Flash Player에서 먼저 해당 도메인에서 이미 다운로드한 모든 정책 파일을 확인합니다. 그리고 나서 Security.loadPolicyFile() 메서드에 대한 모든 대기 중인 호출을 검토하여 해당 범위 내에 있는지 확인하고 해당하는 경우 기다립니다. 그런 다음 서버의 기본 위치에서 크로스 도메인 정책 파일을 찾습니다.
보안 권한을 부여하는 데 사용되는 기본 ActionScript API는 Security.allowDomain() 메서드이며, 이 메서드를 사용하여 지정한 도메인의 SWF 파일에 권한을 부여합니다. 다음 예제에서는 SWF 파일이 www.example.com 도메인에서 제공되는 SWF 파일에 대한 액세스 권한을 부여합니다.
Security.allowDomain("www.example.com")
이 메서드는 다음과 같은 권한을 부여합니다.
Security.allowDomain() 메서드를 호출하는 주요 목적은 도메인 외부에 있는 SWF 파일에 Security.allowDomain() 메서드를 호출하는 SWF 파일을 스크립팅할 수 있는 권한을 부여하는 것입니다. 자세한 내용은 크로스 스크립팅을 참조하십시오.
Security.allowDomain() 메서드에 매개 변수로 IP 주소를 지정하더라도 지정된 IP 주소에 있는 모든 항목에 액세스가 허용되는 것은 아닙니다. 이때 해당 IP 주소에 매핑되는 도메인 이름이 아닌 URL에 지정한 IP 주소가 들어 있는 항목에만 액세스가 허용됩니다. 예를 들어, 도메인 이름 www.example.com이 IP 주소 192.0.34.166으로 매핑되는 경우 Security.allowDomain("192.0.34.166")을 호출해도 www.example.com에 액세스가 허용되지 않습니다.
"*" 와일드카드를 Security.allowDomain() 메서드로 전달하여 모든 도메인에서의 액세스를 허용할 수 있습니다. 이렇게 하면 모든 도메인의 SWF 파일에 권한이 부여되어 호출하는 SWF 파일을 스크립팅하므로 "*" 와일드카드는 주의해서 사용해야 합니다.
ActionScript에는 Security.allowInsecureDomain()이라는 두 번째 권한 부여 API가 포함되어 있습니다. 이 메서드는 Security.allowDomain() 메서드와 동일한 작용을 하지만, 보안 HTTPS 연결에 의해 제공되는 SWF 파일에서 이 메서드를 호출하는 경우에 HTTP와 같이 비보안 프로토콜에서 제공되는 다른 SWF 파일에 대해서도 호출하는 SWF 파일에 대한 액세스를 추가로 허용한다는 것이 다릅니다. 그러나 보안 프로토콜(HTTPS)의 파일과 비보안 프로토콜(HTTP 등)의 파일 간에 스크립팅을 허용하는 것은 보안상 안전하지 않습니다. 이렇게 하면 보안 내용이 열려 스누핑 및 스푸핑 공격에 취약해집니다. 이러한 공격의 작동 방식은 다음과 같습니다. Security.allowInsecureDomain() 메서드는 HTTP 연결을 통해 제공되는 SWF 파일에 대해 보안 HTTPS 데이터에 대한 액세스를 허용하므로 공격자가 HTTP 서버와 사용자 간에 끼어 들어 HTTP SWF 파일을 자신의 파일로 교체함으로써 HTTPS 데이터에 액세스할 수 있게 됩니다.
또 다른 중요한 보안 관련 메서드에는 Security.loadPolicyFile() 메서드가 있으며, 이를 통해 Flash Player는 비표준 위치에서 크로스 도메인 정책 파일을 확인합니다. 자세한 내용은 웹 사이트 컨트롤(크로스 도메인 정책 파일)을 참조하십시오.
Flash CS3
이 페이지에 의견 추가되면 전자 메일 알림 받기 | 의견 보고서
현재 페이지: http://livedocs.adobe.com/flash/9.0_kr/main/00000349.html