Разлогинивает рандомно + доступ к логину за пределами форума

Проблемы с установкой или работой phpBB 3.2.x? Получите помощь здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB 3.1.x/3.2.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14407
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 344 раза
Поблагодарили: 1514 раз
Контактная информация:

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение rxu » 01.06.2019 20:31

BadBlock писал(а):
01.06.2019 20:26
попробую написать на phpbb.com.
Им будет нужен алгоритм повторения данного бага, которого пока нет.
Может быть, возможно создать искусственные условия, при которых он будет надежно воспроизводиться.
Может быть, поиграть с настройкой времени действия автовхода.
Изображение

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз
Контактная информация:

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение BadBlock » 01.06.2019 20:37

Например, можно подумать над тем, чтобы ключ после использования помещался в спецтаблицу с указанием sid новой сессии, и очень коротким временем жизни, типа 1 минута.

В этом случае во втором запросе из моего сценария (протухший sid и невалидный ключ) можно просто проверить эту таблицу, и если ключ k1 в ней есть, то игнорировать sid1 из куки, взять данные новой сессии для ключа k1 из этой таблицы и не создавать новую сессию sid3, а применить имеющуюся sid2, повторно отправив в браузер обновлённые куки c sid2 и k2. Юзер останется залогиненным.

Отправлено спустя 8 минут 28 секунд:
rxu писал(а):
01.06.2019 20:31
Им будет нужен алгоритм повторения данного бага, которого пока нет.
Может быть, возможно создать искусственные условия, при которых он будет надежно воспроизводиться.
Полагаю, алгоритм воспроизведения может быть такой:
1. Установить в админке время жизни сессии 10 минут.
2. Зайти на форум с включённой галкой "Запомнить меня". Оставить открытой главную страницу.
3. Подождать 15 минут.
4. Зажав кнопку Ctrl, быстро (в пределах секунды) щёлкнуть по паре разделов форума.
По идее, должно разлогинить, особенно если пинги большие.
Последний раз редактировалось BadBlock 01.06.2019 20:49, всего редактировалось 1 раз.

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14407
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 344 раза
Поблагодарили: 1514 раз
Контактная информация:

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение rxu » 01.06.2019 20:48

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

Отправлено спустя 21 секунду:
BadBlock писал(а):
01.06.2019 20:46
Полагаю, алгоритм воспроизведения может быть такой:
Проверьте.
Изображение

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз
Контактная информация:

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение BadBlock » 01.06.2019 20:53

rxu писал(а):
01.06.2019 20:49
Сессии в принципе отвязаны от ключей автовхода.
Нет. Именно привязаны.
Ключ генерируется из sid сессии. Стартует новая сессия — сразу для неё, и c использованием её sid, генерируется новый ключ автовхода.
Сессия протухла — используется ключ, но тут же стартует новая сессия и генерируется новый ключ автовхода.
rxu писал(а):
01.06.2019 20:49
Проверьте.
Проверю на досуге, да.

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14407
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 344 раза
Поблагодарили: 1514 раз
Контактная информация:

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение rxu » 01.06.2019 21:17

BadBlock писал(а):
01.06.2019 20:53
Сессия протухла — используется ключ, но тут же стартует новая сессия и генерируется новый ключ автовхода.
Тогда автовход должен происходить без проблем.
Изображение

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4137
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 107 раз
Поблагодарили: 429 раз
Контактная информация:

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение Siava » 01.06.2019 21:21

BadBlock писал(а):
01.06.2019 8:14
утром человек открывает форум, и не обязательно открывает главную страницу сайта и форум параллельно, а может просто из сохраненных закладок открывать в нескольких вкладках браузера несколько подфорумов. Сразу, параллельно. Первая вкладка открывается нормально, в друх других авторизация слетает.
BadBlock писал(а):
01.06.2019 17:51
Юзер после долгого отсутствия на форуме открывает сразу 2 его страницы. Понимаете? Сразу, параллельно.
Первая страница создаёт сессию и автозалогинивает юзера. Она генерирует новый sid и ключ.
Вторая тут же разлогинивает
Всё именно так! Причём неважно в каком браузере, но по моим наблюдениям почему-то в хроме больше вероятность такого разлогинивания.. возможно потому что он при запуске открывает все вкладки, тогда как другие фоновые держат закрытыми.
И в логе connection log появляется сначала запись, что авторизация была с автовходом, но сессия уже тю-тю.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.2.x)

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз
Контактная информация:

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение BadBlock » 01.06.2019 21:24

