'cross domain'에 해당되는 글 1건

  1. 2010.03.08 Cross Domain 처리

Cross Domain 처리

JAVA 2010. 3. 8. 14:10
출처 : http://www.actrun.com/bbs/board.php?bo_table=javascript&wr_id=771

A.com/a.htm
(parent)
                             B.com/b.htm
                             (child)

b.htm에서 a.htm의 javascript function 또는 form 객체를 이용하려고 하면 cross-site policy에 걸려서
사용권한이 없다는 에러 메세지를 던져준다.

이 경우 우회하려면 아래와 같이 child인 b.htm에서 iframe을 하나 더 생성한다.
A.com/a.htm
(parent)
           B.com/b.htm
  (parent)
                            A.com/c.htm
                   (child)


그리고 b.htm에서 로딩될 때 c.htm을 호출해준다.
그러면 c.htm에서 parent.parent.~~~ 와 같은 방식으로 a.htm에 있는 function 또는 form 객체를 이용한다.
form 객체의 경우 document.all.~ 와 같은 형식으로 사용한다.

a.htm             A.com                                                                                      
function call() {
  ...
  document.testForm.target = "childFrame";
  document.testForm.submit();
}

function callback(msg) {
  document.all.key1 = msg;
}

<body>
  ...
  <input type="text" name="key1"><br>

  <iframe name="childFrame" ...>
  ...
</body>

b.htm            B.com                                                                                          
<%@ page language="java" import="java.lang.*,java.util.*" %>

<%
    String result = (String)request.getAttribute("result");
 %>

<html>
<head>
<script type="text/javascript" language="javascript">
<!--
//-->
</script>
</head>
<body>
    <iframe name="hidden" width="300" height="200" src="http://A.com/c.htm?result=<%= result %>">
    </iframe>
</body>
</html>

c.htm             A.com                                                                                              
<%@ page language="java" import="java.lang.*,java.util.*" %>

<% String result = (String)request.getParameter("result"); %>
<html>
<head>
<script type="text/javascript" language="javascript">
<!--
        parent.parent.callback('<%= result %>');
//-->
</script>
</head>
<body>
</body>
</html>


서로 도메인이 다를 경우 다른 페이지의 속성을 변경하거나 호출하여 실행하는 건 안되지만
경로 정보 정도는 이용 가능한 듯 함.

b.htm에서 parent.callback('msg') 를 호출할 경우 또는 parent.document.all.key1.value = 'msg' 를
실행할 경우 사용권한 관련 에러게 발생하지만
c.htm에서 parent.parent.callback('msg') 하는 경우는 가능하다.

Posted by 라딘.

댓글을 달아 주세요