Подтвердить что ты не робот

Вопрос о GWT, Cookies и веб-странице

Я использую gwt для создания веб-сайта. этот вопрос касается страницы входа и файлов cookie, чтобы сохранить данные для входа в систему. GWT позволяет создавать веб-сайт на одной веб-странице.

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

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

также кнопка выхода из веб-приложения удалит информацию из файла cookie и приведет вас на страницу входа в систему (удалите информацию о файлах cookie и направьте вас в часть входа на веб-страницу).

или будет другой подход.

4b9b3361

Ответ 1

Я бы сказал, что вы почти правильно поняли: D Вот как я обрабатываю логин/выход из системы в своем приложении:

  • Пользователь загружает страницу - если у него есть файл cookie с токеном (см. следующие пункты для получения дополнительной информации), отправьте этот токен на сервер, чтобы проверить, действительно ли он действителен. Если он действителен, вы вошли в систему, перейдите к пункту 5. См. Примечания ниже о том, как обращаться с недопустимым токеном.
  • Пользователь вводит комбинацию пользователя/пароля. Эта информация отправляется на сервер (лучше было бы отправить его по зашифрованному соединению, но с GWT его трудно достичь - например, см. этот вопрос).
  • Сервер проверяет, совпадает ли совпадение пользователя / пароля хеш (см. ниже) с тем, что в базе данных/независимо. Если это так, он генерирует токен (только некоторые случайные, довольно длинные строки, такие как UUID) и отправляет его клиенту.
  • Если пользователь установил флажок "Запомнить меня" во время входа в систему, сохраните токен в файле cookie с будущей датой истечения срока действия (см. другие руководства/вопросы о рекомендуемом периоде времени).
  • Когда клиент получает токен, он должен использовать его для запроса каждый, сделанного сервером, который вы хотите выполнять только проверенным подлинности пользователям. Там сервер проверяет, действительно ли токен (вы должны отслеживать маркеры/пар пользователей в своей БД), и если да, авторизуйте транзакцию/независимо. Здесь catch:, если вы полагаетесь только на файл cookie, вы будете уязвимы для атаки XSRF. То, почему вы также должны передать токен (файл cookie передается автоматически - почему возможна атака XSRF) в качестве части запроса (знаете, как дополнительное поле в JSON или поле в POJO, которое вы отправляете через GWT- RPC или даже в HTTP-заголовке).
  • При явном выходе (нажав ссылку "Выход из системы" и т.д.), отправьте информацию на сервер, который только что вышел из системы. Затем сервер должен удалить/аннулировать токен. Он должен делать это независимо от опции "Запомнить меня" - поскольку явный выход из системы означает, что пользователь хочет удалить информацию о регистрации на этом ПК/браузере и не позволяет другим пользователям войти в систему как он. Если пользователь просто закрывает браузер/страницу, и вы правильно настроили файл cookie в пункте 4 (это означает, что он не истекает при закрытии браузера), только если выбрана опция "Запомнить меня" ), при следующем посещении пользователь должен автоматически войти в систему в точке 1.

Некоторые дополнительные примечания

  • Это очень важно: не забудьте проверить на стороне сервера, если токен, прошедший через файл cookie, равен тому, который передан как часть запроса/полезной нагрузки.
  • Не хранить пароли в своей базе данных в виде обычных текстовых хэшей паролей. Используйте BCrypt для максимальной безопасности. Вот почему я написал, что вам следует сравнить хэши паролей, а не фактические пароли.
  • Когда сервер встречает недействительный токен, это может означать несколько вещей - от нормального до предупреждения. В общем, хорошо регистрировать эти ситуации и регулярно проверять журналы для какой-либо ненормальной активности.
    • Пользователь не посещал сайт в течение долгого времени и срок действия токена. Убедитесь, что вы правильно выполнили срок действия токена на стороне клиента (правильные даты истечения срока действия файлов cookie должны привести к тому, что пользователь будет перенаправлен на страницу входа в систему, не отправив истекший токен) и на стороне сервера (специальная задача, которая ежедневно проверяет список токенов и удаляет истекшие?)
    • Возможно, вы указали некоторые другие ограничения на проверку токенов - например, токен не может быть истек, а текущая попытка должна быть от того же IP-адреса, что и тот, из которого первоначально был создан токен.
    • При отправке запроса произошла ошибка , и она возникла неверно/повреждена - не может этого сделать, но перенаправить пользователя на страницу входа
    • Третья сторона пытается войти в систему, используя маркер ручной работы. Если вы используете глупо легко угадывать маркеры (например, на основе имени пользователя, rot13, собственного супер-особого-удивительного "шифрования" и т.д.), Вы рано или поздно будете укушены этим. UUID является примером хорошего кандидата на токен - как следует из названия, это универсально уникальный идентификатор, а это означает, что ни один из двух пользователей не должен иметь одинаковые UUID, а сами UUID являются случайными и длинными.

Безопасность в приложениях AJAX - серьезный бизнес. Я видел слишком много веб-приложений с легкостью использовать дыры в безопасности. Убедитесь, что вы полностью понимаете, что и почему вы делаете. Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать:)


Обновление 2015-06-12: GWT - Security RPC XSRF

Ответ 2

Здесь вы можете найти некоторую информацию о безопасности входа в GWT. Существует также раздел о том, как использовать файлы cookie, чтобы помнить, что пользователь вошел в систему.

Ответ 3

Вот лучшая ссылка, с которой я пришел (с полным implementation). Полный цикл входа в систему с сохранением файла cookie (sessionId).

Это было бы намного лучше, если у вас есть опция "Remember me"

Управление сеансом в GWT