프레임 버스터 버스터 ... 버스터 코드 필요


422

다른 사이트가 다음 사이트를 "프레임"하지 않기를 원한다고 가정 해 봅시다 <iframe>.

<iframe src="http://example.org"></iframe>

따라서 모든 페이지에 프레임 방지, 프레임 버스 팅 JavaScript를 삽입합니다.

/* break us out of any containing iframes */
if (top != self) { top.location.replace(self.location.href); }

우수한! 이제 포함 된 iframe을 자동으로 "버스트"하거나 분리합니다. 작은 문제 하나만 빼고

그것이 나오는 것에 따라, 당신의 프레임 파열 코드가 파열 될 수있다 , 다음과 같이 :

<script type="text/javascript">
    var prevent_bust = 0  
    window.onbeforeunload = function() { prevent_bust++ }  
    setInterval(function() {  
      if (prevent_bust > 0) {  
        prevent_bust -= 2  
        window.top.location = 'http://example.org/page-which-responds-with-204'  
      }  
    }, 1)  
</script>

이 코드는 다음을 수행합니다.

  • 브라우저가 window.onbeforeunload이벤트 핸들러 를 통해 현재 페이지에서 탐색하려고 할 때마다 카운터를 증가시킵니다.
  • 를 통해 밀리 초마다 실행되는 타이머를 설정 setInterval()하고 카운터가 증가한 것을 발견하면 현재 위치를 공격자의 제어 서버로 변경합니다.
  • 해당 서버는 HTTP 상태 코드가 204 인 페이지를 제공 하며 브라우저는 어디에서나 탐색하지 않습니다.

내 질문은-실제 문제 보다 JavaScript 퍼즐에 가깝습니다. 프레임 버스터 버스터를 어떻게 물리 칠 수 있습니까?

몇 가지 생각이 있었지만 테스트에서 아무런 효과가 없었습니다.

  • onbeforeunload를 통해 이벤트를 지우려고 시도해 onbeforeunload = null도 아무런 효과가 없었습니다.
  • alert()중지 된 프로세스를 추가하면 사용자에게 진행 중임을 알릴 수 있지만 코드를 방해하지는 않습니다. 확인을 클릭하면 버스 팅이 정상적으로 계속됩니다
  • setInterval()타이머 를 지우는 방법을 생각할 수 없습니다

나는 JavaScript 프로그래머가 아니므로 여기 당신에게 내 도전이 있습니다 : 버스터, 프레임 버스터 버스터를 터뜨릴 수 있습니까?


6
나는 확실히 프레임 - 버스터 버스터가 실제로 작동 아니에요 ... 나는 (내가 204을 반환하도록 설정 핸들러로 리디렉션)을 테스트 할 때, 그것은 탐색에서 저를 방지 어디서나 타이핑 물건을 포함하여 - 외부 페이지를 주소 표시 줄에! 어디든 가려면 브라우저 탭을 닫고 새 탭을 열어야합니다. 다시 말하면, 버스 팅하려는 프레임 버스터 버스터가 시작되기 때문에 버스트되기 때문에 이것이 솔루션이 필요한지 확실하지 않습니다. :) (또는 내가 결코 할 수없는 테스트를 망쳐
놓았다

16
위에 게시 된 프레임 버스터 버스터 코드 인 Matt는 확실히 작동합니다. A .. 어 .. 내 친구 .. 그것에 대해 .. 또는 뭔가. :)
Jeff Atwood 2016

10
Jeff, 같은 도메인에서 두 창을 모두 테스트하고 있습니까? 그렇지 않은 경우 보안 제한으로 인해 'onBeforeUnload'를 수정하지 못하기 때문에
James

29
참고 : 예를 게시 할 때 example.orgRFC 2606에 지정된 도메인을 사용하십시오. ietf.org/rfc/rfc2606.txt
Christoph

3
카운터 카운터 대책의 일반적인 주제와 관련하여 : galactanet.com/comic/view.php?strip=209
Joey

답변:


149

이것이 가능한지 확실하지 않습니다.하지만 프레임을 깰 수 없다면 왜 경고를 표시하지 않습니까? 예를 들어, 페이지가 "맨 위 페이지"가 ​​아닌 경우 프레임을 끊으려고 시도하는 setInterval 메소드를 작성하십시오. 3 또는 4 시도 후에도 여전히 페이지가 최상위 페이지가 아닌 경우 전체 페이지 (모달 상자)를 메시지와 같은 링크로 덮는 div 요소를 만듭니다.

