OAuth авторизация через Вконтакте пренебрегла CSRF защитой

Сервис авторизации VKontakte.ru OAuth перестал обрабатывать токен безопасности — параметр state. Эта проблема была замечена мной на этой неделе. У меня на сайте Orgeo.ru повалились ошибки проверки CSRF ключа безопасности, который должен передаваться и возвращаться в параметре state. Если ключ тот же, значит сессия корректная. Проверка достаточно простая и предотвращает CSRF-атаки (Сross Site Request Forgery). Facebook рекомендует использовать параметр state и уж тем более его не отключал.

В официальной документации VK.com метода авторизации посредством OAuth теперь параметра state вообще не указано. Хотя раньше он точно был. Сервис авторизации ВКонтакте просто возвращал его назад в нетронутом виде, как и требует того стандарт OAuth 2.0.

Причины упразднения данной фичи администрацией ВКонтакте не ясны. Безопасность лишней не бывает. Так что авторизация через Вконтакте стала чуточку опаснее для пользователей этой социальной сети. Если конечно админы сайта с такой авторизацией не исхитрятся и не зашьют хэш CSRF-защиты, например, в параметр redirect_uri. В общем, заботящимся о безопасности пользователей администраторов, теперь придется немного исхитриться, чтобы реализовать стандартную защиту, которую Контакт почему-то убрал.

И зачем же было рушить уже работавшую стандартную схему???

 

2 комментария

  • Александр

    Приведите пример использования csrf?

  • Vankof

    Пример CSRF защиты или атаки? Пример атаки приводить не буду — их и так полным полно в интернете. А если интересует именно пример защиты в условиях API ВКонтакте с отсутствующим параметром state — то это уже другое дело:)

    Тут, как вариант, добавлять хэш токен CSRF защиты как часть передаваемого параметр redirect_uri при запросе к серверу OAuth авторизации vk.com. А при ответе, вычленять этот хеш токен и сопоставлять с хранимым в сессии пользователя эталонным токеном.

    Геморройно, но решение.

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

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