Oauth vk com что это
Перейти к содержимому

Oauth vk com что это

  • автор:

OAuth ВКонтакте: использования в корыстных целях

Существует множество способов распространения вредоносного спама во ВКонтакте. Но вредители не дремлют, в их головы приходят все больше интересных идей. И поддержка OAuth 2.0 платформой ВКонтакте оказалась как никак кстати. Мошенники научились пользоваться им для обхода страницы предупреждения о вредоносных сайтах.

А все началось с того, что однажды на моей стене появилось такое сообщение:

Из любопытства перешел по ссылке и попал на очередной фишинговый сайт. Но мне показалась странной сама ссылка, она имела вид (половина символов в ASCII):
vkontakte.ru/away.php?to=http%3A%2F%2FApi.vKontakte.Ru%2F%2Fo%2561u%2574%…

  • vkontakte.ru/away.php — страница с предупреждением о переходе по ссылке;
  • Параметр to сама ссылка. В перекодированном виде выглядела так:
    Api.vKontakte.Ru/oauth/authorize?client_id=2376***&cgpopcvkqdjut4&redirect_uri=vgostivk.dyndns**&display=popup?390852
Тут-то самое интересное и начинается.
  • Api.vKontakte.Ru/oauth/authorize — обращение к API ВКонтакте, авторизация через OAuth 2.0;
  • client_id=2376***&cgpopcvkqdjut4&redirect_uri=vgostivk.dyndns**&display=popup?390852 — параметры авторизации.
  • client_id — ID приложения, требующего авторизацию;
  • redirect_uri — адрес, на который будет передан access_token (посредством редиректа);
  • display — вид окна авторизации (page, popup, touch и wap).

В этом и заключается весь смысл обхода блек-листа вредоносных сайтов ВКонтакте. Появляется только алерт о переходе на api.vk.com. И в результате перехода мы прямиком попадаем на фишинг сайт, который имеется в черном списке. При переходе по ссылке vkontakte.ru/away.php?to=vgostivk.dyndns**:

Как оказалось, приложение, якобы требующее авторизацию висело на взломанном пользователе:

image

Да и сам фишинг сайт был устроен довольно интересно. Дизайн по обычаю был контактовский и предлагал авторизоваться. Я прошел авторизацию через рандомные почту и пароль, фейк прекрасно проглотил. Дальше было еще интересней, на главной появилась новость от «Павла Дурова»:

image

После нажатия на кнопку «Создать персональный счетчик», последовал прекрасный прогресс-бар. Затем было предложено указать свой номер и отправить sms:

По идее после успешной «активации» должно было перекинуть на страницу activ.php, но я не смог попасть туда. Выдержки из JS скриптов фишинг сайта:

.
if (req.status == 200) <
// если статус 200 (ОК) — выдать ответ пользователю
if (req.responseText == ‘ok’ ) //statusElem.innerHTML = ‘Все гуд!’;
get_activation();
>
if (req.responseText == ‘not’ )
//statusElem.innerHTML = «Ответ сервера: «+req.responseText;
.
function get_activation() document .location= «activ.php» ;
>

* This source code was highlighted with Source Code Highlighter .

Итог: Мошенники используют обход предупреждений через OAuth 2.0, получают пароль и email пользователя, да еще и пытаются развести на отправку sms (скорее всего используя систему подписок).

Как получить токен пользователя для ВКонтакте?

Пытаюсь получить токен. Читал документацию, ничего не понял. Что делать ?

Илья

Токены — это ключи доступа к API. Они используются для авторизации при запросах к API.

Токены позволяют ограничивать доступ к данным пользователя с помощью параметра scope . Он определяет рамки видимости для вашего приложения. Токен с scope=friends даёт доступ к друзьям и ни к чему больше. Таким образом, токен становится менее опасным, чем логин и пароль.

Как получить

Токен можно получить прямо из браузера. Для этого нужно только перейти по правильной ссылке. Как составить правильную ссылку:

1. Создайте Standalone приложение.

Приложения создают на странице с вашими приложениями. Дайте приложению понятное название, чтобы в будущем легко вспомнить зачем его создавали.

2. Достаньте его client_id

Снова перейдите на страницу с вашими приложениями. Нажмите на кнопку «Редактировать» рядом с нужным приложением. В адресной строке появится его id . Из этой ссылки: https://vk.com/editapp?id=678295892 видно, что client_id=678295892 .

3. Соберите ссылку для получения ключа

Пример ссылки из документации Implicit Flow:

https://oauth.vk.com/authorize?client_id=1&display=page&scope=friends&response_type=token&v=5.92&state=123456
  • redirect_uri указывать не надо т.к. сайт вам не нужен, приложение же клиентское.
  • response_type и display оставьте такими, как в примере.
  • client_id вы получили на втором шаге.
  • v возьмите со страницы с версиями API. Выберите самую свежую.

scope выбирайте в зависимости от методов, которые хотите использовать. Например, для доступа к методу wall.post в документации ясно сказано: «требуются права доступа: wall«.

Параметр scope указывайте через запятую, вот так: scope=photos,groups .

4. Перейдите по собранной ссылке

Вы получите access_token — строку наподобие 533bacf01e1165b57531ad114461ae8736d6506a3 . Она появится в адресной строке, подписанная как access_token . Если в адресной строке появился code= вместо access_token= , проверьте правильность параметра response_type .

Что читать

  • Статья от Mail.ru OAuth 2.0 простым и понятным языком
  • Статья от Digital Ocean Введение в OAuth 2
  • Implicit Flow ВКонтакте

Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.

После логаута пользователя VK можно получить управление его страницей