승인되지 않은 프레임 창에서이 페이지를보고 있습니다-(Blah blah ... 잠재적 보안 문제)

이 문제를 해결하려면이 링크를 클릭하십시오

최고는 아니지만 그들이 그 길을 스크립트로 만들 수있는 방법을 보지 못했습니다.


2
나는 이것을 시도했고 이것이 효과가있다. 이 솔루션에 대해 좋아하는 또 다른 부분은 콘텐츠로 이동하기 전에 사용자가 어떤 종류의 사이트를 방문했는지 사용자에게 알려주는 것입니다. 샘플 코드 : if (parent.frames.length> 0) {top.location.replace (document.location); setTimeout (function () {if (parent.frames.length> 0) {document.location = " google.com ";}}, 10); }
교황

이것은 악용을 피하는 좋은 방법 일뿐만 아니라 사이트를 들여다보기 위해 iframe을 사용하려는 사이트에게는 매우 친숙합니다. 이상적으로는 사이트 홈페이지의 스크린 샷을 사용해야한다고 생각합니다. 왜냐하면 위에 겹쳐진 iframe에서 사용할 수없는 이유에 대한 설명이 있습니다.
wheresrhys

33
이것이 Facebook이하는 방식입니다.
shamittomar

2
그러나 파열 사이트가 피싱 링크 또는 그
밖의

7
또 다른 아이디어는 다음과 같이 페이지를 완전히 document.write("");
지우는

211

6
브라우저에서 .exe를 지원하는 것은 훌륭합니다. 의심 할 여지가 없습니다. "대부분의 브라우저"라고 말하면 어떤 브라우저입니까? IE8 이외의 다른 소스는 찾을 수 없습니다.
Jeff Atwood

2
다음은 테스트 페이지는 다음과 같습니다 enhanceie.com/test/clickjack . Chrome 4.1.249.1042를 지원합니다. Opera 10.50을 지원합니다. Firefox 3.6.2는 아직 지원하지 않습니다. Safari 4.0.3이 지원됩니다.
EricLaw

1
Firefox 3.6.9는이를 기본적으로 지원하고 ( hackademix.net/2010/08/31/… ), NoScript를 사용하는 모든 Firefox 설치는 2009 년 초부터 hackademix.net/2009/01/29/x-frame- 옵션 -에 - 파이어 폭스 )
ssokolow

4
이것을 자바 스크립트 프레임 버스터와 결합하는 것이 가장 좋습니다.
Jesse Weigert

1
또는 이것을이 페이지의 12 월 12 일 답변과 결합하십시오 : stackoverflow.com/a/13708510/328397
goodguys_activate

34

우리는 http://seclab.stanford.edu/websec/framebusting/framebust.pdf 의 웹 사이트 중 하나에서 다음 접근 방식을 사용했습니다 .

<style>
 body { 
 display : none   
}
</style>
<script>
if(self == top) {
document.getElementsByTagName("body")[0].style.display = 'block';
}
else{
top.location = self.location;
}
</script>

3
빙고! 이것이 최고의 답변이기 때문에 왜 이것이 더 많이지지되지 않는지 확실하지 않습니다 (X-Frame-Options 답변 옆에 있지만 둘 다 결합하는 것이 가장 좋습니다)
Jesse Weigert

1
이 답변 또는 광산을 선택해야합니다. :)

나는 이것과 X-Frame-Options : 거부 답변을 모두 사용한다는 아이디어를 좋아합니다.
Max West

이것은 IMHO에게 큰 부담 인 JS가 필요합니다.
Navin

1
+1-X-FRAME-OPTIONS를 사용할 수 없을 때 가장 적합한 답변입니다. (예를 들어, 리퍼러에 따라 조건부로 허용 또는 거부해야하는 경우)
Jay Sullivan

29

이 결과를 얻었고 적어도 Firefox와 Opera 브라우저에서 작동하는 것 같습니다.

if(top != self) {
 top.onbeforeunload = function() {};
 top.location.replace(self.location.href);
}

2
Jani와 Jeff의 솔루션 (한 번 편집)은 모두 정확하고 동일하게 작동합니다. 그의 해결책은 어떤 편집없이 바로 작동하기 때문에 야니가 동의 제공
제프 앳 우드

