Как виджеты Google+ +1 вырываются из iframe?

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

границы iframe

So:

  1. Какая? Как!?

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

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


person Alan H.    schedule 05.09.2011    source источник


Ответы (2)


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

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

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

В этой ситуации вы ДОЛЖНЫ доверять Google, но Google не доверяет вам.

Есть способы уменьшить влияние этих веб-жучков на конфиденциальность.

person rook    schedule 05.09.2011
comment
Отличный материал — я ценю ваш комментарий о XSS, который имеет большой смысл. Но я все еще в чем-то не уверен. Контент, о котором идет речь, выглядит так, как будто он не входит в <iframe>, что, по вашему предположению, может быть правдой (и объяснить, как это возможно). Но похоже, что это не так, из проверки DOM. И это раскроет мое имя и адрес Gmail злоумышленникам (если только они не будут заключены во второй iframe)! - person Alan H.; 06.09.2011
comment
@ Алан Х. Да, они делают какие-то странные вещи с динамическими фреймами. Если вы нажмете +1, вы получите окно, в котором вы добавите комментарий. Если вы загрузите firebug и проверите этот элемент, вы получите iframe src для plusone.google.com/u/0/_/+/fastbutton?url=... Этот iframe содержит токен CSRF для отправки в google+. - person rook; 06.09.2011
comment
В некоторых случаях вы можете избежать перехвата файлов cookie, установив для них значение httponly. - person seppo0010; 11.09.2011
comment
@ seppo0010 да, но это не останавливает XHR. - person rook; 11.09.2011

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

person xrd    schedule 06.09.2011
comment
Как пояснил Рук в своем ответе, «iframe» используется для предотвращения использования сайтом, использующим код виджета Google +1, атаки CSRF для перехода по ссылке (и искусственного повышения рейтинга +1 сайта). Это та часть, где Google вам не доверяет. - person Mikko Rantalainen; 19.08.2013