У меня есть приложение 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.