29
이것은 두 개의 창이 동일한 도메인 인 경우에만 작동합니다. 프레임에서 벗어나려고 할 때 드물게 발생합니다.
James

중첩 된 프레임이있는 경우 프레임 체인을 걸어서 onbeforeunload맨 위에있는 핸들이 아닌 모든 핸들러를 제거해야합니다 !
Christoph

12
중요한 설명 : iframe src =가 동적으로 설정되어 도메인 간 정책이 적용되지 않았기 때문에 이것이 효과적이었습니다. 정적 src에서 JP는 절대적으로 맞습니다.이 작동하지 않습니다.
Jeff Atwood

5
이제 누군가 프레임 버스터 버스터 버스터 버스터를 만들 수 있습니까?
Epaga

23

iframe 용 샌드 박스를 도입 한 현재 HTML5 표준을 고려할 때이 페이지에서 제공하는 모든 프레임 버스 팅 코드는 ibox가 다음을 제한하지 않기 때문에 샌드 박스를 사용할 때 비활성화 될 수 있습니다.

allow-forms: Allow form submissions.
allow-popups: Allow opening popup windows.
allow-pointer-lock: Allow access to pointer movement and pointer lock.
allow-same-origin: Allow access to DOM objects when the iframe loaded form same origin
allow-scripts: Allow executing scripts inside iframe
allow-top-navigation: Allow navigation to top level window

참조하십시오 : http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-sandbox

이제 공격자가 다음 코드를 사용하여 iframe에서 사이트를 호스팅한다고 가정 해보십시오.

<iframe src="URI" sandbox></iframe>

그러면 모든 JavaScript 프레임 버스 팅 코드가 실패합니다.

모든 프레임 버스 코드를 확인한 후에는이 방어 기능 만 모든 경우에 작동합니다.

<style id="antiClickjack">body{display:none !important;}</style>
<script type="text/javascript">
   if (self === top) {
       var antiClickjack = document.getElementById("antiClickjack");
       antiClickjack.parentNode.removeChild(antiClickjack);
   } else {
       top.location = self.location;
   }
</script>

Gustav Rydstedt, Elie Bursztein, Dan Boneh 및 Collin Jackson 이 처음 제안한 것 (2010)


19

잠시 동안 이것을 숙고 한 후에 나는 이것이 누가 상사인지 보여줄 것이라고 믿는다.

if(top != self) {
  window.open(location.href, '_top');
}

_top대상 매개 변수로 사용 window.open()하면 동일한 창에서 실행됩니다.


6
if (top != self) {
  top.location.replace(location);
  location.replace("about:blank"); // want me framed? no way!
}

6

나는 용감하고이 모자에있는 고리에 모자를 던질 것입니다.

여기 내 시도가 있는데, 테스트 한 모든 곳에서 작동하는 것 같습니다 (Chrome20, IE8 및 FF14).

(function() {
    if (top == self) {
        return;
    }

    setInterval(function() {
        top.location.replace(document.location);
        setTimeout(function() {
            var xhr = new XMLHttpRequest();
            xhr.open(
                'get',
                'http://mysite.tld/page-that-takes-a-while-to-load',
                false
            );
            xhr.send(null);
        }, 0);
    }, 1);
}());

이 코드를에 넣고 악성 코드와 논쟁하기 전에 내 페이지가 렌더링되도록하기 위해이 페이지를 <head>호출했습니다. <body>이것이 YMMV가 최선의 방법인지 모릅니다.

어떻게 작동합니까?

... 내가 듣고 물어 - 잘 정직한 대답은, 내가하지 않습니다 정말 알고있다. 테스트하는 모든 곳에서 작동하게 만드는 데 많은 혼란이 있었고, 그 효과는 실행 위치에 따라 약간 다릅니다.

그 뒤에 생각이 있습니다.

  • 가능한 한 가장 낮은 간격으로 실행되도록 기능을 설정하십시오. 내가 본 현실적인 솔루션의 기본 개념은 프레임 버스터 버스터보다 많은 이벤트로 스케줄러를 채우는 것입니다.
  • 함수가 실행될 때마다 상단 프레임의 위치를 ​​변경하십시오. 상당히 명백한 요구 사항.
  • 또한 기능이 즉시 실행되도록 예약하는 데 시간이 오래 걸릴 수 있습니다 (따라서 프레임 버스터 버스터가 위치 변경을 방해하지 않도록 차단). 동기식 XMLHttpRequest는 사용자 상호 작용이 필요하지 않고 사용자의 CPU 시간을 씹지 않는 것으로 생각할 수있는 유일한 메커니즘이기 때문에 동기 XMLHttpRequest를 선택했습니다.

