URL로 프레임에 액세스하려는 안전하지 않은 JavaScript 시도


112

다른 도메인 URL이 포함 된 iframe에서 상위 URL에 해시 값을 설정하려고하면 아래 오류가 발생합니다.

안전하지 않은 JavaScript가 URL이 "URL2"인 프레임에서 URL이 "URL1"인 프레임에 액세스하려고합니다. 도메인, 프로토콜 및 포트가 일치해야합니다.

이 문제를 어떻게 해결할 수 있습니까?


3
자세한 내용은, 코드 조각, 오류 메시지를 추가하십시오, 프레임 워크는 사용 ... 더 상세 자세한 내용은 ..
fifigyuri

5
iframe에로드되고 동일한 오류가 발생하는 g + 1, facebook like 또는 shre 및 twitter 소셜 플러그인을 구현하면 어떨까요?

문제는 왜 Facebook과 Google 스크립트가 내 웹 사이트 요소에 액세스하려고 시도하는지입니다.
sergio

답변:


124

출처가 다른 하위 문서에서 상단 창의 location.hash속성에 액세스 할 수 없지만 location속성 자체 를 설정할 수 있습니다.

상단 창 위치가 주어진 것을이 방법 http://example.com/page/대신에 일을,

parent.location.hash = "#foobar";

부모님의 위치를 ​​알아야하고

parent.location = "http://example.com/page/#foobar";

리소스가 탐색되지 않기 때문에 예상대로 작동하며 URL의 해시 부분 만 변경합니다.

도메인 간 통신에 이것을 사용하는 경우 대신 easyXDM을 사용하는 것이 좋습니다 .


13
아무도 이것을 답으로 표시하지 않았고 아직 60 개의 찬성표를 가지고 있습니다. 이것에 대한 배지가 있어야합니다.
zachzurn

35
배지의 이름은 무엇입니까? "게으른 사람에게 응답"
nzifnab 2013 년

1
안녕하세요 @atul, 친절 하고이 답변을 최고의 답변으로 표시하십시오. 우리 모두가 다른 사람의 지식으로부터 이익을 얻을 수 있도록 허용하는 규칙을 존중하십시오 ...
Clint Eastwood

13

두 프레임의 도메인-> 보안이 다른 경우 크로스 프레임 스크립팅이 불가능합니다.

참조 : http://javascript.about.com/od/reference/a/frame3.htm

이제 귀하의 질문에 답하십시오. 해결책이나 해결 방법이 없습니다. 다른 도메인의 두 프레임이 다른 도메인의 URL을 변경해야하는 이유를 웹 사이트 디자인을 확인해야합니다.


82
이것은 특히 웹 서비스 등이 옵션이 아닌 웹 사이트에 타사 응용 프로그램을 포함하는 경우 자주 발생하는 요구 사항입니다.
Jacques

9

iframe.src의 도메인을 챔지하려고 할 때 동일한 오류 메시지가 표시되었습니다.

저에게 대답은 iframe.src를 동일한 도메인의 URL로 변경하는 것이었지만 실제로는 원하는 도메인에 대한 html 리디렉션 페이지였습니다. 다른 도메인은 오류없이 내 iframe에 표시되었습니다.

매력처럼 작동했습니다. :)


여기서 정확히 무엇을했는지 더 자세히 설명해 주시겠습니까?
Devin G Rhode

간단히 설명 해주시면 정말 도움이 될 것입니다.
Madhusudhan

2
최신 Chrome에서 작동하지 않음 : src 매개 변수를 확인하지 않지만 실제 URL이로드되었습니다. 리디렉션 트릭은 불행히도 :-( 어떤 식 으로든하지의 도움 않도록
lucaferrario

3
나는 Tommy가 말하는 것이 서버 측 프록시라고 믿습니다. 예를 들어 benalman.com/projects/php-simple-proxy 또는 developer.yahoo.com/javascript/howto-proxy.html 또는 google.com/… 또는 stackoverflow.com/a/11224975/27938
Oskar Austegard

그거 멋지다. 하지만이 문제를 해결하는 것이 일반적으로 얼마나 사소한 지 보여줍니다. 좋아요, 제가 악의적 인 해커라고 가정하고 크로스 도메인 스크립팅 공격을 실행하려고합니다. 이러한 도구에 대해 알고 사용할 가능성이 있습니다. 브라우저 보안 수정에 관한 한, 이것은 경고없이 Javascript를 로컬에서 실행할 수 없도록하는 IE만큼 쉽게 지연됩니다. 문제를 해결하지 않습니다. 새로운 것을 생성합니다.
Yitzhak 2013 년

6

해결책은 원격 콘텐츠를 검색하는 로컬 파일을 사용하는 것입니다.

remoteInclude.php

<?php
$url = $_GET['url'];
$contents = file_get_contents($url);
echo $contents;

HTML

<iframe frameborder="1" id="frametest" src="/remoteInclude.php?url=REMOTE_URL_HERE"></iframe>
<script>
    $("#frametest").load(function (){       
    var contents =$("#frametest").contents();
});


1
이것은 크로스 사이트 스크립팅 취약점에 대한 문을 열어줍니다. 가능한 공격의 예 : 1. 나는 게시물 myevilserver.com에 백업하는 것이 로그인 양식을 포함하여 귀하의 사이트처럼 보이는 것을 myevilserver.com에 페이지를 만들 2. 내가 링크로 사용자에게 가짜 뉴스 레터를 보내 https : // yoursite.com/remoteInclude.php?url=myevilserver.com 3. 내 서버에서 캡처 한 로그인 양식이 사이트에 표시됩니다.
EricP 2013

2
가능한 해결책은 remoteInclude.php가 사전 승인 된 도메인 목록에 대해 모든 URL을 확인하도록하는 것입니다.
EricP 2013

이것은 크로스 사이트 스크립팅 취약점 문제를 해결하지 않습니다. 서버 측에서 할 수없는 외부 웹 사이트에 대한 자바 스크립트로 할 수있는 일은 전혀 없습니다. 이 모든 작업은 브라우저 자체를 방해하고 추가 단계를 도입하여 웹 앱의 유용성을 떨어 뜨립니다. ajax를 통해로드하고 링크를 다시 작성하고 다시 게시하는 경우에도이 모든 작업을 수행 할 수 있습니다. 그래도 작동하지 않으면 php 또는 다른 언어를 통해 원격 rpc하십시오. 이것이 일반 코더에게도 문제라는 것은 터무니없는 일입니다.
Yitzhak 2013 년

3

HTML5 버전 대신 XFBML 버전의 Facebook 좋아요 버튼을 사용하면이 문제가 해결된다는 것을 알았습니다. 버튼을 표시하려는 위치에 아래 코드를 추가하십시오.

<div id="fb-root"></div>
<script>(function (d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

<fb:like send="true" layout="button_count" width="50" show_faces="false" font="arial"></fb:like>

그런 다음 HTML 태그에 다음을 추가하십시오.

 xmlns:fb="http://ogp.me/ns/fb#"

2
페이스 북은이 질문과 무슨 관련이 있습니까?
Kukks

16
버튼과 같은 페이스 북 에서도이 오류가 발생하고 답변을 검색 할 때이 페이지를 발견했기 때문에 다른 사람들이 답변이 필요할 것이라고 생각했습니다.
Luke Alderton 2012

1

문제는 프록시를 만들거나 콘텐츠를로드하고 로컬 인 것처럼 삽입하더라도 콘텐츠가 정의하는 모든 스크립트가 다른 도메인에서로드되어 도메인 간 문제를 유발한다는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.