Pull to refresh

Comments 75

А разве у ВК нет программы оплаты за найденные уязвимости?
Ваша заметка как раз похожа на такое.
Они ещё и перманентно банят тех, кто не пишет им, а эксплуатирует и публично распостраняет
Никаких специальных окошек для обращения за оплатой за баги я не нашёл. В поддержке же (куда я обратился задолго до этой публикации) мне сказали, что это не баг, а фича. Поэтому «умываю руки».
Плохо искали: hackerone.com/vkcom. Полгода назад получил $200 за весьма несерьёзную уязвимость. Правили долго, правда.
Как наивный пользователь, я полагал, что окно с описанием уязвимостей находится на самом сайте ВК.
UFO just landed and posted this here
Больше года висит бага, им ваще на эту программу…
Здесь нет бага. Вы путаете два не связанных механизма.
OAuth для авторизации сторонних приложений и авторизацию/разлогин самого сайта.

Фактически сайт ВК это такое же приложение и вы разлогинитесь в нем, вместо своего.

Чтобы сделать разлогин для токена вам нужно использовать методы API с указанием токена, если такие там предусмотрены.
Но почему тогда при попытке повторного логина через API же я получаю окошко логина? Если у них мухи отдельно от котлет, тогда и куки, по идее, должны быть как-то тоже разделены и не иметь областей взаимодействия. Но область взаимодействия здесь как раз есть — логин осуществляется через браузер и для браузерного просмотра, и для работы с API.

Не претендую на экспертное техническое мнение, но мне кажется, что если я разлогинился, то я не должен иметь доступ к информации аккаунта, тем более чужого. А в приведённом в статье примере я разлогиниваюсь, при запросах к API получаю предложение авторизоваться, но когда авторизуюсь, получаю полный доступ к аккаунту пользователя, который был авторизован до меня. Причём как из своего приложения, так и просто через браузер.
В приведенном коде авторизации вы используете Implicit flow. Иными словами это локальная авторизация приложения. Access_token который вы получили, хранится у вас в браузере и сервер или кто угодно еще не имеют к нему доступа. При попытке повторной авторизации вы инициируете создание ЕЩЕ одного токена.

Так как у вас в статье нет ни какой подробной информации о последующем доступе к странице пользователя, уверен, что дальше базовых прав, которые вы дали токену при его создании, вы не получите. Это основной принцип OAuth.
Более того, неправильно обвинять кого-то в уязвимости управления страницей после разлогина, не предоставив подробного описания с приведенными доказательствами и тем более писать не им, а публично. А то, что OAuth создавался в том числе и для управлять – это да.
В том-то и весь сыр-бор — я получаю полный доступ, причём через браузер.

Авторизуюсь под пользователем П1 через API.
Разлогин под пользователем П1.
Дальше любые попытки отправить запрос в API или зайти через браузер оканчиваются требованием авторизоваться.
Авторизуемся под пользователем П2 через API.
Заходим в браузер (через который авторизовывались) и получаем полный доступ к аккаунту пользователя П1 (не П2, под которым заходили)! Даже не смотря на то, что авторизовались якобы для использования API и даже могли самые скромные права затребовать для своего приложения.
Токен пользователя П1 в куках разве не перезаписывается токеном пользователя П2? Подменой кук на валидные «ломается» любой oAuth, тут ничего не поделать
Разве старый токен не должен инвалидироваться на сервере после логаута?

Конечно должен, проблема в том, что автор статьи делает логаут просто на сайте вк :


 vk.com/login.php?op=logout

А для логаута из vk oAuth нужно использовать другой адрес, что-нибудь вроде такого:


https://oauth.vk.com/logout

В целом, все выглядит логично, пользователь может продолжать использовать какой то ресурс, на котором авторизовался с помощью oAuth, даже если непосредственно сам контакт, использует другой человек. Собственно в документации vk написано следующее:


Доверенные приложения могут получить неограниченный по времени access token для доступа к API, передав логин и пароль пользователя.
Выдаваемый access token не привязан к IP-адресу пользователя, поэтому его достаточно для последующей работы с API без повторения процедуры авторизации.
Ок, давайте по-другому — при логине второго пользователя, куки и сессии прежнего разве не должны очищаться?
То есть вы логинитесь на одном сайте (vk.com), а куки и сессии чистятся на другом сайте (ваше приложение которое использует vk api)?
Вторым пользователем мы логинимся на vk.com и получаем _там_ (на вк, а не в приложении) сессию первого пользователя. При логине на вк надо очищать все возможные куки и токены от предыдущих логинов. Я так понимаю, предыдущий токен не чистится, вк получает И куку новой сессии И старый токен. И считает токен приоритетнее. Тут вообще не должно быть важно разлогинивался пользователь в приложении или нет и каким способом тоже. Не?
Каким образом вк получает старый токен? Токен к кукисам браузера не привязан. Токен — он для приложения. Куки — для браузера. Приложение получает токен с помощью переадресации браузера. На этом пути куки и токена расходятся навсегда (так задумано, по крайней мере).
Автор рассказал слишком мало, чтобы можно было хоть о чём-то говорить.
upd.: Нет, при разлогировании пользователя в браузере, в приложении его токен не должен быть «деактивирован». У токена есть своё время жизни, не зависящее от куков и сессии пользователя в браузере.
Понятия не имею как у них так получается. Возможно, api.vk запихал токен в куку с доступом *.vk. возможно приложение как-то умудрилось запихать его в куку с именем, которое случайно совпало с вк-шным и кука пролезла на соседний сайт :). Возможно даже пользователь зашёл на вк с прописанным в урле параметром с этим токеном. Это не так сильно важно. Но логично же, что при логине нового пользователя должны очищаться _все_ возможные прежние аутентификационные и авторизационные метки. Я даже не говорю, что их логично очищать и при разлогине (тем более, что это делается как раз на сайте vk), но при новом логине просто обязательно.
Да, автору хорошо было бы дать побольше информации — просто интересно в каком месте информация просачивается с одного сайта на другой.

Очищать где? В браузере, на сервере, в приложении?

В браузере.
На сервере тоже можно инвалидировать предыдущую сессию — она уже не понадобится.
Приложение вк не контролирует, там всё, как есть, оно ни чему не помешает — свой токен, живёт отдельной жизнью.
Еще раз повторю: при «разлогивании» человека в браузере, ни один токен деактивироваться не должен. Так задуман OAuth. И именно это — логично. Потому как я хочу разлогиниться на ВК, а не на хабре, например.
Давайте посмотрим на реализацию от GitHub: Логинимся на GitHub. Идём на dubblet.com и логинимся через GitHub OAuth. Разлогиниваемся в GitHub. Возвращаемся в dubblet, создаём новый документ, сохраняем его. И удивляемся тому, что в GitHub появился новый gist. Хотя мы были разлогинены в GitHub!
И что, вы когда в гитхабе логинитесь новым юзером получаете при этом доступ к данным старого? Вот то-то и оно!
А вы считаете, что автор получает доступ к данным старого аккаунта именно по вине vk? Вы вообще смогли понять, какую проблему обнаружил автор? Он ОЧЕНЬ куцо описал проблему. Никаких выводов сделать нельзя. Я месяц назад реализовывал авторизацию средствами vk OAuth и ничего подобного не наблюдал.
Ниже люди жалуются на «подобные» проблемы. Но при этом OAuth в их рассказах не упоминается. Возникает вопрос: при чем тут OAuth? Даже если проблема есть, очевидно, он тут ни при чем. Проблемы, с которыми столкнулся автор, могут быть вызваны самим автором. Если бы он описал подробно, кто какие запросы в каком порядке шлёт — можно было бы о чем-то говорить.
>А вы считаете, что автор получает доступ к данным старого аккаунта именно по вине vk?

В общем, да, я считаю, что после логнина второго пользователя доступ к данным первого должен быть прекращён. А OAuth или не OAuth рояли не играет.

>Проблемы, с которыми столкнулся автор, могут быть вызваны самим автором.

Нет, так быть не должно. То, что автор не использовал этот сценарий в плохих целях не значит, что этого не сделает кто-нибудь другой.
Почему на остальное не отвечаете? Вы смогли понять, с какой проблемой столкнулся автор? Если да — поведайте, пожалуйста. Если нет — я по-прежнему не понимаю, о чём тут можно говорить.
Сейчас я склонен считать, что автор и вовсе не выходил из аккаунта.
Да не важно ведь выходил он или не выходил. Что там происходит с его приложением не важно. Важно, что он залогинился в вк вторым пользователем, а получил данные первого. Вот _этого_ не должно происходить. Но происходит просто судя по ответу техподдержки (не бага, а фича). То есть они признали, что так и происходит.
Всю процедуру я описал. Что конкретно Вас интересует?

Что касается виновника — OAuth или не OAuth — я этого знать не могу. Я просто описал, каким образом обнаружил баг. Когда я пытался проделать весь этот фокус без участия API, через браузер (Opera) — у меня не получилось. Но я не исключаю возможности того, что есть какой-то способ провернуть это всё без участия API и OAuth. Но и утверждать могу только то, что видел своими глазами.

Что касается подробного описания процесса и отправляемых запросов — не было никаких запросов, кроме запроса на авторизацию, самого первого. Его я и привёл в статье. Отправляю запрос на авторизацию, разлогиниваюсь через указанную ссылку, отправляю запрос на авторизацию, вхожу в аккаунт другого пользователя и пользуюсь страницей первого. Всё. Это все запросы и весь порядок — в статье он описан.
Что именно вы подразумеваете под «пользуюсь страницей первого»? Вы пользуетесь ей в своем приложении или на вк.ком? Если в приложении, то какими именно возможностями вы располагаете?
Имхо, проблема действительно описана очень размыто.
Вообще, мне кажется я понял в чем дело, авторизация через oAuth происходит условно в два этапа:
1. Юзер авторизовывается на vk.com
2. Юзер авторизовывается в вашем приложении через oAuth. Здесь вам, как разработчику, дают access token для дальнейшей работы с данными пользователя.
Когды вы пытаетесь разлогинить пользователя, вы даете ему выйти из аккаунта на vk.com (Но не в вашем приложении!). Таким образом, access token продолжает храниться на вашей стороне, и, по всей видимости, когда новый юзер авторизовывается, второго этапа авторизации в вашем приложении не происходит, т.к. у вашего приложения уже есть действительный access token предыдущего юзера. Т.е. проблема безопастности исключительно на вашей стороне, вы не позаботились о том, что бы после завершения сессии пользователя почистить все его данные авторизации.
Поправьте меня если я не прав и не могли бы вы показать ваш запрос в ТП и их ответ?

Пользуюсь именно через браузер.на вк.ком.

Описанная Вами гипотеза была бы, возможно, верна, если бы пользоваться чужим аккаунтом можно было только через приложение. Но, как я уже несколько раз писал выше — дальнейшее использование аккаунта происходит именно в браузере, под полными правами, вне зависимости от затребованных приложением прав, даже при выключенном или даже удалённом приложении.

Про размытость описания я уже несколько раз читал в комментариях, но так и не понял, что ещё нужно описать. Весь процесс, как я его видел, я описал в статье и немножко дополнил в комментариях (в том числе в том, на который Вы только что ответили).

Как я уже несколько раз писал в статье и в комментариях я даю выйти пользователю именно в моём приложении!

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

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

Переписку с ТП я выкладывать не буду. Во-первых, ВК дал официальный комментарий, поэтому доказывать наличие запросов от меня в ТП и их содержание бессмысленно. Во-вторых, там довольно большой объём текста. Ну и в-третьих, всё-таки это переписка, не знаю, насколько корректно это будет по отношению к сотрудникам.

Суть же моего запроса и суть ответа на него я привёл в статье — я описал довольно подробно свои действия, ответил на парочку уточняющих вопросов и получил ответ о том, что таково поведение системы и таким оно должно быть, но, может быть, когда-нибудь, что-нибудь изменится, целуем, подпись.
«Даже после того, как официальные представители ВК признали наличие бага» — можете ссылочкой поделиться?
Какой именно метод авторизации использовался?
Вы не описали ровным счётом ничего, что позволило бы понять суть проблемы.
Я понял только, что Ваше приложение получило токен для пользователя. А дальше: Что за приложение (веб-сайт/десктоп/что-то еще)? Какой именно метод авторизации используется? КТО отправил запрос на завершение сессии в вк? Браузер? Ваше приложение? В любом случае, ссылка неправыильная, так чего Вы ожидали? Вы убедились, что разлогирование действительно произошло?
Как связаны права, которые запрашивает приложение к доступу к вк через браузер? Браузер о токене для Вашего приложения ничего не знает.
Расскажите подробно (желательно, в посте), что именно и в какой последовательности какие запросы слало на сервера ВК и какие ответы получало. Вот тогда можно будет говорить о чём-то. А так — каждый понял ситуацию как ему ближе и в итоге развели непонятно что.
Метод авторизации описан в статье и, в принципе, понятен из ссылки на авторизацию (параметр response_type).
Связь браузера и токена описана в статье.
Убедился ли я в разлогировании — описано в статье.
Тип приложения я добавил в статью.
Все запросы, которые я отсылаю (точнее, один запрос), описаны в статье и дополнительно описаны специально для Вас (потому что ответ был на ваш комментарий) в комментарии, на который вы только что ответили.

