- PVSM.RU - https://www.pvsm.ru -
Помните приложение Birthday Calendar для Facebook? Оно могло генерировать десятки… нет, даже сотни уведомлений, приходящих вам. Любой ваш друг, установив его, автоматически отмечал вас на фотографиях с датами рождения. Вчера я сам попался на похожую схему в казалось бы нормальном приложении (WeHeartPics), которое только-только вышло. Нажав всего одну кнопку 1-tap invite, которая обещала для меня “Easy way”, я и не догадывался, что этот путь будет не самым легким для меня.

Вот так за пару минут я (точнее приложение) успело разослать на стенки большинства моих знакомых этот спам. Ожидал ли я этого? Вы удивитесь — да, хотя не сразу в это поверил. В статье я расскажу, как бороться с такими приложениями:
— оперативно убрать возможность постить за вас
— определить, кому отправили на стену
— как удалить все спам сообщения со стен друзей
— рабочий пример: проверьте, кому из друзей отправили эти сообщения
Ну и самое главное для разработчиков — как правильно реализовать функционал приглашений и инвайтов, при этом не раздражая пользователей: где использовать Facebook Dialogs, Achievements and Scores APIs, Open Graph.
Вчера в ленте я заметил дубль сообщений. Написал коммент отправителю, но решил проверить свои догадки сам. Перейдя на сайт из заголовка сообщения, скачал приложение на iPad и авторизовался.
Я всегда обращаю внимание на окно авторизации, особенно на расширенные пермишены, которые дают доступ к постингу от моего имени в любое время (подробно о доступе и permissions в Facebook я уже писал [1]).

Обычно увидя два последних пермишена я либо закрываю приложение (если оно мне не очень интересно), либо разрешаю, и после этого удаляю их в настройках приложений в самом фейсбуке. Ну да и ладно, мне не жалко. Авторизовался. Начал смотреть приложение, при этом посматривая, не отправило ли оно приветы от меня. Они не отправляли. Может быть я был неправ, и мой знакомый действительно сам отправил на стены друзей эти сообщения, — думал я. А потом попал на эту страницу, которую опишу отдельно.

