Приложения Facebook (iframes) и сторонние куки - PullRequest
7 голосов
/ 26 октября 2011

У меня есть приложение Rails, которое работает внутри Fabebook как iframe. Я использую гем Koala для связи с FB (также js SDK для некоторых частей) и Devise в качестве основы для аутентификации.

В течение некоторого времени я видел некоторые проблемы с тем, что приложение работает внутри iframe. Таким образом, сторонние куки не могут быть установлены. Для IE я использую заголовок P3P, который как-то смягчил проблему.

Но все это очень запутанно. Я на снежном барсе.

Например:

  • В Safari 5.1.1 я установил «Блокировать файлы cookie от третьих лиц и рекламодателей». Приложение работает нормально, и его можно использовать без проблем.

  • В Chrome 5.0.874 (самое последнее обновление) был отмечен параметр «Блокировать сторонние файлы cookie от установки», поэтому нельзя установить два основных файла cookie, которые устанавливает мое приложение (файл cookie приложения и файл cookie fbs_xxxx), так что приложение не работает, поскольку пользователю необходимо постоянно проходить аутентификацию.

  • В Opera 11.52 нет ссылок на сторонние файлы cookie, и браузер настроен на «прием файлов cookie только с сайтов, которые я посещаю». Мое приложение работает нормально с этой настройкой.

  • С Firefox 7.0.1 мое приложение работает, но я просто не могу найти настройки, относящиеся к файлам cookie. Просто чтобы удалить их.

Так что, очевидно, моя проблема с Chrome, но та же настройка работает с Safari. Так что я действительно запутался.

Является ли запрос пользователя разрешить сторонние файлы cookie единственным решением этой проблемы?

Спасибо.

ОБНОВЛЕНИЕ МОЕГО ТЕКУЩЕГО РАБОЧЕГО РЕШЕНИЯ

Я провел дополнительные исследования и тесты. Я пытался использовать Rails альтернативные методы хранения сессий. По умолчанию они хранятся в файле cookie, но вы можете хранить данные сеанса в памяти, в БД и т. Д. Но этого недостаточно, поскольку он все еще использует файл cookie с указателем на выбранное вами альтернативное хранилище.

В конце я установил некоторую информацию, URL-адрес которой позволяет мне найти личность текущего пользователя, вошедшего в систему, получить пользователя и вручную войти в него, используя метод Devises sign_in. Мне это не очень нравится, но теперь я могу заблокировать сторонние куки и все еще работает. Позже я внесу изменения, и вместо реальной информации у меня будет ключ к записи memcached, откуда я получу пользователя (ранее установленный), ведь только мое приложение должно иметь доступ к этому серверу memcached.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 26 октября 2011

Если куки не могут быть установлены, тогда установите идентификатор сеанса в конце URL.

1 голос
/ 26 октября 2011

Firefox имеет довольно не интуитивно понятное размещение настроек cookie.Перейдите в Сервис-> Параметры-> Конфиденциальность и выберите «Использовать пользовательские настройки для истории» из выпадающего списка, после чего появятся настройки cookie.Но они снова «исчезнут», если вы установите для них значения по умолчанию.

Существуют большие несоответствия как в определении, так и в обработке сторонних файлов cookie (например, в Firefox запрет касается не только настройкипеченьки но тоже их читают).По этой причине я бы рекомендовал, если это вообще возможно, исключить какую-либо зависимость от файлов cookie.Уже достаточно сложно сказать пользователям, что они должны включить что-то, что звучит небезопасно (не говоря уже о предоставлении различных инструкций о том, как сделать это для каждого браузера), и это только ухудшится, поскольку браузеры продолжают ужесточать свои настройки по умолчанию.К сожалению, все стандартные библиотеки, по-видимому, хотят использовать файлы cookie по умолчанию, так что это непростая задача, но если вы только начинаете программировать свое приложение, я думаю, что стоит попытаться найти способ сделать что-либо без файлов cookie прямо сейчас.летучей мыши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...