безопасный способ сохранить сеанс в react universal web application ( react.js )

#reactjs #api #express #authentication #session

#reactjs #API #экспресс #аутентификация #сеанс

Вопрос:

Я создаю универсальное веб-приложение, используя react.js . Я использую express для рендеринга сервера, и есть другой server-side api server , который доставляет объект json из базы данных.

поэтому, когда мой клиент react извлекает api для входа или регистрации, сервер api создает токен jwt и устанавливает cookie в Set-Cookie заголовке ответа с параметрами HttpOnly, которые предотвращают возникновение проблемы безопасности XSS.

после ответа сервера api я смог найти cookie на application вкладке в инспекторе Google Chrome.

Здесь начинается моя проблема. из-за опции HttpOnly клиент не может прочитать document.cookie, поэтому нет способов убедить проверить, что сеанс действителен при каждом обновлении страницы.

как я могу с этим справиться?

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

Комментарии:

1. Поскольку у вас есть файл cookie в клиенте как HttpOnly, я считаю, что теперь нет необходимости использовать document.cookie . Разве весь смысл обработки сеанса сервера не в том, чтобы сервер обрабатывал ваш сеанс?

2. да, сервер api обрабатывает cookie, что означает, что сервер api ответственен за создание cookie и отправку его клиенту через http заголовок Set-Cookie , но клиенту все равно нужно проверять, существует cookie или нет при каждом обновлении страницы.

Ответ №1:

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

Обратите внимание на следующее о файлах cookie HttpOnly

An HttpOnly cookie is not accessible via non-HTTP methods, such as calls via JavaScript (e.g"document.cookie")

Итак, каково решение узнать, есть ли у пользователя файл cookie сеанса

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

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

Комментарии:

1. если есть какой-то момент, который мне не ясен, я действительно ценю ваш ответ. Спасибо