Как избежать утечки информации о пользователе в AdSense из приложения Facebook Connect - PullRequest
1 голос
/ 23 июля 2011

У меня есть приложение Facebook Connect, которое я монетизирую с помощью Google AdSense. Я хочу быть уверен, что не передаю никакую информацию о пользователях Facebook, такую ​​как номер идентификатора пользователя Facebook или токен доступа (в котором есть идентификатор пользователя).

AdSense является абсолютно законным и соответствует политике Facebook для приложений Connect. Мне просто нужно убедиться, что Google не видит информацию, идентифицирующую пользователя.

Я хорошо знал об этих требованиях, когда проектировал свое приложение, и думал, что он его прибил, но затем я получил одно из известных автоматических предупреждений от Facebook, в котором было написано:

"Наши автоматизированные системы обнаружили, что вы можете непреднамеренно разрешить передачу данных аутентификации третьим лицам."

также указано:

"В каждом рассматриваемом нами случае эта информация передается через заголовок HTTP Referer браузером пользователя."

Опять же, я уже был знаком с этим вектором утечки, который происходит, когда Facebook помещает токен доступа в строку запроса, когда он перенаправляет обратно в ваше приложение после аутентификации пользователя. У меня уже есть проект, в котором я выполняю это через перенаправление OAuth 2.0 на стороне сервера, получая «код» и обменивая его на токен доступа. Этот метод описан здесь, под аутентификацией на стороне сервера: https://developers.facebook.com/docs/authentication/

В моем приложении я делаю обмен кода на токены в отдельном контроллере ASP.NET MVC, который не имеет представлений, поэтому в него не включены Adsense или какие-либо сторонние ресурсы. Поэтому я уверен, что все содержимое моего поля заголовка и строки запроса являются чистыми и не содержат пользовательских данных.

Однако, учитывая, что я получил уведомление по электронной почте от Facebook и не хочу, чтобы мое приложение и денежный кран AdSense были отключены, я теперь параноидален, что в каком-то другом месте я передаю данные. С другой стороны, в электронном письме говорится, что мое приложение «может» передавать информацию (почему они не могут просто сказать мне то, что видели, или, по крайней мере, быть уверенным, что оно течет, а не просто «может течь»), и оно говорит, что каждый экземпляр произошел из-за реферера / строки запроса, и я уверен, что (выполнив трассировку Fiddler) мое приложение чистое.

Я вижу только один возможный способ утечки информации, но я не уверен, что это реальный риск или просто отсутствие понимания с моей стороны того, что именно AdSense (и Google Analytics) могут видеть из моего приложения контент на странице, требующий аутентификации пользователя.

У меня есть представление (страница), где я помещаю токен доступа в скрытое поле формы. Он помещается туда, когда страница первоначально обслуживается (после аутентификации пользователя), а затем впоследствии обновляется с помощью Javascript (с использованием Facebook JS SDK), поэтому, когда пользователь отправляет форму обратно на сервер, я получаю обновленный access_token если это изменилось. Маркер доступа может измениться, потому что я использую Javascript SDK для запроса дополнительных разрешений на этой странице, включая в некоторых случаях расширенное разрешение offline_access. Получение offline_access сгенерирует новый access_token, срок действия которого не истекает.

Это страница, требующая аутентификации пользователя для его просмотра, поэтому я решил, что AdSense не может видеть содержимое страницы. У меня действительно есть настройка представления для отображения в общем виде (без информации о пользователе) со всем тем же текстом, если пользователь не аутентифицирован, но с добавлением приглашения «Войти сейчас», поэтому Adsense может индексировать страницу и предоставлять релевантные контекстные объявления.

Мне известно о том, что Facebook только вчера запустил новые функции Javascript SDK OAuth 2.0, но не могу сразу принять это, поскольку он не будет работать с Facebook C # SDK, который я использую на стороне сервера. И даже при этом, если у меня возникнет проблема с добавлением токена доступа в скрытое поле формы, эта проблема все равно останется.

В классической моде Facebook они дают мне 48 часов на решение проблемы, но любые запросы через их веб-форму поддержки разработчиков приводят только к ответу, что они «сделают все возможное, чтобы ответить на вашу конкретную проблему в течение одной недели».

Может быть, более простой способ думать об этой проблеме: «Может ли Google AdSense видеть содержимое страницы, требующей аутентификации пользователя?»или они видят только поле реферера заголовка, из которого был загружен файл JavaScript AdSense.

Ответы [ 2 ]

1 голос
/ 23 июля 2011

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

Почему бы вам не настроить прокси-сервер, такой как squid, а затем указать, что просмотр необходимваш экземпляр Squid для всех http доступа.Затем вы можете просмотреть журналы squid для всех http-запросов и заголовков на наличие признаков утечки?

Я думаю, вам следует выбрать независимую машину для установки squid, так что экземпляр amazon micro может бытьчто вам нужно для этого, если у вас еще нет машины

Кроме того, весь JavaScript, работающий на странице, может видеть все в DOM и все глобальные переменные JavaScript, так что если вы / Facebook беспокоитесь о утечке информациитаким образом, вы можете захотеть хранить все uid внутри замыкания и / или запускать код AdSense в iframe, а не прямо на странице - как общее правило, вы никогда не должны позволять стороннему JavaScript-коду запускаться на вашей странице беззавернутый в iframe

0 голосов
/ 14 марта 2012

Они вернулись ко мне после ручной проверки моего сайта и сказали, что на самом деле не было никакой утечки информации о пользователе.Ну и дела, спасибо за автоматизированные системы обнаружения Facebook!

...