Cookie и безопасность в Java (GAE) - PullRequest
1 голос
/ 08 февраля 2012

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

Каков наилучший способ обработки файлов cookie таким способом?Как мне хранить / извлекать их (hashtable / datastore ...)?

Спасибо

Ответы [ 3 ]

3 голосов
/ 09 февраля 2012

Я бы рекомендовал использовать встроенные объекты сеанса Java HttpSession, для которых GAE / J поддерживает. Смотрите здесь документы о том, как включить сеансы в GAE.

Вы можете установить истечение сеанса по истечении определенного периода времени или сохранить в нем номер и проверить сеанс извне.

2 голосов
/ 11 февраля 2012

Я согласен с Риком, дизайнеры контейнеров проделали грязную работу по проверке того, поступает ли запрос от одного и того же пользователя, и вы не хотите изобретать велосипед, не так ли?

HttpSession session = request.getSession(); 

Этосоздаст новый сеанс, если он еще не существует, но если он это сделает, он получит существующий сеанс.

session.setAttribute('key', value);

значение может быть любым Сериализуемым POJO, а ключ - строкой.Вы можете извлечь сохраненное значение в области действия вашего приложения с помощью следующего кода.

Object value = (Object) session.getAttribute('key');

Для получения дополнительной информации о том, как использовать сеансы, проверьте спецификации Java для HttpSessions.

2 голосов
/ 09 февраля 2012

Вы можете попробовать следующие параметры:

  • идентификатор пользователя
  • время жизни (миллисекунды)
  • хеш для:
    • пароль пользователя
    • идентификатор пользователя
    • удаленный IP или браузер
    • время жизни (точно так же, как и раньше)
    • и, возможно, предопределенная строка или соль

Объедините его в одну строку (например, 13413:1826271762:b026324c6904b2a9cb4b88d6d61c81d1) и сохраните в файле cookie, например USERID.

На каждый запрос вам нужно:

  • проверить, что указанное время действительно (меньше текущего)
  • загрузка пользователя из базы данных по указанному идентификатору
  • проверить хэш-подпись (по текущему удаленному IP / браузеру и текущему паролю)
...