source

iframe에서 상위 URL에 액세스합니다.

factcode 2022. 9. 24. 09:55
반응형

iframe에서 상위 URL에 액세스합니다.

좋아요, 페이지와 이 페이지에 IFRAM이 있어요제가 해야 할 일은 iframe 페이지에서 메인 페이지의 URL을 알아보는 것입니다.

검색해 본 결과, iframe 페이지가 다른 도메인에 있는 경우 크로스 사이트 스크립팅이기 때문에 불가능하다는 것을 알고 있습니다.그러나 내가 읽은 모든 곳에서 iframe 페이지가 상위 페이지와 동일한 도메인에 있는 경우, 예를 들어 다음과 같이 작동해야 한다고 합니다.

parent.document.location
parent.window.document.location
parent.window.location
parent.document.location.href

같은 정보를 얻을 수 있는 방법은 여러 가지가 있는 것 같습니다.

어쨌든, 여기 문제가 있습니다.나의 iframe은 메인 페이지와 같은 도메인에 있지만 같은 SUB 도메인에 있지 않습니다.예를 들어, 저는

http:// www.mysite.com/pageA.html

그리고 나의 iframe URL은

http:// qa-www.mysite.com/pageB.html

에서 을 가져오려고 pageB.html(iframe 페이지), 같은 액세스 거부 에러가 계속 표시됩니다.서브 도메인도 사이트 간 스크립팅으로 간주되는 것 같습니다.맞습니까?니면제 제못 ?못 못?? ???

예, iframe과 기본 페이지가 동일한 하위 도메인에 없는 경우 상위 페이지의 URL에 액세스할 수 없습니다.다만, 메인 페이지의 URL(브라우저 URL)만 필요한 경우는, 다음과 같이 시험해 주세요.

var url = (window.location != window.parent.location)
            ? document.referrer
            : document.location.href;

주의:

