제한적 네트워킹 API

Flash Player 9 이상, Adobe AIR 1.0 이상

네트워킹 API는 다음 두 가지 방법으로 제한될 수 있습니다. 악의적인 동작을 방지하기 위해 일반적으로 예약된 포트에 대한 액세스는 차단됩니다. 사용자 코드에서 이러한 블록을 재정의할 수 없습니다. 다른 포트와 관련해서 네트워크 기능에 대한 SWF 파일의 액세스를 제어하기 위해 allowNetworking 설정을 사용할 수 있습니다.

차단된 포트

Flash Player 및 Adobe AIR는 브라우저와 마찬가지로 특정 포트에 대한 HTTP 액세스를 제한합니다. 일반적으로 HTTP가 아닌 서버 유형에 사용되는 특정 표준 포트에 대한 HTTP 요청은 허용되지 않습니다.

네트워크 URL에 액세스하는 모든 API에 이러한 포트 차단 제한이 적용됩니다. 단, Socket.connect() XMLSocket.connect() 와 같이 직접 소켓을 호출하는 API나 소켓 정책 파일이 로드되는 Security.loadPolicyFile() 호출은 예외입니다. 소켓 연결은 대상 서버의 소켓 정책 파일을 사용하여 허용되거나 거부됩니다.

다음 목록에서는 포트 차단이 적용되는 ActionScript 3.0 API를 보여 줍니다.

FileReference.download() , FileReference.upload() , Loader.load() , Loader.loadBytes() , navigateToURL() , NetConnection.call() , NetConnection.connect() , NetStream.play() , Security.loadPolicyFile() , sendToURL() , Sound.load() , URLLoader.load() , URLStream.load()

포트 차단은 공유 라이브러리 가져오기, 텍스트 필드에 <img> 태그 사용, <object> <embed> 태그를 사용하여 HTML 페이지에 SWF 파일을 로드하는 경우에도 적용됩니다.

포트 차단은 텍스트 필드에 <img> 태그 사용, <object> <embed> 태그를 사용하여 HTML 페이지에 SWF 파일을 로드하는 경우에도 적용됩니다.

다음 목록에서는 차단되는 포트를 보여 줍니다.

HTTP: 20(ftp 데이터), 21(ftp 제어)

HTTP 및 FTP: 1(tcpmux), 7(echo), 9(discard), 11(systat), 13(daytime), 15(netstat), 17(qotd), 19(chargen), 22(ssh), 23(telnet), 25(smtp), 37(time), 42(name), 43(nicname), 53(domain), 77(priv-rjs), 79(finger), 87(ttylink), 95(supdup), 101(hostriame), 102(iso-tsap), 103(gppitnp), 104(acr-nema), 109(pop2), 110(pop3), 111(sunrpc), 113(auth), 115(sftp), 117(uucp-path), 119(nntp), 123(ntp), 135(loc-srv/epmap), 139(netbios), 143(imap2), 179(bgp), 389(ldap), 465(smtp+ssl), 512(print/exec), 513(login), 514(shell), 515(printer), 526(tempo), 530(courier), 531(chat), 532(netnews), 540(uucp), 556(remotefs), 563(nntp+ssl), 587(smtp), 601(syslog), 636(ldap+ssl), 993(ldap+ssl), 995(pop3+ssl), 2049(nfs), 4045(lockd), 6000(x11)

allowNetworking 매개 변수 사용

SWF 파일이 포함된 HTML 페이지에 있는 <object> <embed> 태그의 allowNetworking 매개 변수를 설정하여 SWF 파일이 네트워크 기능에 액세스하는 것을 제어할 수 있습니다.

