앞에서 크로스 스크립팅에 대한 보안에 대하여 간략히 짚어 보았는데 속성과 메서드 정도만 다시 정리하여보자.
보안 이슈가 발생하는 상황은 그림과 같이 서로 다른 도메인에서 서로간 통신시 발생한다.

사용자 삽입 이미지

그림 처럼 다른 도메인의 무비가 한 무비를 불러들여 자신에게 포함한다. 포함한 무비 main.swf가 content.swf의 메서드나 속성을 제어하려고 하면 포함당한 무비입장에서는 '과연 자신의 정보를 보여주어야 하느냐?'에 대한 이슈가 발생한다. 만약 달라는대로 다 준다면...보안에 헛점이 많은 프로그램이였을 것이다. 어찌되었건 불려진 무비입장에서는 개발 당시 특정 도메인에 관해서는 자신의 정보를 주어도 좋다는 허락하에 속성이나 메서드등을 제공하게 된다.
개발시 content.swf에 Security.allowDomain("aaa.com");와 같이 aaa.com에 대하여 보안을 허용한다.

[ 속성 ]
exactSettings : Boolean

[static]
카메라 및 마이크 권한, 저장소 할당량 및 영구 공유 객체 저장에 대한 설정을 비롯한 특정 Flash Player 설정에 사용할 도메인을 선택하는 방법을 결정합니다.

sandboxType : String
[static] [read-only]
호출하는 SWF 파일이 작동 중인 보안 샌드박스의 유형을 나타냅니다.


[ 메서드 ]
allowDomain(... domains):void
[static]
지정된 도메인의 SWF 파일과 HTML 파일이 allowDomain() 호출을 포함하는 SWF 파일의 객체 및 변수에 액세스할 수 있도록 합니다. 단 도메인이 IP와 매핑되더라도 IP주소를 넣었을 때 허용되지 않는 경우가 있다. (여러개의 서버를 사용하여 한개의 도메인을 관리할 경우...등) 그때는 아래의 allowInsecureDomain를 사용한다. 가만히 보면 배열이 파라미터의 값이므로 여러개의 사이트를 등록할 수 있다.

allowInsecureDomain(... domains):void
[static]
지정된 도메인의 SWF 파일과 HTML 파일이, 호출하는 SWF 파일(HTTPS 프로토콜을 통해 호스팅되는)의 객체 및 변수에 액세스할 수 있도록 합니다. 이 보안 모드는 보안단계가 조금 취약할 수 있다.

loadPolicyFile(URL:String):void
[static]
 url 매개 변수에 지정된 위치에서 크로스 도메인 정책 파일을 로드합니다. XML파일명은 crossdomain.xml로 만들어 줍니다. 과거에는 사이트 루트 폴더에 같이있어야 했지만 지금은 경로를 통해 xml 파일을 읽어 올 수 있다.
Security.loadPolicyFile("http://www.example.com/sub/dir/crossdomain.xml");

* crossdomain 정책
<?xml version="1.0"?>
<cross-domain-policy>
    <allow-access-from domain="*" to-ports="507" />
    <allow-access-from domain="*.foo.com" to-ports="507,516" />
    <allow-access-from domain="*.bar.com" to-ports="516-523" />
    <allow-access-from domain="www.foo.com" to-ports="507,516-523" />
    <allow-access-from domain="www.bar.com" to-ports="*" />
</cross-domain-policy>



showSettings(panel:String = "default"):void
[static]
Flash Player에서 [보안 설정] 다이얼로그 패널을 열어준다.
첫번째 파라미터의 값은 SecurityPanel의 static속성으로 정의 되어있다.
가령 사용자가 로컬에 저장되는 정보를 설정하려 할 때 아래와 같이 코딩한고
Security.showSettings(SecurityPanel.LOCAL_STORAGE);

사용자 삽입 이미지
마이크의 음량을 조절하고 싶을 때는 아래와 같이 코딩한다.
Security.showSettings(SecurityPanel.MICROPHONE);
사용자 삽입 이미지

[ SecurityPanel의 상수 ]
CAMERA : String = "camera"
[static]
Security.showSettings()에 전달하면 Flash Player 설정에 [카메라] 패널이 표시됩니다.

DEFAULT : String = "default"
[static]
Security.showSettings()에 전달하면 사용자가 Flash Player 설정을 마지막으로 닫을 때 열려 있던 패널이 표시됩니다.

LOCAL_STORAGE : String = "localStorage"
[static]
Security.showSettings()에 전달하면 Flash Player 설정에 [로컬 저장 설정] 패널이 표시됩니다.

MICROPHONE : String = "microphone"
[static]
Security.showSettings()에 전달하면 Flash Player 설정에 [마이크] 패널이 표시됩니다.

PRIVACY : String = "privacy"
[static] Security.showSettings()에 전달하면 Flash Player 설정에 [개인 정보 설정] 패널이 표시됩니다.

SETTINGS_MANAGER : String = "settingsManager"
[static] Security.showSettings()에 전달하면 [설정 관리자]가 별도의 브라우저 윈도우에 표시됩니다.





Posted by 버터백통