Статью немножко поправил, добавил пояснения, хотя вся процедура настолько проста, что даже не знаю, что ещё тут пояснять.

Завершение сессии отправляется из приложения — как мы уже убедились, такой ссылки больше нигде на сайте ВК нет, поэтому она может существовать только в приложении.

В любом случае, ссылка неправыильная, так чего Вы ожидали?


Сразу вспомнился анекдот — утерянный пистолет Макарова серии 1234321 считать недействительным. Т.е. взлом по неправильной ссылке считать недействительным?
вау! срыв покровов!
Моя статья вообще не вышла бы в свет, если бы поддержка не послала меня.
Она и задумывалась как способ привлечь внимание поддержки.
Не думал, что у кого-то так сильно подгорит от неё. Не думал, что на хабре есть люди, которым какие-то циферки в рейтингах, особенно чужих, делают так больно. Даже неудобно себя чувствую.
И да, мне кажется, что спамить комменты своими ссылками — это неэтично. Особенно, если это даже не прошедший модерацию материал.
Человек ответил на мой комментарий (за что ему большое спасибо). Потому что его пост отвечает на все мои вопросы. Вместо того, чтобы истекать желчью, лучше бы взяли с него пример: именно так посты писать и надо. Хорошо во всём разобраться. Отбросить истерики и бессмысленные громкие заявления. Излагать чётко и целостно. Так что его ссылка на не прошедший модерацию материал — очень даже к месту.
И да, человеку наплевать на цифорки и рейтинги (у нас с ним их попросту нет). Человек хочет помочь остальным разобраться в ситуации (и очень помог в этом мне лично, например). Вы — не хотите. Он — молодец. Вы — редиска.
Удачи!
Человек (как, кстати, и Вы) пришёл и начал со всей категоричностью заявлять, что я — дурак, а он — молодец. При том, что я просто описал то, что вижу. Не претендуя ни на что. Просто — увидел, написал в поддержку, был послан, написал сюда. Неужели так сложно прочитать и понять — это просто описание увиденного? НЕ экспертное мнение, НЕ гипотеза, НЕ претензия, НЕ интерпретация — просто увиденное своими глазами поведение системы. Проверенное несколько раз.

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

Но на хабре есть люди, которые точно и определённо знают, как всё было на самом деле. Они точно знают, что я — дурак и выдумщик, и они уже приготовили весь жирный шрифт, чтобы вывести меня на чистую воду. Вы из какого цирка, господа? Меня не надо выводить никуда — я написал то, что видел, и отошёл в тень. Никаких лавров у меня нет. Никаких денег мне на заплатили. Никаких предложений от гугла стать СЕО мне не поступило. И я вот вообще не понимаю — где и чему тут завидовать? Зачем приходить и изливать свою желчь фразами «да я уже давно всё это знаю, только никому не рассказал», «да вы тут всё на заблуждениях придумали, а я точно знаю, как всё было», «Щас я тут напишу свою разоблачающую статью, начну её с поливания грязью, а дальше отведу душу и соберу все рейтинги!»

Я бы на вашем месте, господа, с присущей мне корректностью, построил бы диалог по-другому. Я бы написал, что наблюдал совершенно другое наблюдение. Когда автор мне напомнил бы, что он видел что-то другое, я бы заметил, что, возможно, поведение системы уже изменилось или же произошло что-то, чего я не знаю (так бывает). Ну нет у меня такого свойства — забегать в комменты и сразу начинать всех обзывать дураками. Ну не могу я обвинять во лжи человека, которого не знаю, и которого на лжи точно и определённо не поймал. Но мы с вами, видимо, из разного теста. Ваше тесто, видимо, подразумевает непреложную веру в своё абсолютное знание.

И то, что этот ваш «бескорыстный» человек хочет помочь разобраться — да честь ему и хвала! Одна из целей моей публикации была — спросить компетентного мнения и самому разобраться в том, что происходит. Только зачем начинать разбирательства с обвинений (скрытых и явных). Если я написал, что видел такое поведение — значит я его видел. А отвечать мне в духе «камни с неба падать не могут, потому что их там нет» — отличный способ во всём разобраться.

Пока что из ваших «бескорыстных» комментариев я понял только, что я дурак и враль, и совершенно не понял, что произошло с системой. Но так как ваши мнения о моей личности мне не совсем интересны, то я заключаю, что пока что ничего полезного вы в эту историю не внесли.

П.С. вот уж не думал, что на хабре можно попасть в ситуацию, когда придётся отгавкиваться от чьих-то личных мнений, как будто я куда-то в комменты какой-нибудь смехогруппы вконтакте попал.
Дураком Вас никто не называл. Никто не говорил Вам, что Вы всё придумали. Вас никто ни в чем не обвинял. Вы написали пост. Его оказалось недостаточно для понимания ситуации. Попытки прояснить ситуацию Вы восприняли в штыки. Теперь вон вообще строчите огромные комментарии (чуть ли не больше самого поста), просто чтобы доказать незнакомому человеку, что он — редиска.
Человек пришёл и доходчиво объяснил, что именно Вы наблюдали. Вы вот сами в ситуации не разобрались, решили просто рассказать сообществу, что что-то видели. Человек разобрался и высказал свои выводы (как Вы говорите, честь ему и хвала за это, верно?). Сообществу. Потому что для того оно и задумывалось. И всё. Чем Вас это задевает?
Я предлагаю закрыть эту бессмысленную демагогию.
На все вопросы об уточнениях я ответил. На те, конечно, где было написано, чего конкретно не хватает.

А в штыки я начал воспринимать только неприятные лично мне категорические заявления.

«4. Баг (не фича) в том, что какие бы вы данные не ввели в форму, вас просто перебросит на ранее авторизованную станицу, даже если вы ввели валидные авторизационные данные для другого аккаунта.» Это заявление, на котором комментатор и построил все свои дальнейшие рассуждения и обвинения. На самом деле они не соответствовали действительности в моём случае. Потому что это означало бы, что перейди я на любую другую страницу без ввода авторизации, я бы мог без проблем туда попость. Между тем никакой переход ни на какую страницу не мог быть осуществлён без ввода авторизационных данных. В описываемом мною случае. Но Остапа уже понесло — не разобравшись в описываемых событиях он уже начал обвинять в том, что кто-то другой в чём-то не разобрался.

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

Закрытие бессмысленной демагогии я поддерживаю.
Кстати, я на хабре пару дней, ещё не освоился — тут есть какой-то способ передавать рейтинг и карму другим пользователям? Я вижу что вам ооочень надо, я бы с вами, как с особо нуждающимся в циферках на экране, тешащих ущемлённое самолюбие, поделился бы — лишь бы не видеть этого самоунижения и «изкожилезенья» ради «славы» (даже смешно это слово в данном контексте применять).
Сейчас пост вами отредактированный более чем полностью, содержит другие формулировки и дополнительную информацию, из-за чего часть комментариев выглядит теперь странно.

Мой пост прошёл модерацию, но остался в песочнице.
Что мною отредактировано:

Добавлено

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

И
"Это авторизация методом Implicit flow."
Добавлено по той же причине.

Это и есть отредактированный более чем полностью пост?

«Не смог докопаться, так хоть уйду, хлопнув дверью»
Да. Это и есть. Это единственный параграф, который хоть что-то проясняет.
Это не единственные правки, но хорошо, попробуйте прочитать статью без этого абзаца) Складывается впечатление что виной всему OAuth и при помощи приложения можно получить доступ к посторонней странице, что является очень серьёзной уязвимостью. Это то, что я понял прочитав утром ваш пост. Но позже смог убедился что дела обстоят совсем иначе.
Это единственные правки, не считая последний абзац, который я добавил почти сразу после публикации, когда у статьи было, по-моему, едва пара тысяч просмотров, после первых комментариев о том, что мне нужно было обращаться вначале в поддержку.

Но вам, конечно, виднее, какие у меня в посте правки.

Но самое главное, что абсолютно все эти правки уже были на момент вашего комментария на тему «скандалы, интриги, расследования». Т.е. с данными правками ваши комментарии были уже неактуальны? Зачем же вы их публиковали? Если же они актуальны и этими правками, т.е. и сейчас, тогда почему же вы пишете, что после (вами придуманного) «полного переписывания» моего поста, многие комментарии потеряли актуальность?

П.С. два пользователя, зарегистрированные с разницей в месяц одновременно поочерёдно пишут мне почти одинаковые по содержанию и некоторым семантическим особенностям «обличающие» комментарии. Совпадение — не думаю) Несложно перелогиниваться?
Таким образом, если опять показать страницу авторизации, ввести совершенно другой логин и пароль — вы всё равно сможете пользоваться страницей первого пользователя.

Вот и сошлось. Я думал, это только у меня такие странности ИНОГДА происходят. У меня и у жены есть аккаунты в ВК. Она обычно не выходит, а просто браузер закрывает (firefox). А мне приходится при открытии ВК нажимать «выход» и потом логиниться под собой. Так вот, уже много раз было так, что после ввода своего логина и пароля я попадаю в её аккаунт. Со всеми правами. При этом к своему аккаунту уже не имею доступа. Не помогает ни обновление страницы, ни чистка кэша/куков. Повторно выхожу-захожу — опять то же самое. Помогает чаще всего выход, чистка куков и смена внешнего IP (выключить-включить роутер). Иногда просто нужно подождать какое-то время.
Но это далеко не всегда происходит. В последние месяцев 4-5 не замечал такого, но ранее — как минимум раз в месяц попадалось.
Сообщал им об этом чуть более года назад. Ответили что этого не может быть и у меня едет крыша.
Потому и не пишу им, обзовут дураком и засудят ещё (скажут что это я поломал).
Да, это тянется уже не один год.
только сегодня с этим столкнулся впервые.
дал девушке планшет поиграться, она не вышла.
нажал выход — ввел свои данные и попал на ее страницу.
снова вышел — снова зашел — результат тот же.
подумал что заглючил планшет (но не планшет а сам хром) — хотя куки сносил несколько раз.
через несколько часов снова повторил эксперимент, результат тот же. потыкал по ссылкам и в какой то момент меня благополучно катапультировало на мою страничку.
Подтверждаю. Неоднократно сталкивался с таким поведением при логине/разлогине.

Могу потеоритезировать. Возможно у них access_token живет не в сессии, а например в localdb.

А как же «Завершить все сеансы»?
Правда на текущий не сработает
при чем здесь это? люди говорят о доступности к личной информации других пользователей, а не о возможности разлогиниться
интересная фича. работает только с того ПК, где происходила первая авторизация?
Самое интересное начинается после выхода из ВК. Ваше приложение может иметь ссылку на выход вида vk.com/login.php?op=logout. Это стандартная ссылка на выход из VK. Но после выхода пользователя из VK куки остаются рабочими.


А где Вы нашли эту «стандартную» ссылку для выхода?
Но в кнопке «Выход» везде ссылка такого вида «https://login.vk.com/?act=logout...». Или где-то есть другие ссылки?
Да… странно. Может уже поменяли. Ссылку точно брал из кнопки Выйти, только не помню точно с какой страницы — из обычного пользовательского интерфейса или со страницы установки приложения. Там и сейчас отличаются между собой ссылки, но той, которая у меня описана, нет теперь ни там, ни там.
После выхода остаются пиктограммы тех, с кем чатился, можно просмотреть имена и фамилии. Интересно, это тоже фича а не баг?
Кажется, всегда так было. Справа снизу?
Объясняю как всё на самом деле:
1. Автор поста из стороннего приложения переходит по ссылке https://vk.com/login.php?op=logout
2. На сайте ВК такая ссылка сопровождается хешем https://vk.com/login.php?op=logout&hash=abcdefgh
3. Фича (не баг) в том, что при невалидном (пустом) хеше выход из аккаунта не происходит, а автор видит страницу которую и запрашивал (/login.php)
4. Баг (не фича) в том, что какие бы вы данные не ввели в форму, вас просто перебросит на ранее авторизованную станицу, даже если вы ввели валидные авторизационные данные для другого аккаунта.

