Zabójca klatek

Framekiller (lub framebuster lub framebreaker ) to technika używana przez witryny i aplikacje internetowe w celu zapobiegania wyświetlaniu ich stron internetowych w ramce . Ramka jest częścią okna przeglądarki internetowej i może działać jak mniejsze okno. Zabójca ramek jest zwykle używany do zapobiegania ładowaniu witryny z zestawu ramek bez pozwolenia lub jako atak, jak w przypadku przechwytywania kliknięć .

Implementacje

Framekillery są implementowane przy użyciu JavaScript , który sprawdza, czy bieżące okno jest oknem głównym. Zalecanym podejściem jest domyślne zablokowanie renderowania okna i odblokowanie go dopiero po potwierdzeniu, że bieżące okno jest głównym:



       
          
     
          
   
 <  styl  >  html  {  display  :  brak  ;}  <  / styl >  <  skrypt  >  if  (  self  ==  top  )  {  dokument  .  element dokumentu  .  styl  .  wyświetl  =  'blok'  ;  }  inny  {  góra  .  lokalizacja  =  ja  .  lokalizacja  ;  }  <  /script> 

Podejście to zostało zaproponowane w 2010 roku przez Gustava Rydstedta, Elie Burszteina , Dana Boneha i Collina Jacksona w artykule, w którym podkreślono ograniczenia istniejących technik niszczenia klatek wraz z technikami pozwalającymi je ominąć.

Alternatywne rozwiązania

Alternatywnym wyborem jest umożliwienie użytkownikowi określenia, czy pozwolić framekillerowi działać.

   
    
    
       
  
 var  framekiller  =  fałsz  ;  okno  .  onbeforeunload  =  function  ()  {  if  (  framekiller  )  {  return  "..."  ;  // dowolna wiadomość, która pomaga użytkownikowi w podjęciu decyzji  }  }; 

a poniższy kod należy dodać po tagu ramki:


    
    
 // „my_frame” należy zmienić zgodnie z rzeczywistym identyfikatorem ramki w  dokumencie strony   .  getElementById  (  "moja_ramka"  ).  onload  =  funkcja  ()  {  framekiller  =  true  ;  }; 

Oryginalne framekillery

Historycznie, pierwsze skrypty framekillera były tak proste, jak to:

 
      
 <  script  type  =  "text/javascript"  >  if  (  top  !=  self  )  top  .  lokalizacja  .  zamienić  (  lokalizacja  );  <  /script> 

Logika tutaj polegała na wyświetleniu strony, ale sprawdź, czy górna lokalizacja jest taka sama jak bieżąca strona, i zastąp górę bieżącą, jeśli nie. Metodę tę można jednak łatwo ominąć, blokując wykonywanie skryptu framebuster z ramki zewnętrznej.

Ograniczenia Framekillera

JavaScript po stronie klienta opiera się na przeglądarce użytkownika końcowego, która wymusza własne bezpieczeństwo. To sprawia, że ​​jest to korzystny, ale zawodny sposób uniemożliwiający osadzenie Twojej strony na innych stronach. Poniższe sytuacje mogą sprawić, że powyższy skrypt stanie się bezużyteczny:

  • Klient użytkownika nie obsługuje JavaScript.
  • Klient użytkownika obsługuje JavaScript, ale użytkownik wyłączył obsługę.
  • Obsługa JavaScript klienta użytkownika jest wadliwa lub częściowo zaimplementowana.

Zabójca klatek

Element iframe w HTML5 ma atrybut piaskownicy . Wartość atrybutu to zestaw dozwolonych możliwości dla zawartości elementu iframe. Jeśli wartość jest pusta lub nieustawiona, zawartość elementu iframe nie wykona kodu JavaScript i nie pozwoli na nawigację najwyższego poziomu. Określając skrypty zezwalające w oddzielonym spacjami zestawie wyjątków w wartości, element iframe zezwoli na JavaScript, ale nadal nie zezwoli na nawigację najwyższego poziomu, co spowoduje, że zabójcy ramek w ramce iframe będą bezsilni.

Zobacz też

  • Clickjacking - omawia bardziej wyrafinowane metody zapobiegające osadzeniu w ramce, takie jak nagłówek X-Frame-Options