2010-02-02 4 views

답변

4

Joel이 말한 것처럼 Same Origin Policy은 부모 창까지 액세스를 차단합니다.

은 쿠키를 사용하여 동일한 도메인의 서로 다른 문서/프레임/창에있는 클라이언트 측 스크립트간에 통신 채널을 설정합니다. 한 문서는 쿠키를 쓰려면 document.cookie을 설정하고 그 다음은 간격 폴러에서 document.cookie을 읽고 새 메시지를 찾아서 메시지로 처리합니다.

각 문서가 자신을 식별하고 메시지를 보내는 사람과시기를 알려야하기 때문에 실제로는 다소 짜증이납니다. 최후의 수단 방법, 정말로.

+0

아주 좋은 생각 +1 쿠키 값을 관찰하는 방법은 무엇입니까? –

+0

아니, 투표 루프 (setInterval)를 계속 살펴 봐야합니다. – bobince

+0

쿠키가 커지면 요청이 끊어집니다 (요청 헤더 세트의 크기에는 제한이 있음). – Erlend

3

예, 다른 프레임의 문서에 대한 참조를 얻으려면 상위 문서를 사용해야합니다.

var otherDocument = window.parent.frames[x].document; 
// this will fail ---------^ 

액세스 형제 프레임은 잠재적 취약점으로 해석 될 수있는, 당신은 부모 문서가로드 다른 어떤 도메인을 결정하기 위해 허용 할 수 있습니다.

+0

zxy.com을 허용하는 abc.com 도메인의 crossdomain.xml 파일로 문제를 해결할 수 있습니까? –

+0

크로스 도메인 정책 파일에 대해서는 잘 모릅니다. 그러나 브라우저가 지원한다면 가능하다고 생각합니다. – Joel

+1

아니요. 'crossdomain.xml'은 Flash 용이며 JS 동일 원산지 정책에는 영향을 미치지 않습니다. 추신. 그것은'window.parent'입니다. – bobince

0

iframe은 동일한 기본 정책 (SOP)에 의해 자바 스크립트로 기본 페이지의 콘텐츠를 가져올 수 없습니다.

그러나 쿠키를 사용하여 서버에 POST (일부 범위 내리기) (CSRF라고 함)를 호출 할 수 있습니다. 따라서 보안을 위해 세션 쿠키에만 의존하지 마십시오.

이 문제를 방지하는 좋은 방법은 서버 호출시 전달하는 기본 페이지 (iframe에서 보이지 않는 토큰)를 사용하는 것입니다.

7

글쎄, 의사 소통의 의미에 달려 있습니다. 어떤 종류의 의사 소통이 가능해 보입니다. 다음은 그 예이다 : www.abc.com에 HTML :

<iframe name="test1" src="http://www.xyz.com/frame1.html"> 
<iframe name="test2" src="http://www.xyz.com/frame2.html"> 

iframe을가 우리가 프레임 2에서이 작업을 수행 할 수 있습니다라는 이름 때문에 :

<a href="javascript:alert(document.body.innerHTML)" target="test1">click me</a> 

그래서 우리는 프레임 2에있는 링크를 클릭하지만, 프레임 1의 내용이 표시됩니다.

+0

이것이 작동하면 생명의 은인입니다! –

+0

소형 데모 : http://erlend.oftedal.no/blog/demo/frames/ – Erlend

+0

데모는 FF 및 IE에서 작동하지만 Chrome 또는 Opera에서는 작동하지 않습니다. –