p.s.: репортил пару лет назад, сказали не баг, а для удобства глупеньких)
И опять человек, который знает «как было на самом деле». Как было «на самом деле» я описал в статье.
При всём уважении, статья строится на заблуждении.
И да, я повторил описанные вами действия.

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

Это не так. Переход по ссылке https://vk.com/login.php?op=logout не завершает сессию пользователя.
Ссылка не действительна без параметра «hash».

Дальше пользователь П2 авторизуется через приложение.

Это не так. Запросите с полученным токеном данные текущего пользователя. Это П1.

После этого ни через браузер, ни через приложение зайти в ВК без авторизации не получится.

Это не так. Любая страница требующая авторизацию работает с данными П1, к примеру, https://new.vk.com/im
При всём уважении, Ваше заявление строится на невнимательности. В статье описано, что после перехода на данную ссылку, происходит логаут. Никакое действие после данного перехода не может быть выполнено без авторизации. Об этом в статье написано. Т.е. логаут всё же происходит. Повторюсь в который раз — ни одно действие после перехода по указанной ссылке не могло быть произведено без авторизации — ни запросы из приложения, ни переходы по ссылкам ВК в браузере. Что ещё считать логаутом, как не перманентное требование авторизации?

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

Сами перейдите по ссылке https://vk.com/login.php?op=logout.
Вы увидите форму авторизации.

Если теперь перейти по ссылке https://vk.com или https://vk.com/habr вы всё ещё видите форму авторизации.

Но если же перейти по ссылке https://vk.com/im, которая требует обязательную авторизацию, то вы вдруг окажитесь залогинены.

Так было годами ранее, так есть и сейчас.
Про многолетнюю выдержку — я даже не сомневаюсь. Собственно, если бы он не был с многолетней выдержкой — о нём бы сейчас и не говорили. На право первородства совершенно не претендую. Увидел баг, сообщил куда следует, был послан, опубликовал. Вас задевает конкретно факт того, что я написал о том, о чём Вы уже давно знаете?
Ни в коем случае. После прочтения вашего поста не до конца ясна суть проблемы, комментарии тому подтверждение. Я попытался разъяснить что к чему, не более.

К тому же вы используете ряд ошибочных допущений, ещё и выделяете главное заблуждение жирным. И пользователь П2 тут не нужен, причина в неправильной ссылке выхода и последующем дурацком поведении ВК при невалидном (в вашем случае пустом) параметре hash.
Общение с человеком, который и без тебя знает, как всё на самом деле, априори бессмысленно.

Как в ещё одном анекдоте — «сейчас ты будешь верить своим бесстыжим глазам, а не любимой жене».

Поведение, с которым я столкнулся, описано в статье, некоторые дополнения даны в комментариях. Честно говоря, не знаю, что ещё добавить. Признаться, что я — дурак с галлюцинациями, а Вы — великий учёный, вычисливший Нептун на кончике карандаша — извините, пока не убедили. Своим бесстыжим глазам я пока ещё верю.
Я ни коим образом не хотел задеть ваше ЧСВ. Каюсь если так вышло.

Вы указываете OAuth и П2 как часть бага, которые тут ни при чём.
Проблема исключительно в ссылке выхода без обязательного параметра.
Это я и пытаюсь вам объяснить)
По-моему, это ваше ЧСВ задето. Кто-то написал о баге, о котором я знаю много-много лет, надо срочно написать, что он не прав и рассказать народам мира «как всё было на самом деле». В сотый раз повторяю — поведение системы, которое я наблюдал, я описал в статье. Там же я указал, что не берусь судить о том, является это багом или уязвимостью или и правда «фича».

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

Гипотезы, обсуждение, спор — это нормально, но когда приходит человек и говорит — вы все дураки, а я точно знаю, как было на самом деле, щас я вам тут все ваши заблуждения жирным шрифтом-то повыделяю — ну это, как мне кажется, немножко неправильная постановка вопроса. Особенно после того, как сами разработчики сказали, что подлатают, и теперь уже ничего, наверное, не докажешь — ну да, быть самым умным задним числом — это, наверное, кого-то согревает холодными зимними вечерами.

В общем, описание того, что я видел своими глазами — в статье. Вашу версию «точного знания как всё было» вы тоже описали. Можно я пойду?
Sign up to leave a comment.

Articles