window.parent.location허용됩니다. OP 됩니다.이 에러는 OP 에 하기 합니다.이것에 의해, OP의 시큐러티 에러가 발생하는 것은,href ★★★★window.parent.location.href는 ''''

document.referrer 는 "이 페이지에 링크된 페이지의 URI"를 나타냅니다.다른 소스가 이 명령어를 지정한 경우 이 명령어가 포함된 문서를 반환하지 않을 수 있습니다.iframe예를 들어 다음과 같습니다.

  • 컨테이너 iframe @ 도메인 1
  • 하위 iframe을 도메인 2로 보냅니다.
  • 하지만 아이프레임에서는...도메인 2는 도메인 3으로 리다이렉트하고(즉, 인증을 위해, 아마도 SAML), 다음으로 도메인 3은 도메인 2로 리다이렉트 합니다(즉, 표준 SAML 기술인 폼 제출()).
  • 의 경우 "iframe"document.referrer도메인 1이 아닌 도메인 3이 됩니다.

document.location 는 "Location 객체(문서 URL에 대한 정보를 포함하는 Location 객체)"를 나타냅니다.아마 현재 문서, 즉 현재 열려 있는 iframe일 것입니다.언제window.location === window.parent.locationiframe 입니다href포함된 부모의 것과 동일합니다.href.

이 문제에 대한 간단한 해결 방법을 방금 발견했는데, 이에 대해 언급하는 논의는 어디에서도 찾을 수 없었습니다.부모 프레임을 제어할 필요가 있습니다.

iFrame에서 src="http://www.example.com/mypage.php"를 원하는 경우

iframe을 지정하기 위한 HTML 대신 javascript를 사용하여 iframe용 HTML을 작성하고 "빌드 시" javascript를 통해 부모 URL을 가져와 다음과 같이 src 타겟의 쿼리 문자열에 URL GET 파라미터로 전송합니다.

<script type="text/javascript">
  url = parent.document.URL;
  document.write('<iframe src="http://example.com/mydata/page.php?url=' + url + '"></iframe>');
</script>

그런 다음 원하는 URL 변수(이 경우 "url")를 얻기 위해 URL 문자열을 구문 분석하는 javascript URL 구문 분석 함수를 찾습니다.

여기서 훌륭한 URL 문자열 파서를 찾았습니다.http://www.netlobo.com/url_query_string_javascript.html

iframe이 다른 도메인(크로스 도메인)에서 온 경우, 다음과 같이 사용할 필요가 있습니다.

var currentUrl = document.referrer;

그리고 여기 메인 URL이 있습니다!

나올 예요.document.location.ancestorOrigins[0]상위 도메인 이름을 반환합니다.

네 말이 맞아.iframe을 사용할 경우 하위 도메인은 여전히 개별 도메인으로 간주됩니다.를 사용하여 메시지를 전달할 수 있지만 다른 JS API는 의도적으로 액세스할 수 없게 되어 있습니다.

콘텍스트에 따라서도 URL을 취득할 수 있습니다.자세한 내용은 다른 답변을 참조하십시오.

및 서브도메인의는, 「」를 할 수 .document.domainjavascriptjavascript를 .

부모 프레임과 iframe 모두 document.domain을 공통으로 설정해야 합니다.

ㅇㅇㅇ.www.foo.mydomain.com ★★★★★★★★★★★★★★★★★」api.foo.mydomain.com는 각각 할 수 있습니다.foo.mydomain.com 그냥 '그냥'일 수도 있어요.mydomain.com수 것(둘 다 수 둘 다 양립할 수 없습니다.com의 이유로 ), 「」, 「」, 「...」를 참조해 주세요.

또한 document.domain은 일방통행 도로입니다.다음 3개의 스테이트먼트를 순서대로 실행하는 것을 검토해 주십시오.

// assume we're starting at www.foo.mydomain.com
document.domain = "foo.mydomain.com" // works
document.domain = "mydomain.com" // works
document.domain = "foo.mydomain.com" // throws a security exception

최신 브라우저에서는 window.post Message를 사용하여 오리진 간에 통신할 수도 있지만 IE6에서는 작동하지 않습니다.https://developer.mozilla.org/en/DOM/window.postMessage

시험해 보세요:

document.referrer

변경 시 호스트가 "referrer"인 iframe 상태가 됩니다.

이 질문에는 많은 답변이 있지만, 지원이나 신뢰성에 있어서는 어느 것 하나 확실히 최고가 아닙니다.

옵션들

  • window.location.ancestorOrigins[0]부모 URL을 가져오지만 이 api는 크롬 브라우저에서만 작동합니다(지원 참조).또, 네스트 된 iframe도 서포트하고 있습니다.여기서 하위의 자녀는 각 부모 iframe의 URL 에 액세스 할 수 있습니다.
  • document.referrer가장 일반적인 답변이지만 항상 신뢰할 수 있는 것은 아닙니다.

동작하지 않는 것

  • window.parent.location.href. 부모와 자녀가 다른 도메인에 있는 경우 이 api는 최신 브라우저(여기를 참조)에 의해 차단되어 오류가 발생합니다.

권고

만약 지원된다면, 나는 더 좋다.window.location.ancestorOrigins[0].document.referrer동작은 가능하지만 신뢰성이 떨어지기 때문에 폴백 옵션입니다.문서 참조기를 사용하는 경우, 네비게이션 또는 리디렉션 전에 첫 번째 프레임 페이지 로드 시 호출하여 상위 주소를 가져옵니다.

var url = (window.location != window.parent.location) ? document.referrer: document.location;

위의 예에서는 스크립트가 iframe 내에서 실행되고 있을 때 이미 동작하고 있었지만 iframe 외부에서 실행되었을 때 URL을 취득하지 않았기 때문에 약간의 조정이 필요했습니다.

var url = (window.location != window.parent.location) ? document.referrer: document.location.href;

난 이것에 대해 문제가 있었다.iframe grab에서 페이지를 처음 로드할 때 php와 같은 언어를 사용하는 경우$_SERVER['HTTP_REFFERER']세션 변수로 설정합니다.

이렇게 하면 페이지가 iframe에 로드될 때 페이지를 로드한 페이지의 완전한 부모 URL 및 쿼리 문자열을 알 수 있습니다.크로스 브라우저 보안에서는 도메인이 다른 경우 window.parent에 의존하는 것은 다소 골칫거리입니다.

내가 찾은 사건에서$_SERVER['HTTP_REFERER']동작하지 않습니다(Safari, 당신을 보고 있습니다).$_SERVER['REDIRECT_SCRIPT_URI']유용한 백업이 되었습니다.

이전 솔루션을 사용할 수 없었지만 iframe scr을 다음과 같이 설정하면http:otherdomain.com/page.htm?from=thisdomain.com/thisfolder 추출물에서 는 할 수 .thisdomain.com/thisfolder자바스크립트

var myString = document.location.toString();
var mySplitResult = myString.split("=");
fromString = mySplitResult[1];

PHP $_SERVER['의 문제HTTP_REFFER']는 상위 페이지로 이동한 페이지의 완전 수식 페이지 URL을 제공하는 것입니다.이것은 상위 페이지와 동일하지 않습니다.게다가 상위 페이지의 URL을 입력했기 때문에 http_referer가 없는 경우도 있습니다.따라서 yahoo.com에서 당신의 부모 페이지로 이동하면 yahoo.com이 당신의 페이지가 아닌 http_comparrer가 됩니다.

크롬에서는 위치를 사용할 수 있습니다.parentOrigins 모든 상위 URL을 반환합니다.

부모 오리진 취득을 위한 크로스 브라우저 스크립트가 있습니다.

private getParentOrigin() {
  const locationAreDisctint = (window.location !== window.parent.location);
  const parentOrigin = ((locationAreDisctint ? document.referrer : document.location) || "").toString();

  if (parentOrigin) {
    return new URL(parentOrigin).origin;
  }

  const currentLocation = document.location;

  if (currentLocation.ancestorOrigins && currentLocation.ancestorOrigins.length) {
    return currentLocation.ancestorOrigins[0];
  }

  return "";
}

이 코드는 Chrome 및 Firefox에서 작동합니다.

iframe src URL에 접속할 수 있었습니다.

window.document.URL

나는 그의 것이 매우 오래되었다는 것을 알지만 아무도 쿠키를 한 도메인에서 다른 도메인으로 넘기는 것을 추천하지 않았다.할 수 ..basedomain.com

그러면 쿠키를 통해 필요한 모든 데이터를 공유할 수 있습니다.

모든 부모 Iframe 함수 및 HTML 가져오기

var parent = $(window.frameElement).parent();
        //alert(parent+"TESTING");
        var parentElement=window.frameElement.parentElement.parentElement.parentElement.parentElement;
        var Ifram=parentElement.children;      
        var GetUframClass=Ifram[9].ownerDocument.activeElement.className;
        var Decision_URLLl=parentElement.ownerDocument.activeElement.contentDocument.URL;

언급URL : https://stackoverflow.com/questions/3420004/access-parent-url-from-iframe

반응형