Проблема с одноразовой ссылкой, нужны идеи

Прислано: axel

сб, 20/03/2010 - 00:04

Время от времени на webmaster@drupal.ru приходили жалобы о не работе одноразовой ссылки при смене пароля. После массовой смены паролей в феврале жалобы повалились пачками, уже больше сотни писем с подобной проблемой. Мне эту ошибку не получилось воспроизвести. По багрепортам пришёл к выводу, что ошибка не завязана на конкретный броузер или ОС. См. ниже как это выглядит в логах на примере конкретного пользователя (IP и мейл скрыты). По логу видно, что запрашивается пароль, затем переход по ссылке, судя по логу успешный, авторизация пользователя, и далее пользователь получает access denied на странице редактирования своего аккаунта.

Выглядит похоже на давние траблы http://dag.wieers.com/blog/drupal-password-reset-and-transparent-proxies и http://drupal.org/node/24398, но это вроде давно пофиксено. В общем причина проблемы неясна, хотя похоже связана с cookies. Жду ваших идей. Также было бы шикарно заполучить лог обмена броузера с drupal.ru где эта ошибка воспроизводится - может быть кто из напоровшихся на эту траблу пользуется wireshark? - сохраненный в нем дамп обмена был бы очень полезен.

Для справки, восстановлением паролей заведует user_pass_reset() в user.module/user.pages.inc.

Ниже пример лога запроса пароля на drupal.ru:

Mar 19 23:18:49 [drupal] http://drupal.ru|1269029929|user|XXX.XXX.XXX.XXX|http://drupal.ru/user/password|http://drupal.ru/user/password|0||Password reset instructions mailed to podpole at xxxx@xxxx.xx.
Mar 19 23:19:24 [drupal] http://drupal.ru|1269029964|user|XXX.XXX.XXX.XXX|http://drupal.ru/user/reset/19256/1269029929/718e8a50b76a70ca0cf161fd5239cf99/login|http://drupal.ru/user/reset/19256/1269029929/718e8a50b76a70ca0cf161fd5239cf99|0||User podpole used one-time login link at time 1269029929.
Mar 19 23:19:24 [drupal] http://drupal.ru|1269029964|user|XXX.XXX.XXX.XXX|http://drupal.ru/user/reset/19256/1269029929/718e8a50b76a70ca0cf161fd5239cf99/login|http://drupal.ru/user/reset/19256/1269029929/718e8a50b76a70ca0cf161fd5239cf99|19256||Session opened for podpole.
Mar 19 23:19:25 [drupal] http://drupal.ru|1269029965|access denied|XXX.XXX.XXX.XXX|http://drupal.ru/user/19256/edit|http://drupal.ru/user/reset/19256/1269029929/718e8a50b76a70ca0cf161fd5239cf99|0||user/19256/edit
Mar 19 23:20:23 [drupal] http://drupal.ru|1269030023|user|XXX.XXX.XXX.XXX|http://drupal.ru/user/password|http://drupal.ru/user/password|0||Password reset instructions mailed to podpole at xxxx@xxxx.xx.
Mar 19 23:20:35 [drupal] http://drupal.ru|1269030035|user|XXX.XXX.XXX.XXX|http://drupal.ru/user|http://drupal.ru/user|0||Login attempt failed for podpole.
Mar 19 23:21:04 [drupal] http://drupal.ru|1269030064|user|XXX.XXX.XXX.XXX|http://drupal.ru/user/reset/19256/1269030023/4363ca4dfe004983bc2890c652346990/login|http://drupal.ru/user/reset/19256/1269030023/4363ca4dfe004983bc2890c652346990|0||User podpole used one-time login link at time 1269030023.
Mar 19 23:21:04 [drupal] http://drupal.ru|1269030064|user|XXX.XXX.XXX.XXX|http://drupal.ru/user/reset/19256/1269030023/4363ca4dfe004983bc2890c652346990/login|http://drupal.ru/user/reset/19256/1269030023/4363ca4dfe004983bc2890c652346990|19256||Session opened for podpole.
Mar 19 23:57:13 [drupal] http://drupal.ru|1269032233|user|XXX.XXX.XXX.XXX|http://drupal.ru/user/password|http://drupal.ru/user/password|0||Password reset instructions mailed to podpole at xxxx@xxxx.xx.
Mar 19 23:58:25 [drupal] http://drupal.ru|1269032305|access denied|XXX.XXX.XXX.XXX|http://drupal.ru/user/19256/edit||0||user/19256/edit
Mar 19 23:58:29 [drupal] http://drupal.ru|1269032309|user|XXX.XXX.XXX.XXX|http://drupal.ru/user/reset/19256/1269032233/71d28a751d734b45d4463830fc33ce4f/login|http://drupal.ru/user/reset/19256/1269032233/71d28a751d734b45d4463830fc33ce4f|0||User podpole used one-time login link at time 1269032233.
Mar 19 23:58:29 [drupal] http://drupal.ru|1269032309|user|XXX.XXX.XXX.XXX|http://drupal.ru/user/reset/19256/1269032233/71d28a751d734b45d4463830fc33ce4f/login|http://drupal.ru/user/reset/19256/1269032233/71d28a751d734b45d4463830fc33ce4f|19256||Session opened for podpole.
Mar 19 23:59:33 [drupal] http://drupal.ru|1269032373|user|XXX.XXX.XXX.XXX|http://drupal.ru/user/password|http://drupal.ru/user/password|0||Password reset instructions mailed to podpole at xxxx@xxxx.xx.
Mar 19 23:59:51 [drupal] http://drupal.ru|1269032391|user|XXX.XXX.XXX.XXX|http://drupal.ru/user/reset/19256/1269032373/525a9ad4b4b9d424f33ec5139e27f288/login|http://drupal.ru/user/reset/19256/1269032373/525a9ad4b4b9d424f33ec5139e27f288|0||User podpole used one-time login link at time 1269032373.
Mar 19 23:59:51 [drupal] http://drupal.ru|1269032391|user|XXX.XXX.XXX.XXX|http://drupal.ru/user/reset/19256/1269032373/525a9ad4b4b9d424f33ec5139e27f288/login|http://drupal.ru/user/reset/19256/1269032373/525a9ad4b4b9d424f33ec5139e27f288|19256||Session opened for podpole.
Mar 20 00:00:52 [drupal] http://drupal.ru|1269032452|user|XXX.XXX.XXX.XXX|http://drupal.ru/user/password|http://drupal.ru/user/password|0||Password reset instructions mailed to podpole at xxxx@xxxx.xx.
Mar 20 00:01:05 [drupal] http://drupal.ru|1269032465|user|XXX.XXX.XXX.XXX|http://drupal.ru/user|http://drupal.ru/user|0||Login attempt failed for podpole.
Mar 20 00:01:57 [drupal] http://drupal.ru|1269032517|user|XXX.XXX.XXX.XXX|http://drupal.ru/user/reset/19256/1269032452/329f8465ff511db76adfe485788e6659/login|http://drupal.ru/user/reset/19256/1269032452/329f8465ff511db76adfe485788e6659|0||User podpole used one-time login link at time 1269032452.
Mar 20 00:01:57 [drupal] http://drupal.ru|1269032517|user|XXX.XXX.XXX.XXX|http://drupal.ru/user/reset/19256/1269032452/329f8465ff511db76adfe485788e6659/login|http://drupal.ru/user/reset/19256/1269032452/329f8465ff511db76adfe485788e6659|19256||Session opened for podpole.
Mar 20 00:01:57 [drupal] http://drupal.ru|1269032517|access denied|XXX.XXX.XXX.XXX|http://drupal.ru/user/19256/edit|http://drupal.ru/user/reset/19256/1269032452/329f8465ff511db76adfe485788e6659|0||user/19256/edit

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано RxB в сб, 20/03/2010 - 03:23.

