Как Google+ +1 виджеты выходят из своего iframe?

Каким-то образом, зависание над виджетами Google+ плюс-1 может ввести сделку типа всплывающей подсказки, которая явно больше, чем элемент <iframe>, в котором он содержится. Ive проверил DOM, чтобы подтвердить это. *

границы iframe

Итак:

  • Что? Как!?

  • Разве это не огромная возможность для clickjacking, если используется злонамеренно? (Представьте, что кто-то делает MITM для этих социальных виджетов!)

* Обновление: я увидел, что сообщение tooltip-y было во втором, динамически создаваемом iframe.

Ответ 1

Виджет Google +1 JavaScript, который работает на вашем веб-сайте, который создает iframe. Этот виджет JavaScript работает в контексте вашего веб-сайта и поэтому не ограничивается Правила наследования наследования для iframes. Поэтому этот виджет JavaScript может устанавливать любые события DOM, которые он хочет на родительском сайте, хотя он выглядит просто простым iframe.

Другое дело, почему Google использует iframe? Почему бы просто не создать div на странице? Хорошо, потому что ссылка исходит из iframe, в запросе может быть встроен токен CSRF (подделка запроса на межсайтовый запрос), а родительский сайт не может прочитать этот токен и подделать запрос. Таким образом, iframe является показателем анти-CSRF, который опирается на правила наследования происхождения, чтобы защитить себя от вредоносного родителя.

С точки зрения атаки это больше похоже на XSS (межсайтовый скриптинг), чем на UI-Redress. Вы предоставляете Google доступ к своему сайту, и они могут захватить cookie своих пользователей или выполнить XmlHttpRequests против вашего веб-сайта, если они этого захотят (но тогда люди будут судиться с ними за злонамеренных и богатых).

В этой ситуации вам нужно доверять Google, но Google вам не доверяет.

Существуют способы смягчения влияния этих веб-ошибок на неприкосновенность частной жизни.

Ответ 2

Google использует iFrames для предотвращения "протекающих стандартных DIV". Их диалог с библиотекой закрытия делает то же самое. Вероятно, это просто так, что другой контент не может попасть в кнопку +1. http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/dialog.html.