http://mysite.tld/page-that-takes-a-while-to-load(XHR의 대상)을 위해 다음과 같은 PHP 스크립트를 사용했습니다.

<?php sleep(5);

무슨 일이야?

  • XHR이 완료되는 동안 Chrome과 Firefox가 5 초 동안 기다린 다음 프레임 된 페이지의 URL로 리디렉션합니다.
  • IE는 거의 즉시 리디렉션

Chrome 및 Firefox에서 대기 시간을 피할 수 없습니까?

분명히 아닙니다. 처음에는 XHR이 404를 반환하는 URL을 가리 켰습니다. Firefox에서는 작동하지 않았습니다. 그런 다음 sleep(5);이 답변을 얻기 위해 마침내 착륙 한 접근법을 시도한 다음 다양한 방법으로 수면 길이로 놀기 시작했습니다. 나는 행동에 실제 패턴을 찾을 수는 없지만 너무 짧으면 Firefox가 공을 재생할 수 없다는 것을 알았습니다 (Chrome 및 IE는 상당히 잘 동작하는 것 같습니다). 나는 "너무 짧다"라는 정의가 실제 용어로 무엇인지 모르지만 매 5 초 마다 작동하는 것 같습니다 .


지나가는 자바 스크립트 닌자가 어떤 일이 일어나고 있는지 조금 더 잘 설명하고 싶다면 왜 이것이 잘못되었거나 신뢰할 수 없는지, 그들이 본 것 중 최악의 코드 인 이유는 무엇입니까?


걱정스러운 문장을 모두 제거 할 수있을 것 같습니다
mplungjan

6

2015 년 기준으로 CSP2의 frame-ancestors지시문을 사용해야 합니다. 이것은 HTTP 응답 헤더를 통해 구현됩니다.

예 :

Content-Security-Policy: frame-ancestors 'none'

물론 CSP2를 지원하는 브라우저는 많지 않으므로 이전 X-Frame-Options헤더 를 포함하는 것이 좋습니다 .

X-Frame-Options: DENY

어쨌든 두 브라우저를 모두 포함하는 것이 좋습니다. 그렇지 않으면 사이트가 기존 브라우저의 클릭 재킹 공격에 계속 취약 할 것입니다. 요즘 대부분의 브라우저는 자동으로 업데이트되지만 레거시 응용 프로그램 호환성으로 인해 회사 사용자는 이전 버전의 Internet Explorer에 계속 갇히게됩니다.


1
모든 주요 브라우저는 이제 CSP를 지원합니다. 이것은 2019 년의 정답이며 미래입니다.
Stephen R

5

자, 우리는 그것이 프레임 안에 있음을 알고 있습니다. 따라서 경로를 GET 변수로 사용하는 다른 특수 페이지를 location.href합니다. 이제 사용자에게 진행 상황을 설명하고 target = "_ TOP"옵션과의 링크를 제공합니다. 간단하고 아마도 작동하지는 않지만 (테스트하지는 않았지만) 사용자 상호 작용이 필요합니다. 어쩌면 당신은 사용자에게 문제의 사이트를 지적하고 어딘가에 클릭 재커의 부끄러움을 만들 수 있습니다.


5

제안 된 모든 솔루션은 상단 창의 위치를 ​​직접 변경합니다. 사용자가 프레임을 원한다면 어떻게해야합니까? 예를 들어 검색 엔진 이미지 결과의 상단 프레임.

기본적으로 모든 입력 (링크, 양식 및 입력 요소)이 비활성화되고 활성화 될 때 아무것도하지 않는 프로토 타입을 작성했습니다.

포함하는 프레임이 감지되면 입력이 비활성화 된 상태로 유지되고 페이지 상단에 경고 메시지가 표시됩니다. 경고 메시지에는 새 창에서 안전한 버전의 페이지를 여는 링크가 포함되어 있습니다. 이렇게하면 페이지가 클릭 재킹에 사용되는 것을 방지하면서도 사용자가 다른 상황에서 내용을 볼 수 있습니다.

포함 프레임이 감지되지 않으면 입력이 활성화 된 것입니다.