Решил попробовать себя в работе с API Вконтакте и наткнулся на интересную особенность.

Один из способов авторизации в API — это OAuth. Вкратце всё происходит так: создаёте приложение ВК, получаете его ID, а затем отправляете браузер пользователя на адрес:

 https://oauth.vk.com/authorize" + "?client_id=123" // ID вашего приложения + "&display=page" + "&redirect_uri=https://oauth.vk.com/blank.html" // URL, на который попадёт пользователь после успешной авторизации. ВК требует указания этого сайта в настройках приложения и только для приложения типа Сайт. Для остальных работает только указанный УРЛ, в целях безопасности + "&scope= права доступа" + "&response_type=token" + "&v=5.52" + "&state=123456" 

Это авторизация методом Implicit flow.

Если пользователь залогинен, ему будет сразу предложено установить приложение, если нет — вначале залогиниться, а уже потом устанавливать. Если приложение уже установлено, то идёт сразу переход на страницу, в хэше которой будет токен. Дальше идёт работа с API.

Самое интересное начинается после выхода из ВК. Ваше приложение может иметь ссылку на выход вида vk.com/login.php?op=logout. Это стандартная ссылка на выход из VK. Но после выхода пользователя из VK куки остаются рабочими.

Таким образом, если опять показать страницу авторизации, ввести совершенно другой логин и пароль — вы всё равно сможете пользоваться страницей первого пользователя.

Т.е. работа ведётся следующим образом — пользователь П1 авторизуется ВКонтакте через приложение. В приведённом примере я использую standalone-приложение, но, возможно, получится и с другими видами приложений. Дальше пользователь П1 нажимает на ссылку выхода из ВК, приведённую выше. После этого ни через браузер, ни через приложение зайти в ВК без авторизации не получится. Дальше пользователь П2 авторизуется через приложение. Затем, уже через браузер пользователь попадает на страницу пользователя П1, вместо своей страницы П2. И может делать с этой страницей абсолютно всё, что угодно, приложение на данном этапе уже не нужно и не играет никакой роли.

Самое смешное то, что вы можете использовать в вашем приложении самые безобидные права. То есть не нужно пугать пользователя тем, что вы просите доступ к фоткам, аудио, видео, сообщениям и всему остальному. Можно оставить только базовые — и всё. Куки при этом всё равно будет полностью рабочими, используя их вы попадёте прямиком на страницу пользователя.

Можно ли считать данную особенность уязвимостью — думайте сами. По-моему, это как минимум не то, чего ожидает пользователь, нажимая на кнопку «Выход» и надеясь на то, что теперь уж его страница в безопасности.

При написании данной заметки ни один пользователь ВК не пострадал.

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

Вход на сайт через Вконтакте

Многие соцсети позволяют создавать приложения и через API получать данные пользователей, поэтому их использует для быстрой регистрации и авторизации на сайтах. Как проходит аутентификация, рассмотрим на примере VK:

  1. На сайте, пользователь нажимает на ссылку «Войти», открывается страница VK, где он разрешит приложению доступ к своим данным.
  2. После подтверждения браузер пользователя будет перенаправлен по адресу, указанному при открытии диалога авторизации. К URL добавляется GET-параметр с кодом авторизации.
  3. Скрипт выполняет ответный запрос с полученным кодом и ключом приложения для получения access_token .
  4. Полученный в ответе access_token , скрипт использует для запроса к данным пользователя.

Регистрация приложения

Для начала нужно создать приложение на странице https://vk.com/editapp?act=create

В меню «Платформа» нужно указать – сайт, заполнить поля «адрес сайта» и «основной домен».

Создание приложения ВК

В настройках видим ID приложения и защищённый ключ, также нужно убедится что приложение включено и видно всем.

Настройки приложения ВК

Ссылка для входа

Сформируем и выведем ссылку по которой пользователь даст разрешение на запрошенные действия.

В redirect_uri указываем скрипт-обработчик, туда придет секретный код. В параметре state можно передать URL текущей страницы, чтобы вернуть пользователя обратно. При переходе по ссылке откроется страница:

Приложение запрашивает доступ к аккаунту

Получение данных

После того как пользователь дал разрешение, он возвращается на redirect_uri , к URL добавляются GET-параметры:
https://example.com/oauth-vk.php?code=1234567890&state=https://example.com/page-1 Далее запрашивается access_token (в ответе с токеном будет e-mail). После этого выполняется метод users.get , который возвращает ID, имя, фамилию и URL аватарки.

redirect_uri должен быть такой же как в ссылке для входа.

 'ID приложения', 'client_secret' => 'Защищённый ключ', 'redirect_uri' => 'https://example.com/oauth-vk.php', 'code' => $_GET['code'] ); // Получение access_token $data = file_get_contents('https://oauth.vk.com/access_token?' . urldecode(http_build_query($params))); $data = json_decode($data, true); if (!empty($data['access_token'])) < // Получили email $email = $data['email']; // Получим данные пользователя $params = array( 'v' =>'5.81', 'uids' => $data['user_id'], 'access_token' => $data['access_token'], 'fields' => 'photo_big', ); $info = file_get_contents('https://api.vk.com/method/users.get?' . urldecode(http_build_query($params))); $info = json_decode($info, true); echo $email; print_r($info); > >
Полученные данные пользователя
xxxx@xx.ru array( "response" => array( 0 => array( "id" => 12345678, "first_name" => "Иван", "last_name" => "Иванов", "photo_big" => "https://vk.com/images/camera_200.png?ava=1" ) ) )

Далее все завит от реализации сайта, пользователя можно добавить в БД или обновить его данные и авторизовать в системе.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *