데이터 로드

Flash Player 9 이상, Adobe AIR 1.0 이상

Flash Player 및 AIR 내용은 서버와 데이터를 교환할 수 있습니다. 로드된 데이터가 미디어로 표시되지 않고 프로그램 객체로 직접 표시되므로, 데이터 로드 작업은 미디어 로드 작업과는 다릅니다. 일반적으로 내용은 내용이 시작된 도메인에서 데이터를 로드할 수 있습니다. 그러나 일반적으로 다른 도메인에서 데이터를 로드하려면 내용에 정책 파일이 필요합니다. 자세한 내용은 웹 사이트 컨트롤(정책 파일) 을 참조하십시오.

참고: AIR 응용 프로그램 샌드박스에서 실행되는 내용은 개발자가 의도적으로 원격 내용을 응용 프로그램 샌드박스로 가져오지 않는 한 원격 도메인에서 제공되지 않습니다. 따라서 정책 파일에서 방지하도록 설정된 공격 유형에 참여할 수 없습니다. 응용 프로그램 샌드박스의 AIR 내용은 정책 파일에서 데이터를 로드하는 데 제한이 없습니다. 그러나 다른 샌드박스에 있는 AIR 내용은 여기에 설명된 제한이 적용됩니다.

URLLoader 및 URLStream 사용

XML 파일이나 텍스트 파일과 같은 데이터를 로드할 수 있습니다. URLLoader 및 URLStream 클래스의 load() 메서드는 URL 정책 파일 권한으로 제어합니다.

load() 메서드를 사용하여 해당 메서드를 호출하는 코드의 도메인이 아닌 다른 도메인의 내용을 로드하는 경우, 런타임은 로드되는 에셋의 서버에서 URL 정책 파일을 확인합니다. 정책 파일이 있으면 로드하는 내용의 도메인에 대한 액세스가 허용되고 데이터를 로드할 수 있습니다.

소켓 연결

기본적으로 런타임에서는 포트 843에서 제공되는 소켓 정책 파일을 찾습니다. URL 정책 파일과 마찬가지로 이 파일을 마스터 정책 파일 이라고 합니다.

정책 파일이 처음으로 Flash Player 6에 도입되었을 때는 소켓 정책 파일이 지원되지 않았습니다. 따라서 소켓 서버에 대한 연결은 소켓 서버와 동일한 호스트의 포트 80에 있는 HTTP 서버의 기본 위치에 있는 정책 파일에 의해 허가되었습니다. Flash Player 9는 이 기능을 계속 지원하지만 Flash Player 10에서는 지원되지 않습니다. Flash Player 10에서는 소켓 정책 파일만 소켓 연결에 권한을 부여할 수 있습니다.

URL 정책 파일과 마찬가지로 소켓 정책 파일은 정책 파일을 서비스할 수 있는 포트를 지정하는 메타 정책 문을 지원합니다. 그러나 소켓 정책 파일에 대한 기본 메타 정책은 "master-only" 대신 "all"입니다. 즉, 마스터 정책 파일에서 보다 제한적인 설정을 지정하지 않는 한 Flash Player는 호스트의 모든 소켓에서 소켓 정책 파일을 제공할 수 있다고 가정합니다.

연결하는 소켓이 SWF 파일과 동일한 도메인에 있는 경우에도 소켓 및 XML 소켓 연결에 대한 액세스는 기본적으로 사용되지 않습니다. 다음 위치 중 하나에서 소켓 정책 파일을 제공하여 소켓 수준 액세스를 허용할 수 있습니다.

  • 포트 843(마스터 정책 파일의 위치)

  • 기본 소켓 연결과 동일한 포트

  • 기본 소켓 연결과 다른 포트

기본적으로 Flash Player는 포트 843 및 기본 소켓 연결과 동일한 포트에서 소켓 정책 파일을 찾습니다. 다른 포트에서 소켓 정책 파일을 제공하려면 SWF 파일에서 Security.loadPolicyFile() 을 호출해야 합니다.

소켓 정책 파일은 액세스가 허용되는 포트를 지정해야 한다는 점을 제외하고 URL 정책 파일과 동일한 구문을 사용합니다. 1024보다 낮은 포트에서 제공되는 소켓 정책 파일에서는 모든 포트에 액세스를 허용할 수 있고, 1024 이상의 포트에서 제공되는 정책 파일에서는 1024 이상의 포트에만 액세스를 허용할 수 있습니다. 허용되는 포트는 <allow-access-from> 태그의 to-ports 특성에 지정됩니다. 단일 포트 번호, 포트 범위 및 와일드카드가 모두 허용되는 값입니다.

소켓 정책 파일의 예는 다음과 같습니다.

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> 
<!-- Policy file for xmlsocket://socks.mysite.com --> 
<cross-domain-policy>  
    <allow-access-from domain="*" to-ports="507" />  
    <allow-access-from domain="*.example.com" to-ports="507,516" />  
    <allow-access-from domain="*.example.org" to-ports="516-523" />  
    <allow-access-from domain="adobe.com" to-ports="507,516-523" />  
    <allow-access-from domain="192.0.34.166" to-ports="*" />  
</cross-domain-policy> 

포트 843이나 기본 소켓 연결과 동일한 포트에서 소켓 정책 파일을 검색하려면 Socket.connect() 또는 XMLSocket.connect() 메서드를 호출합니다. Flash Player는 먼저 포트 843에서 마스터 정책 파일을 확인합니다. 파일이 있으면 대상 포트의 소켓 정책 파일을 차단하는 메타 정책 문이 파일에 포함되어 있는지 확인합니다. 액세스가 차단되지 않은 경우 Flash Player는 먼저 마스터 정책 파일에서 적합한 allow-access-from 문을 찾습니다. 파일이 없으면 Flash Player는 주 소켓 연결과 동일한 포트에서 소켓 정책 파일을 찾습니다.

다른 위치에서 소켓 정책 파일을 검색하려면 먼저 다음과 같이 특수 "xmlsocket" 구문을 사용하여 Security.loadPolicyFile() 메서드를 호출합니다.

Security.loadPolicyFile("xmlsocket://server.com:2525"); 

Security.loadPolicyFile() 메서드를 Socket.connect() 또는 XMLSocket.connect() 메서드보다 먼저 호출합니다. 그러면 Flash Player은 정책 파일 요청이 수행될 때까지 기다렸다가 기본 연결을 허용할지 여부를 결정합니다. 그러나 대상 위치에서 정책 파일을 제공할 수 없도록 마스터 정책 파일에 지정되어 있으면 해당 위치에 정책 파일이 있는 경우에도 loadPolicyFile() 호출 시 아무 영향도 주지 않습니다.

소켓 서버를 구현하고 소켓 정책 파일을 제공해야 할 필요가 있는 경우에는 기본 연결을 허용하는 포트와 동일한 포트를 사용하여 정책 파일을 제공할지 아니면 다른 포트에서 정책 파일을 제공할지 여부를 결정합니다. 두 경우 모두, 서버에서 응답을 보내기 전에 클라이언트의 첫 번째 전송을 기다려야 합니다.

Flash Player에서 정책 파일을 요청할 때는 항상 연결이 설정된 직후에 다음 문자열을 전송합니다.

<policy-file-request/>

서버는 이 문자열을 수신한 후 정책 파일을 전송할 수 있습니다. Flash Player의 요청은 항상 null 바이트로 종료되며, 서버의 응답도 null 바이트로 종료되어야 합니다.

정책 파일 요청과 기본 연결 모두에 동일한 연결을 다시 사용하지 마십시오. 정책 파일을 전송한 후 해당 연결을 닫습니다. 연결을 닫지 않으면, Flash Player에서 기본 연결을 설정하기 위해 다시 연결하기 전에 정책 파일 연결을 닫습니다.

데이터 보호

인터넷을 통해 전송하는 동안 데이터가 도용되거나 변경되지 않도록 보호하기 위해 원본 데이터가 있는 서버에서 TLS(Transport Layer Security) 또는 SSL(Socket Layer Security)을 사용할 수 있습니다. 그런 다음 HTTPS 프로토콜을 사용하여 서버에 연결할 수 있습니다.

또한 AIR 2 이상용으로 작성된 응용 프로그램에서는 TCP 소켓 통신을 보호할 수 있습니다. SecureSocket 클래스를 통해 TLS 버전 1 또는 SSL 버전 4를 사용하는 소켓 서버에 대한 소켓 연결을 시작할 수 있습니다.

데이터 보내기

코드에서 데이터를 서버 또는 리소스에 보내면 데이터 보내기가 발생합니다. 네트워크 도메인의 내용에 대해서는 데이터 보내기가 항상 허용됩니다. 로컬 SWF 파일은 local-trusted, local-with-networking 또는 AIR 응용 프로그램 샌드박스에 있는 경우에만 네트워크 주소로 데이터를 보낼 수 있습니다. 자세한 내용은 로컬 샌드박스 를 참조하십시오.

flash.net.sendToURL() 함수를 사용하여 URL로 데이터를 보낼 수 있습니다. 기타 메서드를 사용하여 URL로 요청을 보낼 수도 있습니다. 여기에는 Loader.load() Sound.load() 와 같은 로드 메서드, URLLoader.load() URLStream.load() 와 같은 데이터 로드 메서드가 포함됩니다.

파일 업로드 및 다운로드

FileReference.upload() 메서드는 원격 서버로 사용자가 선택한 파일의 업로드를 시작합니다. FileReference.browse() 또는 FileReferenceList.browse() 메서드는 FileReference.upload() 메서드보다 먼저 호출해야 합니다.

FileReference.browse() 또는 FileReferenceList.browse() 메서드를 초기화하는 코드는 마우스 이벤트나 키보드 이벤트에 대한 응답으로만 호출될 수 있습니다. 그 밖의 경우에 ActionScript가 호출되면 Flash Player 10 이상에서는 예외가 발생합니다. 그러나 사용자가 초기화한 이벤트는 AIR 응용 프로그램 샌드박스에서 이러한 메서드를 호출할 필요가 없습니다.

FileReference.download() 메서드를 호출하면 원격 서버에서 파일을 다운로드할 수 있는 대화 상자가 열립니다.

참고: 서버에 사용자 인증이 필요한 경우 브라우저에서 실행 중인, 즉 브라우저 플러그 인이나 ActiveX 컨트롤을 사용하는 SWF 파일만이 인증 및 다운로드에 필요한 사용자 이름과 암호를 요청하는 대화 상자를 제공할 수 있습니다. Flash Player는 사용자 인증을 요청하는 서버에 대한 업로드를 허용하지 않습니다.

호출하는 SWF 파일이 local-with-filesystem 샌드박스에 있는 경우에는 업로드 및 다운로드가 허용되지 않습니다.

기본적으로 SWF 파일은 자체 서버가 아닌 서버에서의 업로드나 다운로드를 시작하지 않습니다. 호출하는 SWF 파일의 도메인에 권한을 부여하는 정책 파일이 서버에서 제공되는 경우, SWF 파일은 다른 서버로부터의 업로드 및 다운로드를 허용합니다.