본문 바로가기

액션스크립트 3.0

AS3.0 플래시 보안 : Security 클래스


플래시 보안의 기본개념 - 센드박스 보안

 

     - 센드박스란 같은 상자안의 모래상자에는 보안이 필요없고, 다른 상자안에 있는 모래와는 보안을 해야하는 개념.

     - 샌드박스 보안이 플래시에 적합한 이유는 샌드박스 개념이 도메인 이름과 연관 관계를 가지고 있기 때문.

     - 다음과 같은 경우에 있어서 서로 다른 샌드 박스로 인식함.

 

          http://example.com

          http://www.example.com

          http://store.example.com

          https://www.example.com

          http://192.0.34.166

 

          해당 주소 중 유념히 살펴봐야 할 부분이 http 와 https 프로토콜이다. 같은 서버있지만 서로 다른 샌드박스로

          인식하고 있다는 것이다. 흔히 개발자들은 '사용하고자 하는 데이터가 다른 서버에 존재할 때만 보안문제가 발생한다'

          라고 알고있다. 그러나 플래시에서는 '프로토콜이 다를 때도 보안문제가 발생할 수 있다'라는 걸 알 수 있다.

 

플래시 보안 4대 요소

 

     - Adobe : Adobe - Flash Player 설정 관리자 - 전역 보안설정 패널 

     - 사용자 : Adobe - Flash Player 설정 관리자 - 전역 보안설정 패널 

     - 사이트 운영자 : crossdomain.xml, html( allowNetworking )

     - 플래시 개발자 : Security.allowDomain("example.com"), LoaderContext.checkPolicyFile = true;

 

Security 클래스 함수 및 속성

 

     - sandboxType : String

        샌드박스 데이터형 반환.

 

     - exactSettings : Boolean

        도메인 체크 방식 기본 'true'로 설정하는게 좋음. 'false'이면 'www.sample.com' 을 'sample.com'으로 인식.

        도메인을 등록하는 allowDomain과 allowInsecureDomain 함수에 적용.

 

     - allowDomain( ..domains ): void

        해당 도메인들을 허가해주는 Cross-Script 핵심문구. 외부서버에 있는 SWF파일 로드 시 사용.

 

     - allowInsecureDomain( ..domains ): void

        해당 도메이들을 security=false해서 https방식으로 보안.

 

     - loadPolicyFile( url: String ): void

        도메인 허가를 외부 보안 정책 xml로부터 허가. 외부서버에 있는 데이터파일( xml, text ) 로드 시 사용.

 

     - showSettings( panel:String = "default" ): void

        보안 정책 관련 셋팅 화면 표시.

 

HTML에서 원격 보안

 

     <object>

          <param name="allowNetworking" value="none" />

          <embed>

               //생략

          </embed>

     </object>

 

     allowNetworking 파라메타에 추가할 수 있는 값.

          - all( default )      network 관련 명령어 모두 사용 가능.

          - internal             다른 사이트로 이동하는 브라우저관련 명령어만 사용 불가.

          - none                모든 network 기능 불가. SWF-SWF간 통신 불가.

 

Loader 클래스와 LoaderContext 클래스

 

     Loader 클래스는 이미지 파일과 swf 파일을 로딩한 후, DisplayObjectContainer에 삽입이 가능한 DisplayObject.

     LoaderContext 클래스는 Loader 클래스를 사용할 때 보안샌드박스 관련 제어를 하도록 3개의 속성을 지원.

 

     - checkPolicyFile: Boolean = false

        기본 'false' 설정.

        로딩전 cross-domain.xml(보안 정책 파일) 보안 정책 파일 체크 여부.

        외부 서버에 있는 이미지 파일을 로드하기 전에 먼저 보안 정책 파일이 있는지 여부를 먼저 체크 후 이미지 로딩.

        보안 정책 파일이 없거나, 설정이 false인 경우 외부 서버에 있는 이미지 로드 시 보안에러 발생.

 

     - applicatioinDomain : ApplicationDomain = null

        SWF파일을 다운로드하는 경우에만 유효한 속성.

        응용 프로그램 도메인은 보안을 위한 것이 아니며 서로 관련된 ActionScript 코드 단위를 관리하기 위한 것입니다.

 

        예제)

        kor 과 en 이라는 폴더에 같은 파일명( Sample.as )의 클래스가 있다고 했을 때 메인에서 이 두파일을 로드하게 되면

        서로 같은 클래스명을 갖고 있기 때문에 마지막로드된 클래스로 속성 및 메서드가 대체되는 문제가 발생합니다.

        이 때 LoaderContext.applicatioinDomain = new ApplicationDomain(); 새로운 도메인을 설정해주어 여러 클래스를

        구분해주면 해결됩니다.

 

     - securityDomain: SecurityDomain = null

        SWF파일을 다운로드하는 경우에만 유효한 속성.

 

        보안 도메인을 선택하는 이유

        첫째 - 로드하는 SWF 파일이 같을 경우.

        자신의 도메인에서 SWF 파일을 로드하면 파일이 항상 자신의 보안 도메인에 배치됩니다.

 

        둘째 - 다른 도메인(다른 서버)일 수 있는 SWF 파일을 로드하는 경우에만 의미가 있음.

        다른 도메인의 SWF 파일을 로드할 때는 두 가지 옵션이 있습니다.

 

        로드되는 SWF 파일이 로드하는 SWF 파일의 보안 도메인과 다른 "고유의" 보안 도메인에 배치되도록 할 수 있으며,

        이는 기본 옵션입니다.

        다른 옵션은 myLoaderContext.securityDomainSecurityDomain.currentDomain으로 설정하여 로드되는

        SWF 파일이 로드하는 SWF 파일과 같은 보안 도메인에 배치되도록 지정하는 것입니다. 이를 '가져오기 로딩'이라고 하며,

        보안을 위해 로드되는 SWF 파일을 자신의 서버로 복사한 다음 로드하는 것과 같습니다. 가져오기 로딩에 성공하려면

        로드되는 SWF 파일의 서버에 로드하는 SWF 파일의 도메인을 신뢰하는 정책 파일이 있어야 합니다.