В последнее время я экспериментировал с Facebook, чтобы изучить белые методы очистки профилей Facebook. Получение общедоступных данных и изображений профиля на гибкой основе было основной целью моей деятельности. После долгой суеты по поводу проблем с конфиденциальностью данных Facebook закрыл API-интерфейс графа для многих конечных точек; Мне нужно было придумать способ, который все же позволил бы мне добраться до цели, и, наконец, мне это удалось. Вот как я это сделал, и вы тоже можете это сделать!

Что вам нужно

  1. Chrome / Firefox (я предпочитаю Chrome)
  2. Плагин Requestly для Chrome / Firefox - http://www.requestly.in/
  3. Навыки Javascript (или используйте мою ручку из кода, чтобы экспериментировать, расширять и исследовать)
  4. For Legends: Elastic Search + Kibana + XPack: если вы хотите напрямую индексировать профили и выполнять анализ данных

Пошаговое руководство

Этот подход предполагает перечисление членов группы или друзей на facebook, а затем очистку данных их профилей. Получение списка профилей из группы списков друзей - хорошее начало для поиска людей с одинаковыми интересами и / или людей с лучшими возможностями подключения, чтобы охватить целевую аудиторию и сделать ваш контент вирусным.

Установите плагин Requestly для своего браузера. Подробнее о запросе можно прочитать на http://www.requestly.in/. Это бесплатный плагин, который позволяет вам играть с изменением URL-адресов, параметров запроса, полезной нагрузки, вставки JS, изменения хостов и ряда других хаков.

Скачайте этот файл и импортируйте его по запросу. Это стандартные правила, которые помогут вам легко очистить Facebook.

Он достигает цели, используя следующие правила запроса:

  1. Хорошее - добавление скрипта-парсера в FB: помогает внедрить поддерживающий Java Script из кода на каждую страницу facebook, загруженную в браузер. Этот скрипт добавляет простой пользовательский интерфейс для запуска, возобновления очистки и, при необходимости, позволяет публиковать профили в эластичный поиск, когда предоставляются необходимые данные. Функция по умолчанию загружает профили в виде файлов JSON на локальный компьютер.
  2. Плохой - запрос участников FB: когда вы прокручиваете страницу Facebook, чтобы просмотреть список друзей и список участников группы, facebook вызывает API с разбивкой на страницы со смещением 15 членов при каждой прокрутке. with Каждый запрос имеет одноразовый номер, поэтому вы не можете просто подделать его, поскольку последовательный запрос зависит от одноразового номера, сгенерированного предыдущим. После некоторой грубой силы мне удалось выяснить, что это смещение можно увеличить до 500. Это точная цель этого правила. Будьте жадными, получайте 500 профилей за каждую прокрутку страницы.
  3. The Ugly - fb change local header: Вы, должно быть, задаетесь вопросом - плагин, JS-инъекция из другого домена, публикация в Elastic Search, загрузка файла - все это с помощью защищенного Facebook? Как ? Что ж, вот неприятная часть: это правило удаляет заголовок content-security-policy из ответов facebook. Для серьезных читателей - переходите по ссылке, чтобы узнать, с чем мы имеем дело.

Если вы хотите уменьшить сетевой трафик и сэкономить заряд батареи, я рекомендую отключить изображения во время этого процесса. Вы можете отключить загрузку изображений для каждого домена или для всех доменов. Это доступно в настройках Chrome.

Со всем этим настроено; Я выбрал группу https://www.facebook.com/groups/FUNNYVIDEOSFUNNYVIDEOS5/members/, чтобы подробно рассказать в этом посте. Вы можете выбрать любую группу, если у вас есть список участников, и вам не обязательно быть частью группы. Когда страница участников загружена; вы увидите оверлей и липкое меню в верхнем левом углу с кнопками для очистки списка. Поэкспериментируйте с ними; один - загрузить подробную информацию и другие ограничения на набор полей. Я предлагаю использовать подробную информацию как необходимое условие для очистки данных общедоступного профиля.

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

В Chrome и Firefox возникают утечки памяти, когда дело доходит до загрузки файлов с содержимым, созданным с помощью BLOB-объектов. Это вызывает сбой Chrome после загрузки кучи файлов (около 40К профилей на 16 ГБ ОЗУ). Вы можете возобновить загрузку с последнего идентификатора профиля, присутствующего в последнем загруженном вами файле. Это грязный прием, но его нельзя избежать при работе с группами, насчитывающими 50 тысяч и более участников.

Загрузите отдельные профили (общедоступные сведения) и / или загрузите в ElasticSearch

Посетите страницу https://m.facebook.com/settings. Работа со страницей, оптимизированной для мобильных устройств, является обязательной. Там вы увидите еще одно липкое оверлейное меню. Ваша задача - вставить содержимое из файла (ограничивая его содержимым одного файла за раз), загруженного ранее, а затем начать очистку.

Работа над мобильной страницей позволяет Chrome и нашему маленькому JS быстро загружать страницу, очищать детали профиля в едином формате и продолжать делать это. Скрипт будет работать, загружая каждую страницу профиля одну за другой. Требуется небольшая временная задержка, чтобы хром «дышал» между переходом на каждую страницу профиля и загрузкой файла.

Кроме того, вы можете предоставить данные Elastic Search, чтобы разрешить JS публиковать данные профиля непосредственно в Elastic Search. Убедитесь, что вы создали индекс заранее. Код в настоящее время предполагает порт по умолчанию - 9200 для эластичного поиска. Если вы используете XPack, вам потребуется аутентификация.

Bug Bounty? Может быть нет.

В какой-то момент я подумал о том, чтобы сообщить об этом за ошибку. Однако, согласно политике Facebook, JS-инъекция, сбор общедоступной информации не распространяется на программы по выявлению ошибок. Тем не менее, я сообщил об этом программе Facebook Bug Bounty, поскольку мне удалось обойти функциональность REST API и получить такую ​​степень агрегированных данных с ограниченными ресурсами, как еще один гвоздь в стене facebook.

Вердикт

Facebook скоро обнаружит этот пост и попытается ограничить / уменьшить верхнюю границу, поддерживаемую его API (500 по состоянию на 27 июля 2018 г.); однако он не может заблокировать доступ к API по белой метке. А пока добывай столько, сколько сможешь!