2013. 2. 1. 17:12

플래시에서 소켓 연결 태스트중 권한 없음으로 인한 보안 샌드 박스 문제가 발생 하였습니다.

 

1. 문제

Error #2044: 처리되지 않은 securityError입니다. text=Error #2048: 보안 샌드박스 문제가 발생했습니다.

 

 

 

이 오류는 크로스도메인 파일 정의 되지 않는 경우 일어나는 일이라 별생각없이 플래시가 있는 IIS의 루트에 크로스 도메인 파일을 추가하였습니다.

 

하지만 계속 같은 오류가 나는 겁니다 ㅡ,.ㅡ;;;

그래서 실버라이트 소켓 프로그램들이 돌고있는 웹서버에 올려놓고 돌려보았습니다.

같은 증상이 반복되는군요....

 

2. 해결 방법

이것 때문에 이틀을 삽질하던중 다시 보던 액션스크립트 도움말을 보다가 발견한 내용.

 

 

 

 

 

허....헐?

이 문제 때문에 이 도움말을 10번 가까이 읽었는데 이내용을 처음 보다니-_-;;;;;;

 

한마디로

"같은 프로토콜 끼리만 크로스도메인내용을 공유 할수 있다."

입니다.

 

검색을 해보니 액션스크립트3(플래시 플레이어 10이상)부터 생긴 규칙이라고 합니다;;

그러니 소켓통신을 하려면 소켓통신하는 서버나 다른 소켓서버에서 권한 관련 xml내용을 보내 주어야 한다는 것입니다.

 

2-1. 크로스 도메인을 얻기위해 플래시 소켓에서 하는 행동

문서대로 소켓통신을 하고 싶으면 크로스도메인내용을 소켓서버가 전달을 해야 합니다.

소켓서버를 하나 더 만들던 기존서버에 추가하던 하시면 됩니다.

 

플래시의 소켓 접속 행동 패턴은 이렇습니다.

 

1)크로스 도메인 권한내용이 있나?

2)없으면 내가 접속하려는 소켓서버에 "<policy-file-request/>\0"라고 요청한다.

3)서버에서 크로스 도메인 내용을 준다.

<?xml version=""1.0"" ?>
<!DOCTYPE cross-domain-policy SYSTEM ""/xml/dtds/cross-domain-policy.dtd"">
<cross-domain-policy>
	<allow-access-from domain=""*"" to-ports=""*""/>
</cross-domain-policy>


4)서버에서 커낵트를 끊는다.(중요.)

5)서비스를 할 서버로 연결한다.

 

여기서 4)가 중요한데 서버에서 크로스도메인 권한을 보낸후 디스커낵트를 하지 않으면 권한을 제대로 읽지 못합니다.

(몇가지 더 테스트해보고 업데이트 하겠습니다.)

 

마무리

확실이 브라우저 플러그인들은 권한 제한이 강해지고 있습니다-_-;;;

엑티브X의 악몽을 생각하면 당연한 것이긴 하죠,.

하지만 웹만큼 사용자접근성이 좋은 것도 없는데 이런일 일어날때마다 개발자만 힘든거라는게 가슴아픈 현실이죠 ㅎㅎㅎㅎㅎ

 

어떻해서든 소켓으로 크로스도메인 내용을 안보내보려고 발악한건데 애초부터 불가능 한거였네요.

나의 2일을 돌려주오~

p.s. 난 플래시랑 상관없는데 어쩌다 같이 삽질을 한거지? ㅋㅋㅋㅋㅋ