[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Удалить HttpOnly cookie
AllesKlar
Такая вот неприятность....
Клиентская часть на javascript, серверная часть middleware на php
Домены разные.
Клиент шлет CROSS запросы, все хорошо.

При первом запросе в Response Headers прилетает
Set-Cookie:PHPSESSID=i9hbu7t6jihl4f3uikfvr62104; path=/


При последующих запросах клиент отправляет в Request Headers
Cookie:PHPSESSID=i9hbu7t6jihl4f3uikfvr62104


И вот тут проблемка:
есть такая опция у клиента: logout
При этом запросе он отправляет серверу запрос на удаление сессии.
Так вот, если в этот момент на сервере что-то пошло криво (кто-то кривыми ручками говняшек в код наложил), то сессия на сервере удалена не будет.

При следующем запросе, клиент опять же отправит эту же печеньку в заголовке на сервер, и сервер вернет чего-нибудь там из сесси (она же удалена не была)

Задача: при логауте со стороны клиента насильственно разорвать порочную связь клиента с сервером, в не зависимости от мнения сервера на этот счет.

При обычных условиях, просто убиваются Cookie и PHPSESSID канает в лету.
Тут же CROSS и все Cookie с флагом HttpOnly и доступа из скриптов к ним нет.

_____________
[продано копирайтерам]
Oyeme
Храните SessionId в таблице Session. Таким образом смежите восстановить текущею сессию.

1.Клиент вышел с сайта и cookies остались в котором храниться PHPSESSID
2.Делается запрос в базу
3.Сессия востанавливается

Цитата
Задача: при логауте со стороны клиента насильственно разорвать порочную связь клиента с сервером, в не зависимости от мнения сервера на этот счет.


Если клиент сделал logout, то cookies будут удалены.
При следущем заходе будут созданы cookies и сессия.

Старая сессия которая не удалилась будет удалена через 1440 seconds (default Session time)
AllesKlar
Цитата (Oyeme @ 12.10.2017 - 11:52)
Если клиент сделал logout, то cookies будут удалены.

Кем? как? :)
Я не удалял. Очень хочу удалить, но они HttpOnly и не доступны ни из консоли браузера, ни из javascript


Цитата (Oyeme @ 12.10.2017 - 11:52)
При следущем заходе будут созданы cookies и сессия.

:) Спасибо. Да, именно так оно и работет.


Oyeme
Возможно, ты прочитал бегло суть вопроса.
Итак, еще раз, на этот раз в картинках:
Клиент и сервер на разных доменах.
Клиент шлет CROSS xhr с флагом xhr.withCredentials = true

Шаг 1.
Шлем от клиента к серверу login (корректно)
получили ответ:
Response Headers:
Свернутый текст
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:X-CSRF-Token
Access-Control-Allow-Methods:GET, POST, OPTIONS
Access-Control-Allow-Origin:http://front.com
Access-Control-Expose-Headers:X-CSRF-Token
Cache-Control:no-store, no-cache, must-revalidate
Connection:keep-alive
Content-Type:application/json
Date:Thu, 12 Oct 2017 12:09:44 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Pragma:no-cache
Server:nginx/1.10.3
Set-Cookie:PHPSESSID=k7s5tcnpv9n4vbl3g0eit40b47; path=/
Transfer-Encoding:chunked



Шаг 2.
Клиент шлет запрос asset/list к серверу вместе с заголовками (корректно):
Request Headers:
Свернутый текст
Accept:*/*
Accept-Encoding:gzip, deflate
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,ru;q=0.2,ca;q=0.2
Connection:keep-alive
Cookie:PHPSESSID=k7s5tcnpv9n4vbl3g0eit40b47
Host:core.bc3.local
Origin:http://front.com
Referer:http://front.com/asset/list
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36



Получили содержимое сессии с сервера;

Шаг 3.
Клиент шлет запрос logout к серверу вместе с заголовками (корректно):
Request Headers:
Свернутый текст
Accept:*/*
Accept-Encoding:gzip, deflate
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,ru;q=0.2,ca;q=0.2
Connection:keep-alive
Cookie:PHPSESSID=k7s5tcnpv9n4vbl3g0eit40b47
Host:core.bc3.local
Origin:http://front.com
Referer:http://front.com
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36



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

Шаг 4.
Повторяем Шаг 2 (не имеем права, но мы хакеры, и знаем, что на сервере сессия не была удалена).
И получаем содержимое сессии с сервера (она же удалена не была).

Вот меня и интересует, как заставить клиента удалить куку PHPSESSID.
Тогда при попытке повторить Шаг 2, сервер корректно пришлет ничего.

_____________
[продано копирайтерам]
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.