rxu писал(а):
01.06.2019 21:17
Тогда автовход должен происходить без проблем.
Так он и происходит, но только для первого запроса.
А на втором запросе с тем же sid и k — юзера разлогинивает.
Механизм разлогинивания описал максимально подробно.

Отправлено спустя 1 минуту 56 секунд:
Siava писал(а):
01.06.2019 21:21
возможно потому что он при запуске открывает все вкладки, тогда как другие фоновые держат закрытыми.
О! Тоже вариант. Восстановление вкладок же.

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14407
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 344 раза
Поблагодарили: 1514 раз
Контактная информация:

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение rxu » 01.06.2019 21:27

BadBlock писал(а):
01.06.2019 21:26
Так он и происходит, но только для первого запроса.
Это нонсенс. После первого запроса и куки, и ключ обновляются. Второй запрос в том же браузере пройдет без проблем. Старой куке и ключу взяться неоткуда.
Изображение

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз
Контактная информация:

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение BadBlock » 01.06.2019 21:32

rxu писал(а):
01.06.2019 21:27
Это нонсенс. После первого запроса и куки, и ключ обновляются. Второй запрос в том же браузере пройдет без проблем. Старой куке и ключу взяться неоткуда.
Второй и последующие запросы в браузере пройдут без проблем только в том случае, если они выполнены после получения с сервера данных первого запроса, а именно новых кук.

Но если второй запрос выполняется ДО получения обновлённых кук из первого запроса, то он отправляет старые куки. К моменту поступления второго запроса на сервер старые куки уже обе невалидны, и юзер получает гостевую сессию.

Отправлено спустя 30 минут 53 секунды:
Посмотрел в БД.
Автологиновые сессии можно прекрасно отличить от обычных по полю session_autologin (0 или 1).

Таким образом, временное решение проблемы "на коленке" представляется следующим:

1. По умолчанию время жизни сессии, если не ошибаюсь, 1 час.
2. Установить в админке очень большое время жизни сессии. Типа там, не знаю, дни или месяцы.
3. Написать свой маленький крон-скрипт, который будет ходить и прибивать сессии c полем session_autologin = 0, последняя активность у которых была более 1 часа назад.

Таким образом, обычные сессии будут, как и положено, умирать в течение часа.
Это позволит содержать таблицу сессий в чистоте и хорошей производительности.

А автологиновые сессии не будут умирать очень долго. Для регулярных юзеров вообще никогда.

По-моему, должно быть достаточно эффективно.

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4137
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 107 раз
Поблагодарили: 429 раз
Контактная информация:

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение Siava » 01.06.2019 22:42

BadBlock писал(а):
01.06.2019 22:03
Установить в админке очень большое время жизни сессии. Типа там, не знаю, дни или месяцы.
А что будет, если за это время у пользователя сменится IP адрес, версия браузера? Данные в сессии останутся прежние? Я честно не помню как там всё работает, но при смене IP, версии браузера сессия создавалась новая.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.2.x)

Аватара пользователя
Pazh
Former team member
Сообщения: 2194
Зарегистрирован: 09.11.2009 17:46
Благодарил (а): 41 раз
Поблагодарили: 453 раза
Контактная информация:

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение Pazh » 01.06.2019 23:53

Если в Chrome зайти в панель разработчика и там переключить на мобильный вид (Togle device toolbar) и обновить страницу - происходит разлогирование если не было включено запоминание при входе в аккаунт.
форум ЖК Вестердам Помощь в ЛС/email только за WM или ЯД

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4137
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 107 раз
Поблагодарили: 429 раз
Контактная информация:

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение Siava » 02.06.2019 0:00

