Проблема непреднамеренного перехвата сеанса с помощью Restful Authentication

StackOverflow https://stackoverflow.com/questions/145169

Вопрос

Я использую текущую версию restful_authentication, найденную на github, и у меня возникает куча странных проблем с сеансом.Кажется, что сервер каким-то образом назначает сеансы пользователям, чего не должно быть.Это происходит только при пересечении барьера выхода из системы/входа в систему.

Вот пример.Поскольку на сервере нет активных сеансов, я вхожу в учетную запись с пользователем A.На другой машине я вхожу в систему под пользователем B.Затем при выходе из системы пользователя B, через некоторое время после перенаправления выхода из системы, я войду в систему как пользователь A.С этого момента я могу продолжать перемещаться по сайту, как если бы я вошел в систему под этим пользователем!Из журналов я заметил, что когда происходит этот захват, идентификаторы сеансов не совпадают.Пользователь А вошел в систему в обоих сеансах, но идентификаторы сеансов совершенно разные.Это лишь один пример того, что может произойти.Я не могу достоверно воспроизвести проблему, поскольку она кажется случайной.

Похоже, это не является признаком среды или сервера, на котором он работает.Я могу воспроизвести проблему, используя как дворнягу, так и пассажира.Я также видел это в разработке и производстве.В этом приложении я использую сеансы на основе БД, и оно работает на Rails 2.1.1.Я применил опцию состояния при вызове генератора.В остальном никаких других изменений в способе обработки сеансов не вносилось.

Обновление здесь - это метод оскорбления, который пришел непосредственно от RESTFUL_Authentication.

# Accesses the current user from the session.
# Future calls avoid the database because nil is not equal to false.
def current_user
  @current_user ||= (login_from_session || login_from_basic_auth || login_from_cookie) unless @current_user == false
end
Это было полезно?

Решение 2

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

Другие советы

Это может произойти, если вы (или те, кто написал restful_authentication) кэшируете текущего пользователя в переменной класса.Я видел кучу статей, пропагандирующих использование "User.current_user", но поскольку классы кэшируются по всем запросам, это может привести к порче сеанса.

Этот сайт удален?Вы входите в систему на двух разных компьютерах в одной сети?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top