Смена PHP-сессий в phorum - PullRequest
0 голосов
/ 07 мая 2018

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

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

Вы можете увидеть источник аутентификации и управления сессиями phorum здесь , это довольно просто. Сеансы создаются только через вход в систему или из существующих файлов cookie, поэтому моя рабочая теория (после разговора с разработчиком phorum) заключается в том, что на сервере существует какая-то проблема с кэшированием. Существует известная проблема с кэшированием, которая затрагивает ASP (см. здесь или здесь для примеров), но мой сервер - это сервер Linux, работающий под Apache 2.4, MySQL (технически MariaDB 10.1 + InnoDB) и PHP 5.6 , Кто-нибудь знает, как это может происходить? Я занимался этим более недели и добился небольшого прогресса, кроме подтверждения отсутствия ошибок в коде сеанса phorum.

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

РЕДАКТИРОВАТЬ # 1: я добавляю некоторые заголовки запроса и ответа.

Вот ответ для начального GET, чтобы получить список форумов. Общая информация

URL запроса: https://www.example.com/forum/list.php?11 Запрос

Метод: GET Код состояния: 200 Удаленный адрес: x.x.x.x: 443

Политика реферера: no -rerrer-when-downgrade

Заголовки ответа

кодировка содержимого: тип содержимого gzip: text / html;

кодировка = UTF-8 дата: Пн, 07 мая 2018 20:23:08 GMT сервер: Apache

set-cookie: phorum_session_v5 = 35% 3A412b7c329cc8741de88532342df9; истекает = вт, 08 мая-2018 20:23:08 мск; Max-Age = 86400; Путь = /

статус: 200 варьируется: Accept-Encoding через: e3s

Заголовки запроса

: авторитет: www.example.com

: метод: GET

: путь: /forum/list.php?11

: схема: https

принять: текст / html, приложение / xhtml + xml, приложение / xml; q = 0,9, изображение / webp, изображение / apng, / ; q = 0,8

принять кодировку: gzip, deflate, br принять язык: en-US, en; q = 0,9

контроль кэша: max-age = 0

cookie: phorum_session_v5 = 35% 3A412b7c329cc8741de88532342df9;

реферер: https://www.example.com/forum/addon.php?11,module=user_list

запросы на обновление-небезопасность: 1 пользовательский агент: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 66.0.3359.139 Safari / 537.36

А вот еще один вызов Ajax:

Общее

URL запроса: https://www.example.com/forum/ajax.php?client

Метод запроса: ПОЛУЧИТЬ код состояния: 200 (из кеша памяти)

Удаленный адрес: x.x.x.x: 443 Политика реферера: no-referer-when-downgrade

Заголовки ответа

возраст: 734

контроль кеша: обязательный повторный сертификат

кодировка содержимого: gzip

длина содержимого: 2862

тип содержимого: текст / javascript; кодировка = UTF-8

дата: Пн, 07 мая 2018 18:29:37 GMT

истекает: Вт, 08 мая 2018 02:29:37 GMT

Прагма: Кэш

сервер: Apache

статус: 200

варьируется: Accept-Encoding

через: e2s

1 Ответ

0 голосов
/ 15 мая 2018

@ Sammitch был прав - phorum не устанавливал управление кэшированием в заголовках для большинства моих страниц. Это приводило к тому, что собственная система кэширования моей службы хостинга кешировала ответы, включающие сеансовые куки

Я исправил это, изменив мой файл .htaccess, как описано здесь: https://stackoverflow.com/a/7664157/1411376

Похоже, это работает для моей конфигурации сервера, поскольку в коде php (phorum) не было кода, который устанавливал бы управление кэшем (кроме запросов ajax).

...