2009-01-20 10 views
6

Ostatnio mieliśmy problem z tym, że inne witryny obsługują witrynę e-commerce w ramach zestawu ramek, w którym nasza witryna (z załączonym identyfikatorem afiliacyjnym sprawców) jest jedyną treścią w jednej ramce o pełnej szerokości. Zasadniczo wygląda i czuje się jak nasza strona z ich adresem URL na górze. Możemy odciąć ich afiliacyjny identyfikator, co sprawiłoby, że byłoby to bezcelowe, ale to nie przeszkadza przyszłym przestępcom robić to samo, dopóki się o tym nie dowiemy.Czy można uniemożliwić działanie naszej witryny wewnątrz zestawu ramek innej domeny lub ramki IFrame?

Czy istnieje ogólny sposób (poprzez JavaScript, który pojawia się na każdej stronie?), Aby temu zapobiec? Zauważ, że dodawanie celów do wszystkich linków nie jest możliwe, ale dodanie fragmentu JS do wszystkich stron jest, ponieważ części nagłówka i stopki są udostępniane w sieci z jednego źródła.

Inną możliwością byłoby na poziomie serwera Apache (jeśli jest coś, co moglibyśmy zrobić po stronie serwera), ponieważ przekazujemy wszystkie żądania poprzez przepisywanie przez mod.

Zauważ, że byłoby to niezbędne do parapet pozwalają stron do załadowania wewnątrz ramki IFrame, jeśli strona rodzic pochodzi z naszej domenie, jak czynimy ważny wykorzystanie IFrames

Odpowiedz

3

wierzę właściwa nowoczesna metoda do osiągnięcia tego celu jest z The X-Frame-Options response header.

Z MDN:

X-Frame-Options nagłówka odpowiedzi HTTP może być używany do wskazania, czy dana przeglądarka powinna mieć prawo do renderowania strony w ramce lub iframe. Witryny mogą to wykorzystać, aby uniknąć ataków typu "clickjacking", zapewniając, że ich zawartość nie jest osadzona w innych witrynach.

Spójrz: How to prevent IFRAME from redirecting top-level window

+0

OK. Edytowałem. –

+0

To jest poprawna odpowiedź na rok 2017. OWASP ma świetną [Cheat Sheet Defense Clickation] (https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet), która omawia możliwości ataku i remediacji. – thirdender

+0

Zaktualizowałem wybraną odpowiedź na moje stare pytanie, biorąc pod uwagę nowoczesne sprawdzone metody – Peter

0

tylko zgadywanie tutaj ... ale co jeśli używasz javascript, aby zadzwonić do okna nadrzędnego, aby uzyskać dostęp do jego obiektu dokumentu? Możesz sprawdzić, czy nie jest ona pusta, a jeśli istnieje okno nadrzędne (co oznacza, że ​​ramka załadowała twoją witrynę), możesz ukryć cały html przez javascript ...

2

Zobacz ten artykuł. Oferuje dość proste rozwiązanie do wykrywania ramek i ich wyłamywania.

How to Break Out of Frames with JavaScript

Ponadto, wziąłbym go o krok dalej. Za każdym razem, gdy wykryjesz ramkę, chwyć identyfikator afiliacyjny naruszającego framer witryny i przesyłaj go do serwera za pomocą AJAX wraz z adresem URL, którego używają. Następnie, automatycznie lub ręcznie, możesz zweryfikować, czy tworzą ramkę Twojej witryny, i anulować kod partnerski po jednym naraz.

5

Słyszałem, że rozwiązania tego problemu są określane jako "scenariusz poppera". Szybki google wyświetla this thread. Wygląda na to, jest to jeden z najprostszych:

if (window != top) top.location.href = location.href; 
+0

To byłoby całkiem fajną, strona hacking próbuje „iframe” witryny, będzie przekierowany do witryny w oknie nadrzędnym :) – Jobo

+0

można również napisać to jako 'if (top! == self) top.location.href = self.location.href' - to samo, ale bardziej symetrycznie – Christoph

+0

Istnieje wiele obejść dla wielu z tych" skryptów poppera klatek ", , więc nie powinny już być używany. Zobacz OWASP [Clickjacking Defense Cheat Sheet: Niebezpieczne skrypty niepracujące NIE UŻYWAJĄ] (https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet#Insecure_Non-Working_Scripts_DO_NOT_USE) – thirdender