,
브라우저에서 사용되는 자바스크립트는 잘 알고 있다시피, DOM 구조상 document 개체의 domain이 다르면 접근할 수 없는 것으로 알려져 있습니다. (참고) 그 규칙에 따라서, 브라우저 제작사들은 적절한 접근제한을 가하고 있습니다.

몇가지 상황에서 우회로를 뚫어 보겠습니다.


세션키 전달


같은 데이터베이스를 사용하지만, TLD나 1차 도메인 명이 다른 두 개의 다른 도메인으로 운영되되는 사이트를 운영할 때는 싱글사인온 같은 문제가 발생합니다. 한가지 팁으로 사용되는 방법으로는 현재의 window.name에 값을 저장하고 도메인이 달라지는 다음 페이지에서 window.name을 조사하여 전달하는 방식을 iframe에 응용하는 것입니다.

example.com: main.html
<html><body>
<iframe src="http://example.net/othersite.html" name="SESS_12345678"></iframe>
</body></html>
example.net: othersite.html
<html><head>
<script>if( document.cookie.indexOf( 'SESSION' ) < 0 && window.name.substr(0,4) == 'SESS' ){
    document.cookie = "SESSION="+window.name.substr(5);
    document.location.href = document.location.href; /* 다시 로드 */
}
</script>
</head></html>

변화하는 값 전달

위의 예는 페이지가 로드될 때 한 번 일어날 수 있는 상황에서 사용됩니다. 다음 소개하는 예는 IE에서만 동작하는 팁입니다.

example.com: main.html
<html>
<body>
<iframe width="300px" height="1024px" src="http://example.net/othersite.html" name="other"></iframe>
<script>
setInterval( function() {
    window.frames['other'].name = (new Date()).getTime();
}, 1000 );
</script>
</body></html>
example.net: othersite.html
<html><body>
<span id="display"></span>
<script>
setInterval( function() {
    document.getElementById('display').innerHTML = window.name;
}, 1000 );
</script></body>
</html>
IE에서만 동작하는 이유는 window.frames['other'].name 속성이 접근가능하기 때문입니다. 분명히, 다른 도메인인데도 불구하고, 해당 윈도우의 속성을 변경할 수 있게 되고, 그것을 통해서 두 도메인간 데이터를 교환할 수 있는 방법이 존재하는 것입니다. IETester를 이용해서 확인한 결과 5.5~8Beta1까지 모두 사용이 가능하더군요.

FF, Opera, Safari에서는 위 코드가 모두 접근 오류를 일으키고 실행되지 않습니다.


신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  1. http://create74.com/ 2008.06.07 22:32 신고

    이런 놀이를 하시다니 --;
    일전에 타 도메인간 작업놀이 하다 열받은 기억이 --;

    • 최호진 2008.06.08 01:46 신고

      오픈소셜 컨테이너가 저런류의 잡지식을 원~합니다.

+ Recent posts