allowNetworking 은 다음과 같은 값을 가질 수 있습니다.

  • "all" (기본값) - SWF 파일에서 모든 네트워킹 API를 사용할 수 있습니다.

  • "internal" - SWF 파일에서 이 단원의 뒷부분에 나열되어 있는 브라우저 내비게이션이나 브라우저 상호 작용 API를 호출할 수 없지만 다른 네트워킹 API를 호출할 수 있습니다.

  • "none" - SWF 파일에서 이 단원의 뒷부분에 나열되어 있는 브라우저 내비게이션이나 브라우저 상호 작용 API를 호출할 수 없고 마찬가지로, 뒷부분에 나열되어 있는 모든 SWF 간 통신 API를 사용할 수 없습니다.

allowNetworking 매개 변수는 주로 SWF 파일과 포함하는 HTML 페이지가 다른 도메인에 속해 있을 때 사용됩니다. 로드되는 SWF 파일이 포함하는 HTML 페이지와 동일한 도메인에 속해 있는 경우에는 "internal" 또는 "none" 값을 사용하지 않는 것이 좋습니다. SWF 파일이 원하는 HTML 페이지와 함께 로드되지 않을 수도 있기 때문입니다. 신뢰할 수 없는 사람이 포함하는 HTML 없이 사용자 도메인에서 SWF 파일을 로드할 수 있으며, 이런 경우에는 allowNetworking 제한이 예상대로 작동하지 않습니다.

금지된 API를 호출하면 SecurityError 예외가 발생합니다.

다음 예제에 표시된 대로 allowNetworking 매개 변수를 추가하고 SWF 파일에 대한 참조가 포함된 HTML 페이지의 <object> <embed> 태그에 해당 값을 설정합니다.

<object classic="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" 
    Code base="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,124,0"  
    width="600" height="400" ID="test" align="middle"> 
<param name="allowNetworking" value="none" /> 
<param name="movie" value="test.swf" /> 
<param name="bgcolor" value="#333333" />  
<embed src="test.swf" allowNetworking="none" bgcolor="#333333"  
    width="600" height="400" 
    name="test" align="middle" type="application/x-shockwave-flash"  
    pluginspage="http://www.macromedia.com/go/getflashplayer" /> 
</object>

또한 HTML 페이지는 스크립트를 사용하여 SWF를 포함하는 태그를 생성할 수 있습니다. 해당 스크립트를 변경하여 올바른 allowNetworking 설정을 삽입해야 합니다. Adobe Flash Professional 및 Adobe Flash Builder에서 생성된 HTML은 AC_FL_RunContent() 함수를 사용하여 SWF 파일에 대한 참조를 포함합니다. 다음과 같이 allowNetworking 매개 변수 설정을 스크립트에 추가합니다.

AC_FL_RunContent( ... "allowNetworking", "none", ...)

다음 API는 allowNetworking "internal" 로 설정된 경우 사용할 수 없습니다.

navigateToURL() , fscommand() , ExternalInterface.call()

이전 목록의 API뿐 아니라 allowNetworking "none" 으로 설정된 경우 다음 API도 사용할 수 없습니다.

sendToURL() , FileReference.download() , FileReference.upload() , Loader.load() , LocalConnection.connect() , LocalConnection.send() , NetConnection.connect() , NetStream.play() , Security.loadPolicyFile() , SharedObject.getLocal() , SharedObject.getRemote() , Socket.connect() , Sound.load() , URLLoader.load() , URLStream.load() , XMLSocket.connect()

선택한 allowNetworking 설정에서 SWF 파일이 네트워킹 API를 사용할 수 있도록 허용한 경우에도 보안 샌드박스 제한에 따른 다른 유형의 제한이 있을 수 있습니다( 보안 샌드박스 참조).

allowNetworking "none" 으로 설정된 경우에는 TextField 객체의 htmlText 속성에 있는 <img> 태그에서 외부 미디어를 참조할 수 없습니다(SecurityError 예외 발생).

allowNetworking "none" 으로 설정된 경우 가져와서 Flash Professional(ActionScript가 아님)에 추가한 공유 라이브러리의 심볼이 런타임 시 차단됩니다.