Аутентификация Firebase предоставляет firebaseAuthToken, безопасно ли это?

Я пытаюсь предоставить логин Google для своего приложения Firebase. После https://www.firebase.com/docs/security/simple-login-overview.html

Похоже, что после успешного входа в систему пользователь может быть получен, поэтому он может быть, например, сохранен в области Angular - например. $scope.loggedInUser. (В зависимости от вашей реализации это не обязательно должен быть Angular)

Мой вопрос заключается в том, является ли угрозой безопасности то, что пользователь, возвращенный Firebase с большим количеством токенов аутентификации, может быть разоблачен? Код находится в Javascript, так или иначе хакеры должны иметь возможность захватить и украсть пользователя, внедрив некоторый код в браузер.

Меня беспокоят следующие моменты: accessToken, firebaseAuthToken

Если это риск, как мы можем его обезопасить?


Пожалуйста, обратитесь к приведенному ниже коду для аутентификации и данных пользователя:

Вот код для аутентификации:

authModule.controller( 'AuthController', [
  '$scope',
  '$firebase',
  function ( $scope, $firebase ) {
    var ref = new Firebase( 'https://test123.firebaseio.com' );

    var auth = new FirebaseSimpleLogin( ref, function ( error, user ) {
      if ( user ) {
        $scope.loggedInUser = user; // user has authenticated, this user contains security information
      }
    } );

    $scope.login = function () {
      auth.login( "google", {
        scope: 'https://www.googleapis.com/auth/plus.login'
      } );
    };
  }] );

Что содержится в loggedInUser (это просто пример данных):

loggedInUser:  { 
    id: 7058267704789236427849
    uid: google:7058267704789236427849
    displayName: Joe Bloggs
    provider: google
    thirdPartyUserData:  { 
        id: 709139364278942374
        email: [email protected]
        verified_email: true
        name: Joe Bloggs
        given_name: Joe
        family_name: Bloggs
        link: https://plus.google.com/2672340913423423
        picture: https://lh3.googleusercontent.com/.../photo.jpg
        gender: male
        locale: en-GB
     } 
    accessToken: W8k8dD6vvLEdlWa-dxkJD8lvWIwzea6m_86um8...
    email: [email protected]
    firebaseAuthToken: Q3Mjc4MzYsInYiOjAsImQiOnsiaWQiOiIxMDk0...
 } 

person Max    schedule 06.07.2014    source источник
comment
Я думаю, что размещение токенов доступа на открытом веб-сайте представляет больший риск, чем в области Angular. Надеюсь, это не ваши настоящие.   -  person ivarni    schedule 06.07.2014
comment
Учитывая, что вы уже отправили учетные данные в браузер, это не должно иметь большого значения, решите ли вы сохранить их в памяти или нет. Если кому-то удалось провести XSS-атаку и выполнить код в браузере пользователя, он может украсть эти токены независимо от того, сохранены они или нет, как только будет выполнен обратный вызов от FirebaseSimpleLogin.   -  person ivarni    schedule 06.07.2014
comment
Спасибо. Это не мои настоящие данные :D   -  person Max    schedule 06.07.2014
comment
Хорошо. Мне просто нужно спрашивать каждый раз, когда я вижу размещенные здесь жетоны, вы будете удивлены, как часто они на самом деле настоящие :)   -  person ivarni    schedule 06.07.2014
comment
Кажется, это что-то опасное :D   -  person Max    schedule 06.07.2014
comment
Кто-то оценил этот вопрос как нечто неважное. Это интересно. Это действительно вызывает у меня беспокойство, и я уверен, что другим также необходимо рассмотреть эту проблему. Каким-то образом это особенно связано с firebase, поскольку у него есть firebaseAuthToken.   -  person Max    schedule 06.07.2014
comment
Я не минусовал, но я бы предположил, что человек, который сделал это, сделал это из-за отсутствия исследований/усилий. Тема достаточно важная.   -  person ivarni    schedule 06.07.2014
comment
Еще раз большое спасибо.   -  person Max    schedule 06.07.2014
comment
Отличный вопрос @Ming. Ваш вопрос, вероятно, был отклонен, потому что он якобы касается того, как работает OAuth и каковы риски безопасности OAuth; вероятно, достойный главы или, возможно, целой книги. Тем не менее, мы попробуем старый колледж!   -  person Kato    schedule 08.07.2014


Ответы (2)


В основном это вопрос об OAuth и о том, как он работает. Генерация зашифрованного токена имеет основополагающее значение для этого процесса. Существует множество мнений о том, можно ли и где хранить этот токен (куки, локальное хранилище, память и т. д.).

Безопасен ли токен? При использовании в сеансе SSL протокол OAuth достаточно безопасен. Firebase использует те же методы и методы шифрования OAuth, что и другие громкие имена, все из которых предоставляют токены OAuth аналогичным образом (фактически, в Simple Login вы можете получить свой токен аутентификации Facebook, например, как часть полезной нагрузки входа в систему, точно так же, как это дано нам через API Facebook).

Это не значит, что у OAuth нет недостатков. В сфере безопасности нет идеального ответа, поскольку все является компромиссом. Единственная полностью безопасная система — это та, которая не существует физически, не подключена к какой-либо сети и недоступна для людей.

Что касается XSS и т. д.: по сути, как только тролли окажутся в замке, фарфор разобьется. Если клиент скомпрометирован, то ничего не защищено. Если пользователю удастся каким-то образом скомпрометировать браузер вашего клиента или выполнить успешный XSS, то он может получить доступ к вашей учетной записи несколькими способами, независимо от того, говорим ли мы о токенах OAuth или простых полях логина/пароля.

Таким образом, если вы считаете, что аутентификация Google, Facebook, Twitter, Yahoo и M$ относительно безопасна, вы можете так же доверять схеме аутентификации Firebase.

person Kato    schedule 08.07.2014
comment
Спасибо за ответ. Это помогает мне лучше понять OAuth. Решение OAuth, предоставляемое Firebase, — это моя первая попытка в области OAuth (и это здорово!), поэтому мне нужно больше исследований, чтобы выяснить, сколько людей могут использовать эти токены. Когда я использую OAuth на любом веб-сайте, они всегда сообщают людям, что все контакты, связанные с учетной записью, вошедшей в систему, становятся доступными для системы. Тот факт, что все эти веб-сайты получают только эти токены, заставляет меня чувствовать, что приложение на стороне клиента с возможностью разоблачения всего этого пугает (у серверной части не было бы проблем) - person Max; 09.07.2014

Чтобы дать больше ответов на мой собственный вопрос, чтобы он был полезен для других людей, которые сталкиваются с тем же вопросом, я попытался войти в систему, выйти из системы и снова войти в систему. Каждый раз я получаю разные токены (для обоих: accessToken, firebaseAuthToken). Таким образом, эти токены действуют как sessionId и истекают при выходе из системы.

Нашел ответ от Эндрю Ли из Firebase. Он объясняет, что токены ограничены по времени и могут храниться в локальном хранилище браузера (именно так мы предполагаем поддерживать активную сессию).

См.: https://stackoverflow.com/a/14094165/2810746

person Max    schedule 10.07.2014