코드는 다음과 같습니다. 표준 HTML 속성을 안전한 값으로 설정하고 실제 값을 포함하는 추가 속성을 추가해야합니다. 아마도 불완전하고 완전한 안전을 위해 추가 속성 (이벤트 핸들러에 대해 생각하고 있음)은 동일한 방식으로 처리해야합니다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
  <head>
    <title></title>
    <script><!--
      function replaceAttributeValuesWithActualOnes( array, attributeName, actualValueAttributeName, additionalProcessor ) {
        for ( var elementIndex = 0; elementIndex < array.length; elementIndex += 1 ) {
          var element = array[ elementIndex ];
          var actualValue = element.getAttribute( actualValueAttributeName );
          if ( actualValue != null ) {
            element[ attributeName ] = actualValue;
          }

          if ( additionalProcessor != null ) {
            additionalProcessor( element );
          }
        }
      }

      function detectFraming() {
        if ( top != self ) {
          document.getElementById( "framingWarning" ).style.display = "block";
        } else {
          replaceAttributeValuesWithActualOnes( document.links, "href", "acme:href" );

          replaceAttributeValuesWithActualOnes( document.forms, "action", "acme:action", function ( form ) {
            replaceAttributeValuesWithActualOnes( form.elements, "disabled", "acme:disabled" );
          });
        }
      }
      // -->
    </script>
  </head>
  <body onload="detectFraming()">
    <div id="framingWarning" style="display: none; border-style: solid; border-width: 4px; border-color: #F00; padding: 6px; background-color: #FFF; color: #F00;">
      <div>
        <b>SECURITY WARNING</b>: Acme App is displayed inside another page.
        To make sure your data is safe this page has been disabled.<br>
        <a href="framing-detection.html" target="_blank" style="color: #090">Continue working safely in a new tab/window</a>
      </div>
    </div>
    <p>
      Content. <a href="#" acme:href="javascript:window.alert( 'Action performed' );">Do something</a>
    </p>
    <form name="acmeForm" action="#" acme:action="real-action.html">
      <p>Name: <input type="text" name="name" value="" disabled="disabled" acme:disabled=""></p>
      <p><input type="submit" name="save" value="Save" disabled="disabled" acme:disabled=""></p>
    </form>
  </body>
</html>

이것의 문제는 프레임 메이커가 position : absolute를 사용하여 비활성 버튼 위에 활성 버튼을 배치 할 수 있으며 사용자는 웹 페이지를보고 버튼을 클릭한다고 생각합니다.
jmucchiello

경고 메시지는 계속 표시되지만 제안한대로 안전 페이지 링크를 쉽게 덮을 수 있습니다. 그러나 단순히 페이지를 복사하고 동일한 효과를 얻을 수 있다면 사람들이 친숙한 버튼을 클릭하도록 페이지를 구성하는 데 어려움을 겪는 이유는 무엇입니까? 위의 코드는 주로 클릭 재킹을 방지합니다. 내 페이지를 다른 페이지 위에 보이지 않게 표시하면 내 사이트에서 작업을 호출 할 수 없습니다.
Johan Stuyts

이것이 IE8 제한 영역 프레임 또는 Chrome 샌드 박스 프레임에 배치되면 Javascript가 실행되지 않습니다. 이 경우 어떤 수정이 필요한지 궁금합니다
goodguys_activate

4

글쎄, 당신은 카운터의 가치를 수정할 수 있지만, 그것은 분명히 취성 솔루션입니다. 사이트가 프레임 내에 있지 않다고 판단한 후에 AJAX를 통해 콘텐츠를로드 할 수 있습니다. 훌륭한 솔루션은 아니지만 on beforeload 이벤트 (나는 가정 중)가 발생하지 않도록하십시오.

편집 : 다른 아이디어. 프레임에있는 것을 감지하면 원하는 URL로 연결되는 링크를 클릭하기 전에 사용자에게 자바 스크립트를 비활성화하도록 요청하십시오 (쿼리 문자열을 전달하여 사용자가 한 번 자바 스크립트를 다시 활성화 할 수 있음을 페이지에 알리도록 요청합니다) 거기 있어요).

편집 2 : 핵화-프레임에 있다고 감지되면 문서 본문 내용을 삭제하고 불쾌한 메시지를 인쇄하십시오.

