Почему новый Javascript SDK для Facebook не нарушает "ту же политику происхождения"? - PullRequest
5 голосов
/ 24 октября 2010

Новый Facebook Javascript SDK может позволить любому веб-сайту входить в систему как пользователь Facebook и получать данные пользователя ...

Так будет, www.example.com, включая некоторые Javascript из Facebook, но какНапомню, этот скрипт считается источником происхождения www.example.com и не может получать данные с facebook.com, потому что это является нарушением «той же политики происхождения».Разве это не правильно?Если да, то как скрипт извлекает данные?

Ответы [ 3 ]

5 голосов
/ 24 октября 2010

Отсюда: https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript

Такая же политика происхождения не позволяет документу или сценарию, загруженному из одного источника, получать или задавать свойства документа из другого источника.Эта политика восходит к Netscape Navigator 2.0.

и объясняется здесь несколько иначе: http://docs.sun.com/source/816-6409-10/sec.htm

Та же самая политика происхождения работает следующим образом: при загрузкедокумент из одного источника, скрипт, загруженный из другого источника, не может получить или установить определенные свойства конкретного браузера и HTML-объектов в окне или фрейме (см. таблицу 14.2).

Сценарий Facebook не пытаетсявзаимодействовать со скриптом из вашего домена или читать объекты DOM.Он просто собирается сделать свой собственный пост в Facebook.Он получает имя вашего сайта, не взаимодействуя с вашей страницей или сценарием с вашего сайта, а потому, что сам сценарий генерируется, когда вы заполняете форму, чтобы получить кнопку «Мне нравится».Я зарегистрировал сайт с именем "http://www.bogussite.com" и получил код для размещения на своем веб-сайте. Первым делом этот код был

iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.bogussite.com&

, поэтому скрипт явно получает информацию о вашем сайте с помощьюзакодированные параметры URL в ссылке на iFrame.

Сайт Facebook далеко не одинок в том, что вы используете скрипты, размещенные на их серверах. Есть множество других скриптов, которые работают таким образом. Все API GoogleНапример, Google Gears, Google Analytics и т. д. требуют, чтобы вы использовали сценарий, размещенный на их сервере. Только на прошлой неделе, когда я пытался выяснить, как выполнить геолокацию для нашего магазина, для мобильного веб-приложения,Я обнаружил множество сервисов геолокации, в которых вы использовали скрипты, размещенные на их серверах, а не копировали скрипт на ваш сервер.

0 голосов
/ 24 октября 2010

Если я вспомню, они используют вставку тега скрипта.Поэтому, когда необходимо вызвать вызов JS SDK в Facebook, он вставляет тег сценария <script src="http://graph.facebook.com/whatever?params...&callback=some_function в текущий документ.Затем Facebook возвращает данные в формате JSON как some_function({...}), где фактические данные находятся внутри ....Это приводит к тому, что функция some_function вызывается в источнике example.com с использованием данных из graph.facebook.com.

0 голосов
/ 24 октября 2010

Я думаю, но не уверен, что они используют метод iframe.По крайней мере, междоменный приемник и материал xfbml для приложений canvas используют это.По сути, JavaScript на вашей странице создает iframe в домене facebook.com.Тогда у этого iframe есть разрешение делать все, что ему нужно, с Facebook.Обратная связь с родителем может быть осуществлена ​​одним из нескольких способов, например, хэшем url.Но я не уверен, какой метод они используют для этой части.

...