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


145

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

границы iframe

Так:

  1. Какой? Как!?

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

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

Ответы:


181

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

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

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

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

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


Отличный материал - я ценю ваш комментарий re: XSS, который имеет много смысла. Тем не менее, я все еще не уверен в чем-то. Содержание, о котором идет речь, выглядит так, как будто оно не входит в то <iframe>, что, по вашему мнению, может быть правдой (и объясните, как это возможно) Но, похоже, дело не в проверке DOM. И это представило бы мое имя и адрес Gmail злым родителям (если не обернуть за секунду iframe)!
Алан Х.

3
@ Алан Х. Да, они делают странные вещи с динамическими фреймами. Нажав на +1, вы получите окно, в котором вы добавите комментарий. Если вы загрузите firebug и осмотрите этот элемент, то получите iframe src для plusone.google.com/u/0 / _ / + / fastbutton? Url = ... Этот iframe содержит маркер CSRF для отправки в Google +.
ладья

В некоторых случаях вы можете избежать угона Cookie, установив их с помощью httponly.
seppo0010

1
@ seppo0010 да, но это не останавливает XHR.
ладья

3

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


Как объяснил Рук в своем ответе, <iframe> используется, чтобы запретить сайту, использующему код виджета Google +1, использовать CSRF-атаку для самостоятельного перехода по ссылке (и искусственного повышения рейтинга сайта +1). Это та часть, где Google не доверяет вам.
Микко Ранталайнен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.