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