Перейдя из блока Connect with friends в окно (справа), я увидел три иконки (на рисунке состояние приложения после нажатия Facebook). Так как логинился с фейсбуком, логично было нажать именно его.
Внимание! Если вы не готовы отправить всем своим друзьям на стенку “приветы”, ни в коем случае не нажимайте 1-tap invite!
Как вы поняли, моей ошибкой стало то, что я нажал эту кнопку. Я даже не знаю, винить ли разработчиков, что они мне не объяснили, что эта кнопка делает. Для них это Easy way, легкий способ набрать себе больше аудитории, как оказалось позже. В принципе я сам виноват, что я ожидал? Что эта кнопка поднимет волшебный Request Dialog, или что мне выплывет Feed Dialog, где я бы смог пошарить себе в ленту пост, какое же прекрасный новый стартап (напомнил Path). Но приложение лишь поменяло + Invite на © Resend, и я понял — я попал.
Последовательность действий в таких ситуациях у меня была отработана: переходим в полную веб версию Facebook, переходим в Privacy Settings, внизу в Apps and Websites переходим в редактирование настроек [2] приложений и сайтов, которые используют фейсбук коннект. Редактируем нужное приложение: убираем все пермишены, которые можем убрать, или просто удаляем приложение. Потом на всякий случай выходим из фейсбука и логинимся заново, чтобы приложение не могло использовать ваш access_token для дальнейшей рассылки спама.
Приложение я удалил. Теперь нужно было оценить “урон”. Первое, что пришло в голову — посмотреть свою активность в таймлайне (кнопка Activity Log). Но там было пусто. У меня более 1000 френдов, поэтому перебирать вручную было глупо. Но и оставлять эти сообщения было опасно, я бы не хотел, чтобы меня удалили интересные люди.
Для работы с Facebook API я использую Graph API Explorer [3]. Приложение же тоже как я делает запросы, например: /me/friends/ возвращает одинаковый результат — список друзей, отсортированный по возрастанию id. Я начал смотреть каждого. В итоге я вручную удалил около 30-и сообщений со стен. Видимо я быстро сориентировался и перекрыл доступ. Может у приложения установлено какое-то ограничение — я не знаю, как и то, отправлялись запросы с iPad или с сервера.
Удалив все сообщения, я подумал: почему бы не написать скрипт, который обходит всех моих друзей, ищет сообщения от меня, отправленные через это приложение, и удаляет их. Залогинился в приложении еще раз, разрешив опять все пермишены. Только в этот раз я не нажимал волшебную зеленую кнопку, а отправил пару “инвайтов” персонально (оказывается не нужно выбирать “легких путей” Easy way). Убив на всякий случай дополнительные пермишены, начал крутить Graph API Explorer. Я знал, что нужно найти id постов на стенку друзьям, что легко делалось в виде /{username}/feed/
Найдя нужный id поста, который я сам добавил моему другу, решил попробовать удалить его через API. Обычно это делается отправкой DELETE запроса на него, вместо GET (по которому получается подробная информация про пост). В Graph API Explorer нужно было только поменять GET на DELETE перед строкой запроса. Жмем Submit и получаем… ошибку.
«message»: "(#200) This post wasn't created by the application"
Как оказалось, удалить пост можно либо через веб версию (или официального клиента), либо через то приложение, которое создало этот пост. Консоль разработчика хоть и имела полный доступ (все пермишены которые только возможны), но все-таки была реализована одноименным приложением Graph API Explorer, которое не могло бы удалить все найденные посты от WeHeartPics. Не могло и любое другое приложение.
Но раз сам WeHeartPics мог их удалить, то мне нужен был их access_token. Сначала я опустил руки, так как приложение крутилось на iPad, и вызов диалога авторизации через строку в браузере ничего бы не дал. Но потом я вспомнил, что на самом сайте weheartpics.com [4] была авторизация. Открыв Firebug, я поймал access_token (на данный момент авторизация уже изменена, поэтому поймать его тем же способом у меня при написании статьи не получилось). С нужным токеном запрос на удаление в Graph API Explorer прошел, чему я конечно обрадовался — ведь теперь можно было создать лекарство от подобных приложений и их действий.
Чтобы быстро проверить, кому отправлен спам, был выбран http://www.fbrell.com [5] — консоль разработчика Facebook (вы можете посмотреть готовые примеры по ссылке Examples под редактором). Если вставить в окно редактора этот код [6] и запустить, вы проверите стенки всех своих друзей на наличие сообщений от WeHeartPics (всех, не только от вас).
Сообщения на стену друзьям и отметки их на фотографиях — это способ грязного продвижения. Вспомните Birthday Calendar, и делайте правильно:
Не хотел этой статьей как-то обидеть разработчиков этого стартапа. Мне он был приятен во всем, кроме момента с кнопкой Easy way. На их месте мог оказаться любой проект. Разработчики приложения были уведомлены и обещали принять во внимание все рекомендации.
Автор: antonsnowy
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/facebook/3870
Ссылки в тексте:
[1] уже писал: http://habrahabr.ru/post/117205/
[2] редактирование настроек: https://www.facebook.com/settings/?tab=applications
[3] Graph API Explorer: https://developers.facebook.com/tools/explorer/
[4] weheartpics.com: http://weheartpics.com/
[5] http://www.fbrell.com: http://www.fbrell.com/
[6] этот код: http://pastebin.com/Z7ca1NPw
[7] Feed Dialog: https://developers.facebook.com/docs/reference/dialogs/feed/
[8] Send Dialog: https://developers.facebook.com/docs/reference/dialogs/send/
[9] Request Dialog: https://developers.facebook.com/docs/reference/dialogs/requests/
[10] server-side requests: https://developers.facebook.com/docs/requests/
[11] Achievements: https://developers.facebook.com/docs/achievements/
[12] Scores: https://developers.facebook.com/docs/score/
[13] Open Graph: https://developers.facebook.com/docs/opengraph/
[14] OAuth Dialog: https://developers.facebook.com/docs/reference/dialogs/oauth/
Нажмите здесь для печати.