[Из песочницы] Администраторы групп в vk всегда были в открытом доступе
Ранее я уже писал один пост на geektimes о том, что истинно анонимных пабликов в ВК не было до 29.10.14. Но как оказалось, я ошибался на счет даты. И не до конца осознал всю суть существующей проблемы анонимности.
Большинство пользователей социальной сети «ВКонтакте» знакомы с принципом работы групп и публичных страниц. Имеется один создатель, модераторы и подписчики. В зависимости от настроек, некоторые из них имеют возможность размещать собственные публикации в ленте сообщества. Логично, что сервера будут хранить данные о каждом кто учавствовал при выкладывании сообщения. Самая длинная цепочка состоит из двух элементов: пользователь написавший сообщение в блок «предложить новость» и модератор, чьей рукой было поставленно подтверждение. Исходя из этого, можно предположить, что эти данные могут быть получены через api.
Обратившись к документации легко выяснить, что большинство методов связанных с общедоступными объектами (публикации на стене, фотографии, документы, …) в ответе возвращают результат запроса и два дополнительных массива (если при запросе указать extend=true):
response: {
items: [],
profiles: [{
id: 1,
first_name: 'Pavel',
last_name: 'Durov',
sex: 2,
screen_name: 'durov',
photo_50: 'http://cs629231.v...543/FfB--bOEVOY.jpg',
photo_100: 'http://cs629231.v...542/fcMCbfjDsv0.jpg',
online: 0
}],
groups: []
}
По названиям массивов понятно, что они должны содержать и для чего нужны. При запросе какого-либо сообщения со стены сообщества, мы получим само сообщение, пользователя, который его написал (+ модератор), и объект самой группы. Всё предельно просто и прозрачно. Но во многих сообществах есть понятие анонимности. Например, группы в которых люди рассказывают о своих жизненных взгодах и невзгодах, через функционал «предложить новость» с пометкой «анонимно». Модератор, перед публикацией поста, снимет галочку с соответсвующего чекбокса и аккаунт истинного автора не отобразится нигде. Или же публицист, желающий оставаться в тени и не раскрывать личности, в настройках своей публичной страницы уберёт все ссылки и отметки о создателе.
В первый раз я столкнулся с тем, что тот самый простейший запрос wall.get возвращает в списке пользователей человека из первого примера. Об этом я писал (ссылка в шапке). И вот, по прошествии двух лет я в очередной раз просто обратился к документации из интереса. На этот раз я смотрел метод newsfeed.getComments без каких-либо злых намерений. Этот метод возвращает посты в которых текущий пользователь оставил комментарий или иным образом подписался на уведомления (раздел «Мои новости → Комментарии»). Получив необходимые мне результаты я обратил внимание на то, что в ответе сервера в злополучном массиве profiles лежит 5 аккаунтов. Зачем они нужны и откуда они берутся следовало немедленно выяснить. Для тестов я брал анонимную группу своего города, оставлял комментарий под последним постом и смотрел на ответ сервера, по запросу к этому методу.
Оказалось, что каждый из этих пользователей имел непосредственное отношение к посту. Первым был тот, кто опубликовал новость, то есть человек с правами не ниже модератора, вторым был тот, кто «предложил новость», если он вообще был, и оставшиеся трое — последние прокомментировавшие запись. После проверки на тех группах, в которых все эти данные были «скрыты» настройками приватности, всё лишь подтвердилось. Всё именно так и было: всё, что скрывалось настройками приватности, было достпуно тремя кликами.
Первое, что я возжелал сделать — сообщить об этом недоразумении в баг-трекер ресурса. Где меня встретила лента обрабатываемых в данный момент ошибок связанных с мелкими недочетами a’la «у вас косяк с вёрсткой, два пикселя лишние». Спустя десять минут поиска я отчаялся самостоятельно найти кнопку «сообщить о дыре в безопасности размером с ангар для боинга об ошибке». Ребята с форумов предлагали запускать форму через веб-консоль, но эта форма не отправляла данных ссылаясь на access denied. Обращаться в обычную техподдержку из-за прошлого раза не хотелось, тем более, что во время тестирования new.vk.com там отвечают по 2–3 дня. Поэтому я решил написать тому, кому, как я думал, это будет интересно, тем самым привлечь внимание на ошибку. Выбор пал на vc.ru, как на самый доступный в плане общения — у них все кнопки на сайте на месте. Тем более, что в памяти всплыла старая публикация о парне, который получил денежное вознаграждение за то, что смог узнать администратора группы через ссылку на репост.
Пока ждал от них ответа, исследовал все возможные вариации использования метода. Ограничения всё же имелись, это то, что узнать этих пользователей можно было только в том случае, если запись лежит на стене сообщества, в сообществе разрешены комментарии. Именно это ограничение и помешало мне доказать кому-то из vc, что я не просто выдумываю кто какую группу модерирует. Они попросили сказать, кто админ их группы, а у них комментарии отключены. Я просто стал заваливать их списком модераторов известных новостных сообществ: «Первый канал», «РБК», «Известия» и прочие. Попутно в свою группу без подписчиков скидывал те же ссылки, чтобы не утерять вместе с перепиской и похвастать всем своим двум друзьям. Не учел того факта, что ссылки в постах группы имеют свойство оповещать отмеченных в них людей. И мне написал один из упомянутых модераторов с просьбой рассказать как я этого добился. Я темнил до последнего, ожидая, что vc хоть как-то поможет с закрытием дыры. Через два часа из vc мне сказали, что они сообщили в вк, а сами ничего делать не будут.
Итог: мой аккаунт со всеми контактами, портфолио, коллекцией музыки, заметками и закладками канули в небытие с подписью «заблокирован навсегда». Мои группы удалили, записи потерли, дыру закрыли кардинально, в profiles теперь вообще ничего не выводится. Единственное, что у меня осталось от этого случая — нежелание сообщать о таком вообще кого-либо.