W jaki sposób widżety Google+ +1 wyłamują się z ramek iframe?


145

W jakiś sposób umieszczenie kursora myszy nad widżetem Google+ plus jeden może wprowadzić umowę typu podpowiedź, która jest wyraźnie większa niż <iframe>element, w którym się znajduje. Sprawdziłem DOM, aby to potwierdzić. *

granice iframe

Więc:

  1. Co? W jaki sposób!?

  2. Czy nie jest to ogromna okazja do przechwytywania kliknięć, jeśli jest używana złośliwie? (Wyobraź sobie, że ktoś robi MITM dla tych widżetów społecznościowych!)

* Aktualizacja: zobaczyłem, że wiadomość tooltip-y została utworzona w sekundę, dynamicznie iframe.

Odpowiedzi:


181

Widżet Google +1 to JavaScript, który działa w Twojej witrynie i tworzy plik iframe. Ten widżet JavaScript działa w kontekście Twojej witryny i dlatego nie jest ograniczony przez reguły dziedziczenia pochodzenia dla elementów iframe . Dlatego ten widget JavaScript może ustawiać dowolne zdarzenia DOM w witrynie nadrzędnej, nawet jeśli wydaje się to proste iframe.

Inna sprawa, dlaczego Google używa iframe? Dlaczego po prostu nie wygenerować divna stronie? Cóż, ponieważ łącze pochodzi z iframetoken CSRF (fałszowanie żądań między lokacjami) w żądaniu, a witryna nadrzędna nie może odczytać tego tokenu i sfałszować żądania. iframeJest to więc środek zapobiegający CSRF, który opiera się na regułach dziedziczenia pochodzenia, aby chronić się przed złośliwym rodzicem.

Z punktu widzenia ataku jest to bardziej podobne do XSS (cross-site scripting) niż UI-Redress. Dajesz Google dostęp do swojej witryny, a oni mogą przejąć pliki cookie Twoich użytkowników lub działać XmlHttpRequestsprzeciwko Twojej witrynie, jeśli zechcą (ale wtedy ludzie będą ich pozywać za złośliwość i bogactwo).

W tej sytuacji MUSISZ ufać Google, ale Google Ci nie ufa.

Istnieją sposoby na złagodzenie wpływu tych błędów internetowych na prywatność .


Świetna sprawa - doceniam twój komentarz dotyczący XSS, który ma dużo sensu. Jednak nadal nie jestem czegoś pewien. Treść, o której mowa, wygląda na to, że nie mieści się w zakresie <iframe>, który według Ciebie może być prawdziwy (i wyjaśnij, jak to możliwe). Ale nie wydaje się, żeby tak było, po sprawdzeniu DOM. I ujawniłoby moje imię i adres Gmaila złośliwym rodzicom (o ile nie zostało to w sekundę iframe)!
Alan H.

3
@Alan H. Tak, robią dziwne rzeczy z dynamicznymi ramkami iframe. Po kliknięciu +1 otworzy się okno, w którym można dodać komentarz. Jeśli załadujesz firebuga i sprawdzisz ten element, otrzymasz iframe src dla plusone.google.com/u/0 / _ / + / fastbutton? Url = ... Ten iframe zawiera token CSRF do przesłania do Google +.
wieża

W niektórych przypadkach możesz uniknąć przechwytywania plików cookie, ustawiając dla nich opcję httponly.
seppo0010

1
@ seppo0010 tak, ale to nie powstrzymuje XHR.
wieża

3

Google używa elementów iFrame, aby zapobiegać „nieszczelnym standardowym elementom DIV”. Ich okno dialogowe zamykania biblioteki robi to samo. Prawdopodobnie dzieje się tak tylko po to, aby inne treści nie przenikały do ​​przycisku +1. http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/dialog.html .


Jak wyjaśnił Rook w swojej odpowiedzi, <iframe> służy do zapobiegania atakowi CSRF przez witrynę korzystającą z kodu widżetu Google +1 w celu kliknięcia linku (i sztucznym poprawianiu oceny +1 witryny). To jest ta część, w której Google ci nie ufa.
Mikko Rantalainen
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.