Проверка наличия файла cookie в браузере клиента без ожидания следующего подключения

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

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

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

Наилучший способ, который я могу определить на данный момент, - это каким-то образом проверить, чтобы соединение продолжалось достаточно долго для отправки куки-файла клиенту. Я смотрел на connection_handling, но я не уверен, был ли файл cookie отправлен по сети (даже если статус normal на момент setcookie) или был принят браузером.

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

2 ответа

Вы не можете точно знать, получил ли клиент куки-файл до следующего запроса.

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

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

Это очень похоже на то, что у вас есть. SSL поможет сохранить идентификатор сеанса в безопасности, но вы все равно захотите сохранить систему управления одноразовыми номерами для предотвращения атак повторного воспроизведения.

Невозможно узнать, что браузер получил данные cookie, если браузер не сделает запрос на подтверждение этого.

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

Если javascript был отключен или подтверждение не получено, вы все равно примете предыдущий подтвержденный сеанс.

Другие вопросы по тегам