Bagaimana widget Google+ +1 keluar dari iframe mereka?

145

Entah bagaimana, melayang-layang di atas widget Google+ plus-one dapat memperkenalkan kesepakatan jenis-tooltip yang jelas lebih besar dari <iframe>elemen yang ada di dalamnya. Saya telah memeriksa DOM untuk mengonfirmasi hal ini. *

batas iframe

Begitu:

  1. Apa? Bagaimana!?

  2. Apakah ini bukan peluang besar untuk clickjacking, jika digunakan secara jahat? (Bayangkan seseorang melakukan MITM untuk widget sosial ini!)

* Pembaruan: Apa yang saya lihat adalah bahwa pesan tooltip-y dalam sedetik, dibuat secara dinamis iframe.

Alan H.
sumber

Jawaban:

181

Widget Google +1 adalah JavaScript yang berjalan di situs web Anda yang sedang membangun iframe. Widget JavaScript ini berjalan dalam konteks situs web Anda dan karenanya tidak dibatasi oleh Aturan Warisan Asal untuk iframe . Oleh karena itu widget JavaScript ini dapat mengatur acara DOM apa pun yang diinginkannya di situs induk meskipun tampaknya hanya sederhana iframe.

Hal lain, mengapa Google menggunakan iframe? Mengapa tidak hanya menghasilkan divdi halaman? Ya karena tautan berasal dari iframetoken, CSRF (pemalsuan permintaan lintas situs) dapat disematkan dalam permintaan dan situs induk tidak dapat membaca token ini dan memalsukan permintaan. Jadi iframeini adalah tindakan anti-CSRF yang mengandalkan aturan Origin Inheritance untuk melindungi dirinya dari orangtua yang jahat.

Dari perspektif serangan, ini lebih mirip XSS (cross-site scripting) daripada UI-Redress. Anda memberi Google akses ke situs web Anda dan mereka dapat membajak cookie pengguna Anda atau tampil XmlHttpRequestsmelawan situs web Anda jika mereka memilihnya (tetapi kemudian orang-orang akan menuntut mereka karena jahat dan kaya).

Dalam situasi ini Anda HARUS mempercayai Google, tetapi Google tidak mempercayai Anda.

Ada beberapa cara untuk mengurangi dampak privasi dari bug-web ini .

benteng
sumber
Hal hebat - Saya menghargai re Anda: XSS, yang masuk akal. Namun saya masih tidak yakin tentang sesuatu. Konten yang dimaksud sepertinya tidak ada dalam <iframe>, yang Anda sarankan mungkin benar (dan jelaskan bagaimana itu mungkin). Tapi sepertinya tidak demikian, dari memeriksa DOM. Dan itu akan memaparkan nama dan alamat Gmail saya kepada orang tua jahat (kecuali dibungkus sebentar iframe)
Alan H.
3
@Lan H. Ya, mereka melakukan beberapa hal aneh dengan iframe dinamis. Apakah Anda mengklik +1 Anda akan mendapatkan jendela tempat Anda menambahkan komentar. Jika Anda memuat pembakar dan memeriksa elemen itu maka Anda akan mendapatkan iframe src untuk plusone.google.com/u/0 / _ / + / fastbutton? Url = ... Iframe ini berisi token CSRF untuk dikirim ke google +.
benteng
Dalam beberapa kasus, Anda dapat menghindari pembajakan Cookie dengan mengaturnya dengan httponly.
seppo0010
1
@ seppo0010 ya tapi itu tidak menghentikan XHR.
benteng
3

Google menggunakan iFrames untuk mencegah "DIV standar bocor." Dialog pustaka penutupan mereka melakukan hal yang sama. Mungkin saja agar konten lain tidak dapat masuk ke tombol +1. http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/dialog.html .

xrd
sumber
Seperti yang dijelaskan Rook dalam jawabannya, <iframe> digunakan untuk mencegah situs menggunakan kode widget Google +1 dari menggunakan serangan CSRF untuk mengklik tautan itu sendiri (dan secara buatan meningkatkan peringkat +1 situs). Itulah bagian di mana Google tidak mempercayai Anda.
Mikko Rantalainen