Comment les widgets Google+ +1 sortent-ils de leur iframe?

145

D'une manière ou d'une autre, survoler un widget Google+ plus un peut introduire une offre de type info-bulle qui est clairement plus grande que l' <iframe>élément dans lequel elle est contenue. J'ai inspecté le DOM pour le confirmer. *

frontières iframe

Alors:

  1. Quoi? Comment!?

  2. N'est-ce pas une énorme opportunité de détournement de clics, s'il est utilisé de manière malveillante? (Imaginez quelqu'un faisant un MITM pour ces widgets sociaux!)

* Mise à jour: ce que j'ai vu, c'est que le message tooltip-y était en une seconde, créé dynamiquement iframe.

Alan H.
la source

Réponses:

181

Le widget Google +1 est du JavaScript qui s'exécute sur votre site Web qui crée un fichier iframe. Ce widget JavaScript s'exécute dans le contexte de votre site Web et n'est donc pas contraint par les règles d'héritage d'origine pour les iframes . Par conséquent, ce widget JavaScript peut définir les événements DOM qu'il souhaite sur le site parent, même s'il semble être simple iframe.

Autre chose, pourquoi Google utilise- iframet-il un ? Pourquoi ne pas simplement générer un divsur la page? Eh bien, parce que le lien provient de iframe, un jeton CSRF (falsification de demande intersite) peut être intégré dans la demande et le site parent ne peut pas lire ce jeton et falsifier la demande. Il iframes'agit donc d'une mesure anti-CSRF qui s'appuie sur les règles d'héritage d'origine pour se protéger d'un parent malveillant.

Du point de vue des attaques, cela ressemble plus à XSS (script intersite) qu'à UI-Redress. Vous donnez à Google l'accès à votre site Web et ils pourraient détourner les cookies de vos utilisateurs ou agir XmlHttpRequestscontre votre site Web s'ils le souhaitent (mais les gens les poursuivraient pour être malveillants et riches).

Dans cette situation, vous DEVEZ faire confiance à Google, mais Google ne vous fait pas confiance.

Il existe des moyens d'atténuer l'impact de ces bogues sur la vie privée .

tour
la source
Super truc - j'apprécie votre commentaire concernant XSS, qui a beaucoup de sens. Pourtant, je ne suis toujours pas sûr de quelque chose. Le contenu en question semble ne pas être dans le <iframe>, ce que vous suggérez peut être vrai (et expliquez comment c'est possible). Mais il ne semble pas que ce soit le cas, après avoir inspecté le DOM. Et cela exposerait mon nom et mon adresse Gmail à des parents malveillants (à moins d'être enveloppés dans une seconde iframe)!
Alan H.
3
@Alan H. Ouais, ils font des trucs bizarres avec des iframes dynamiques. Cliquez sur le +1, vous obtiendrez la fenêtre où vous ajoutez un commentaire. Si vous chargez Firebug et inspectez cet élément, vous obtiendrez un iframe src pour plusone.google.com/u/0 / _ / + / fastbutton? Url = ... Cet iframe contient le jeton CSRF pour la soumission à google +.
tour du
Dans certains cas, vous pouvez éviter le détournement de Cookie en les définissant avec httponly.
seppo0010
1
@ seppo0010 ouais mais ça n'arrête pas les XHR.
tour du
3

Google utilise des iFrames pour empêcher les "DIV standard qui fuient". Leur boîte de dialogue de fermeture de bibliothèque fait la même chose. C'est probablement juste pour que d'autres contenus ne puissent pas pénétrer dans le bouton +1. http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/dialog.html .

xrd
la source
Comme Rook l'a expliqué dans sa réponse, le <iframe> est utilisé pour empêcher le site utilisant le code du widget Google +1 d'utiliser l'attaque CSRF pour cliquer sur le lien par lui-même (et améliorer artificiellement la note +1 du site). C'est la partie où Google ne vous fait pas confiance.
Mikko Rantalainen