Социальные сети стали неотъемлемой частью нашей жизни и продолжают внедряться в неё все глубже. Каждому из нас близка какая-то определенная сеть — многие любят удобную для взаимодействия платформу ВКонтакте, кто-то любит краткость Twitter, кто-то строчит простыни текста в LiveJournal, всем нравится присутствовать в Google Plus (но ничего не писать в нем), кому-то мил замысловатый интерфейс Facebook, а некоторые жить не могут без оценок Одноклассников. Каждому своё.
Жизнь современного человека постоянно оцифровывается «по вашему хотению»: судя по квадратной фотографии с наложенным фильтром, вы позавтракали аппетитным омлетом, в середине дня чекин доложил, что вы посетили обувной магазин, ближе к полуночи 140-символьное сообщение явно указало, с кем вы проведете ночь. Ваши родные и близкие, все что вы любите кушать, одежда, которую хотите носить, места, в которых бываете, все ваши хочу, люблю и ненавижу — все это теперь есть в интернете.
Будущее уже здесь — настали те времена, когда можно узнать о человеке всё, и даже не быть знакомым с ним лично, когда каждого из нас можно охарактеризовать по профилю в социальной сети. Даже никакие Deep Packet Inspection не нужны.
Высокая скорость проникновения интернета и постоянно дешевеющие гаджеты обеспечивают социальные сети постоянным притоком новых пользователей. С каждой новой волной компьютерная грамотность становится хуже, а возраст пользователей растёт. Сильно увеличивается вовлеченность в социальные сети, а бдительность падает.
Любая социальная сеть — совокупность социальных графов:
- для обычного пользователя социальная сеть — сервис где можно общаться с другими людьми, обмениваться информацией, искать новые знакомства или старых друзей. Очень жаль, но чаще всего, социальные сети являются основным способом прокрастинации;
- для маркетолога социальная сеть — ценный источник данных для анализа поведения пользователей. Узнав дни рождения ваших родственников (которых вы любезно указали в своем профиле), можно релевантно «продавать» вам цветы с доставкой на дом, предлагать заказать пиццу, если вы засиделись вечером онлайн, или рекламировать новую модель молодёжного автомобиля, если вы «гуглили» автокредитование;
- для злоумышленника социальные сети могут стать настоящим «рабочим» инструментом — отмычкой к вам или вашим близким. Помните СМС-сообщения «мама, пришли 1000 рублей на этот номер, потом все объясню»? Благодаря огромному объему персональных данных, опубликованных в сети, социальная инженерия имеет все шансы стать чумой XXI века. Еще совсем недавно самый распространенный секретный вопрос для восстановления пароля к почтовым ящикам был «девичья фамилия матери». Наши мамы указывают свою девичью фамилию в своём профиле, чтобы одноклассники смогли её быстрее найти.
Чем больше двигаешься, тем больше запутываешься
Конечно не нужно, сломя голову, удалять все свои профили и менять имя и фамилию на вымышленные, но и забывать что социальные сети не игрушка - тоже не нужно. Всегда стоит задумываться о том, что и где вы пишете, какие фотографии выкладываете. Помимо этого, стоит узнать подробнее о настройках приватности в вашей любимой социальной сети, ограничить доступ посторонних людей к информации о себе и своих близких. Эта превентивная мера поможет снизить риск компрометации ваших приватных данных, но не гарантирует 100% безопасность.
Сети бывают дырявыми
У большинства социальных сетей есть API (Application Programming Interface) — набор готовых классов, функций и методов, предоставляемых социальной сетью для использования во внешних сервисах или приложениях. Например, через API работают мобильные приложения, каждое ваше действие в приложении, будь то добавление кого-то в друзья, лайк или ретвит — операция отправки запроса в API, получение от него ответа и визуализация события на вашем мобильном устройстве.
Чтобы данные не были доступны через API всем подряд, применяется протокол авторизации OAuth (актуальная версия OAuth 2.0), т.е. ответ от API можно получить, только если вы зарегистрированы или создали специальное «приложение» для этих целей. API таких популярных сервисов как ВКонтакте, Facebook, Twitter, Одноклассники, Foursquare, LinkedIn или Google+ очень похожи — даже самую простую информацию о пользователе можно получить, только используя OAuth. Однако, если внимательно посмотреть в документацию API ВКонтакте, можно обнаружить в описании некоторых методов надпись «это открытый метод, не требующий access_token», т.е. данные возвращаемые через этот метод можно получить без авторизации. Чтобы использовать такие методы, не нужно даже регистрироваться в ВКонтакте.
Например, методы «users.get», «users.getSubscriptions», «users.getFollowers» выдают данные о пользователе (имя, фамилия, страна, город, пол, ссылка на аватар, количество друзей и их id и т.д.), даже если в настройках приватности, для пункта «кому в интернете видна моя страница» указать в качестве параметра «только пользователям ВКонтакте». При помощи методов для работы с фотоальбомами можно без труда получить прямые ссылки на фотографии из того же «закрытого» профиля, а методы для работы со «стеной» выдают содержимое ваших постов, включая количество лайков и репостов. Еще один интересный пример: через API можно получить список друзей «удаленного» аккаунта или на какие паблики аккаунт был подписан.
Впрочем не буду рассказывать обо всех проанализированных мной открытых методах и лишать вас удовольствия поковыряться в документации самостоятельно.
Если сгруппировать на одной странице данные, доступные через API, получится упрощенная версия профиля пользователя. Такая «доступность» информации влечет за собой неминуемый парсинг базы данных пользователей ВКонтакте, т.е. сбор социальных графов. Возможные последствия можно определить если знать наверняка кем и как именно эти данные будут использоваться.
Надеюсь в ближайшем будущем разработчики ВКонтакте закроют эти «дыры» и сделают обязательную авторизацию даже для запроса простейшей информации.
«Дырку» оперативно закрыли, но при этом создали головняк некоторым разработчикам приложений для ВК. Раньше я делал users.get с сервера, по трем причинам: 1) Это быстрее, чем вызвать с клиента. 2) Это надежнее в плане того, что пользователь не сможет подделать URL фото, передав его с клиента. Поддельный URL может содержать, например, порнографию, а не аватар пользователя. 3) Поддельный URL может содерать не фото, а какой-нибудь swf, который может быть использован в «хакерских» целях. Такое тоже было. После фикса «дырки» users.get с сервера возвращает только имя пользователя и его пол. Как это можно исправить (не ломая при этом фикс «дырки»)? Два способа: 1) Разрешить вызывать users.get с сервера, при условии передачи клиентского access_token. Так сделано на ОК, ММ и Фейсбуке. 2) Подписывать секретным ключом приложения ответ API на users.get. Тогда разработчик сможет безопасно использовать эти данные, переданные с клиента на сервер.