Pazh, вероятно потому, что user-agent меняется.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.2.x)

Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11455
Зарегистрирован: 18.02.2007 19:01
Откуда: Рига, Латвия (страна-недоразумение)
Благодарил (а): 52 раза
Поблагодарили: 2554 раза
Контактная информация:

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение Sheer » 02.06.2019 0:03

Pazh, там в этом случае меняется сессия браузера, со всеми вытекающими последствиями. За это Хром не люблю и им не пользуюсь при разработке.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз
Контактная информация:

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение BadBlock » 02.06.2019 6:19

Sheer писал(а):
02.06.2019 0:03
Pazh, там в этом случае меняется сессия браузера, со всеми вытекающими последствиями. За это Хром не люблю и им не пользуюсь при разработке.
При разработке можно и отключить проверку браузера в админке. Зачем эта проверка на dev-инсталляции? :)
Siava писал(а):
01.06.2019 22:42
А что будет, если за это время у пользователя сменится IP адрес, версия браузера? Данные в сессии останутся прежние? Я честно не помню как там всё работает, но при смене IP, версии браузера сессия создавалась новая.
Это зависит от настроек на странице "Безопасность" в админке ( adm/index.php?i=acp_board&mode=security ).
Если изменилось то, что там включено — сработает ключ автологина, создастся новая сессия и новый ключ — всё, как сейчас, ничего не поменяется.
Вероятность того, что при этом ещё и на сервер от клиента полетят два параллельных запроса, и сейчас невелика, а тут ещё уменьшится на порядки.

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

Более корректным и долговременным решением видится что-то типа того, что я описал выше, это решение должно принципиально снять проблему разлогинивания по невалидным кукам как таковую. Но это решение требует:
1. Изменений в коде ядра.
2. Добавления новой таблицы в БД или же модификации имеющейся таблицы session_keys — например, добавить в неё 2 новых поля: "предыдущее значение ключа" и "timestamp изменения значения ключа".

Алгоритм: некоторое короткое время после изменения значения на новое (несколько секунд, не более минуты) считаем предыдущее значение протухшего ключа валидным. В пределах этого времени при поступлении запроса со старым ключом применяем соответствующую старому значению новую залогиненную сессию и новое значение ключа и возвращаем в куках. Юзер остаётся залогиненным.

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз
Контактная информация:

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение BadBlock » 03.06.2019 18:29

Написал небольшое расширение — решение "на коленке".
Решение чистое: код ядра не трогается, системные таблицы не меняются.

Как им пользоваться:
1. Выставить в админке, на странице "Общие" - "Нагрузка на сервер", большое время жизни сессии (я у себя поставил пока 30 дней, то есть, 2592000 секунд).
2. Установить расширение.
3. В настройках расширения выставить небольшое время жизни сессии — я у себя поставил 1 час, то есть, 3600 секунд.
4. Это всё.

Что происходит:

- Расширение по крону чистит протухшие сессии — старше, чем, к примеру, 1 час. Но оно чистит только сессии гостей и обычные (неавтологиновые) сессии юзеров. Автологиновые сессии и ключи не трогает вообще.
- Автологиновые сессии, если они протухают, через 30 дней снесёт системный крон (функция session_gc()). Системный крон будет также пытаться продолжать чистить обычные сессии + гостевые, тут ничего не меняется, но они до этого крона уже просто не доживают, т.к. 30 дней не живут. Также системный крон продолжает чистить протухшие ключи автологина.

Что это даёт:

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

Указанная выше настройка времени жизни сессий даёт тот эффект, что автологиновые сессии для активных юзеров не протухают в течение 1 месяца (разумеется, в зависимости от настройки) — а значит, каждый день новая сессия не создаётся, т. к. юзер попадает всё время в свою предыдущую залогиненную сессию, и сценарий разлогинивания не срабатывает.

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

Если интересно, сообщите — дотестирую и, если всё нормально, приложу код.

Ответить

Вернуться в «Поддержка phpBB 3.2.x»