Есть пока одна догадка, но я не уверен.
Может пока тупо похакать функцию, чтобы иметь больше информации?


Опубликовано RxB в сб, 20/03/2010 - 03:33.

Точнее думается мне, что виновата не user_pass_reset(), а user_authenticate_finalize() и вызов sess_regenerate() в частности, мне кажется, что мы банально не можем получить

  $old_session_id = session_id();

Есть идеи как это проверить


Опубликовано axel в сб, 20/03/2010 - 15:47.

RxB написал(а):

Есть идеи как это проверить

Это вопрос или утверждение? :) У меня пока нет идей, т.к. от меня через трёх провайдеров функция восстановления пароля работает ОК. Нужно проверять из места, где это не срабатывает.


Опубликовано RxB в сб, 20/03/2010 - 17:14.

Это утверждение.
Но мне фтп никто не даст


Опубликовано axel в сб, 20/03/2010 - 18:36.

RxB написал(а):

Это утверждение.
Но мне фтп никто не даст

На продуктив drupal.ru больше не будет никаких ftp и ssh, сорри, но проблем потом больше :) Но я подниму несколько копий сайта с аналогичной конфигурацией - на них будут даны права желающих проводить доработку drupal.ru. Можно также поднять тестовые площадки с чистым друпалом. Отработанные изменения будут переноситься на рабочий сайт.


Опубликовано RxB в сб, 20/03/2010 - 18:38.

Ок. Ждёмс


Опубликовано Mirocow в чт, 26/08/2010 - 18:25.

виновата смена алгоритма авторизации по кукам с 6.17 версии
все дело в точки


Опубликовано RxB в чт, 26/08/2010 - 18:30.

"axel" написал(а):

сб, 20/03/2010 - 03:04

Дата поста кагбе ласково намекае что до 6.17 жить и жить, проблема давняя


Опубликовано Mirocow в чт, 26/08/2010 - 18:33.

ну сорь не посмотрел
Но с такой же проблемой сталкивался, виновата была именно точка


Новое на сайте