편집 3 : 최상위 문서를 열거하고 모든 기능을 null로 설정 할 수 있습니까?


Outlook (이전의 Hotmail)은 프레임에서 벗어날 수없는 경우 '핵을 가져옵니다'- <body>내부 의 전체 내용을 <plaintext>태그 세트로 설정합니다 display: none. 매우 효과적입니다.
uınbɐɥs

4

버스터 코드 바로 뒤에 경고를 추가하면 경고가 자바 스크립트 스레드를 중단하고 페이지가로드되도록합니다. 이것이 StackOverflow의 기능이며, 프레임 버스 팅 버스터를 사용하더라도 iframe에서 버스트됩니다. 간단한 테스트 페이지에서도 작동했습니다. 이것은 Windows의 Firefox 3.5 및 IE7에서만 테스트되었습니다.

암호:

<script type="text/javascript">
if (top != self){
  top.location.replace(self.location.href);
  alert("for security reasons bla bla bla");
}
</script>

3

거의 다 갔다고 생각합니다. 시도해 보셨습니까?

window.parent.onbeforeunload = null;
window.parent.location.replace(self.location.href);

또는 대안 적으로 :

window.parent.prevent_bust = 0;

참고 : 실제로 이것을 테스트하지 않았습니다.


1
코드 샘플을 편집했지만 (부모에 대한 테스트가 실패한 것 같습니다) 편집 된 버전이 작동하는 것 같습니다!
Jeff Atwood 2016

1
멋있는. 테스트되지 않은 코드로 대답하는 것은 까다 롭습니다. 적어도 아이디어를 얻지 못하고 불쌍한 어 커가 디버그하도록하십시오. :)
Jeff Meatball 양

12
부모가 다른 도메인에 있으면 작동하지 않습니다.
Josh Stodola

2

버스터를 반복해서 호출하는 것은 어떻습니까? 이것은 경쟁 조건을 만들지 만 버스터가 맨 위에 나오기를 바랍니다.

(function() {
    if(top !== self) {
        top.location.href = self.location.href;
        setTimeout(arguments.callee, 0);
    }
})();

2

반환 된 값 setInterval()을 보통 한 자리 숫자 로 보는 경우 일반적으로 한 줄의 코드로 모든 인터럽트를 비활성화 할 수 있습니다.

for (var j = 0 ; j < 256 ; ++j) clearInterval(j)

2

방금 프레임 버스터 버스터 자바 스크립트를 터뜨리는 방법을 얻었을 것입니다. 내 자바 스크립트 함수에서 getElementsByName을 사용하여 프레임 버스터와 실제 프레임 버스터 버스터 스크립트 사이에 루프를 설정했습니다. 이 게시물을 확인하십시오. http://www.phcityonweb.com/frame-buster-buster-buster-2426


0

setInterval 및 setTimeout은 자동 증분 간격을 만듭니다. setTimeout 또는 setInterval이 호출 될 때마다이 숫자는 1 씩 증가하므로 setTimeout을 호출하면 현재 가장 높은 값을 얻게됩니다.

   var currentInterval = 10000;
   currentInterval += setTimeout( gotoHREF, 100 );
   for( var i = 0; i < currentInterval; i++ ) top.clearInterval( i );
   // Include setTimeout to avoid recursive functions.
   for( i = 0; i < currentInterval; i++ )     top.clearTimeout( i );

   function gotoHREF(){
           top.location.href = "http://your.url.here";
   }

거의 10000 개의 동시 setIntervals 및 setTimeouts 작동이없고 setTimeout이 "last interval or timeout created + 1"을 반환하고 top.clearInterval에 여전히 액세스 할 수 있기 때문에 프레임에 대한 블랙 햇 공격을 물리치게됩니다. 위에서 설명한 웹 사이트.


0

하이재킹 프레임 셋, iframe 및 이미지와 같은 콘텐츠를 피하려면 htaccess를 사용하십시오.

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://www\.yoursite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule ^(.*)$ /copyrights.html [L]

예상 대신 저작권 페이지가 표시됩니다.


이는 a) 브라우저 설정 또는 확장으로 인해 또는 참조 페이지가 HTTPS를 사용하지 않기 때문에 단순히 설정되어 있지는 않습니다. <meta name="referrer" …/>b) 링크를 클릭 할 때도 설정되므로 참조 페이지에 대한 링크를 허용하지 않습니다. 인터넷.
Martin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.