Достаточно ли безопасна эта система входа? - PullRequest
3 голосов
/ 16 сентября 2010

Заглянув в нашу систему входа в систему, чтобы добавить некоторые новые функции, я обнаружил, что она не очень безопасна. Auth cookie был шифрованием user id, stamp, version, PASSWORD IN THE RAW, and a cookie id По крайней мере, я могу сказать, что я не тот, кто сделал это так, как предыдущий разработчик. (Да, я знаю, что пароль должен быть сохранен в виде хэша в базе данных, а не в виде простого текста. Первоначальный разработчик сделал это таким образом, и я еще не исправил это.)

Итак, я много читал о безопасном входе в систему и о безопасных файлах cookie здесь и в Интернете. Я вижу, как легко это сделать не безопасно.

О сайте

  • это сайт электронной коммерции, на котором также есть много общественных вещей (доска объявлений, галерея)
  • страница входа принудительно HTTPS
  • все страницы учетной записи и оформление заказа также принудительно HTTPS
  • текущий пароль необходим для изменения пароля или адреса электронной почты

Вот мой план:

Цели:

  • может быть зарегистрировано более чем в одном месте
  • требуется перерегистрация для защищенных частей магазина, только длится 30-60 минут, cookie-файлы установлены только в безопасном режиме
  • возможность видеть все текущие логины
  • возможность выхода из системы во всех местах
  • бэкэнд-вход безопасен и длится дольше. ограниченный вход за пределами офиса

      user gets page:
       no auth:
        have user sign in with username & pass          
        create new token
        expires =
         https on store: 30-60 min 
         backend in office: 5 days
         backend remote: 30-60 min?
         regular without remember me: session or 24 hours?
         regular with remember me: 30 days
        insert into user_session
        set cookie
       auth:
        token in db:
         set uid
         generate new token, new expires, insert into DB, remove old?
         upddate cookie
        token not in db:
         logout, requre sign in
    
    
    
      table user_session:
       uid
       uid_as   (for being 'logged in' as another user, admin feature only)
       token
       type
       ip address
       expires
       stamp
    
    
      cookie value: token|hash(token + user id, server key) 
    

Из всего, что я прочитал, это то, что я придумал. Я чувствую, что я что-то упустил, хотя. Есть ли проблемы с моим планом или способами сделать его более безопасным, кроме использования HTTPS для всего сайта? (в настоящее время это вызовет некоторые проблемы, но я рассмотрю это позже)

1 Ответ

1 голос
/ 16 сентября 2010

Звучит как большой шаг вперед - ваш файл cookie все еще может быть взломан другим пользователем, особенно если пользователь не logout (уничтожает информацию БД о сеансе). Просто что-то, о чем нужно знать.

Если вы хотите одновременно поддерживать несколько входов в систему, вам нужно будет учитывать один и тот же токен для всех (плохой план) или уникальный токен на сеанс. В последнем случае вы захотите привязать сеанс к IP-адресу, что также снижает возможность подделки токена с другого компьютера.

Для критических транзакций (если они есть) вы также можете попросить пользователей подтвердить свой пароль (через HTTPS).

...