Frage

Ich bin mit der aktuellen Version von restful_authentication, die auf Github zu finden ist, und ich bin ein paar seltsamen Sitzung Fragen. Der Server scheint zu irgendwie Sitzungen zu Benutzern zuweisen es sollte nicht sein. Dies geschieht nur, wenn der Überquerung des abgemeldet / angemeldet Barriere.

Hier ist ein Beispiel. Ohne Sitzungen auf dem Server aktiv, ich melde Sie sich bei einem Konto mit Benutzer A auf einem anderen Rechner, melde ich mich mit Benutzer B. Dann, wenn sie aus Benutzer B anmelden, irgendwann nach der Abmeldung Umleitung geschieht, werde ich angemeldet als Benutzer A. Von diesem Punkt kann ich weiterhin die Website navigieren, als ob ich als dieser Benutzer angemeldet hatte! Etwas, das ich über die Protokolle beobachtet habe, ist, dass, wenn dieser Hijack geschieht, wird der Session-IDs ist nicht die gleiche. User A wird in beiden Sitzungen angemeldet, aber die Session-IDs sind völlig verschieden. Dies ist nur ein Beispiel dafür, was passieren könnte. Ich kann das Problem nicht zuverlässig reproduzieren, wie es scheinbar zufällig ist.

Es scheint nicht ein Symptom für die Umwelt oder den Server zu sein, es läuft auf. Ich kann das Problem mit beiden Mischlings und Beifahrer reproduzieren. Ich habe es auch in der Entwicklung und Produktion gesehen. Ich bin mit db-basierten Sitzungen in dieser Anwendung und es läuft auf Rails 2.1.1. Ich bewarb mich die Stateful-Option, wenn der Generator aufrufen. Ansonsten sind keine weiteren Änderungen vorgenommen, wie Sitzungen behandelt werden.

Update Hier ist die beanstandete Methode, die direkt von restful_authentication kam.

# 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
War es hilfreich?

Lösung 2

Ich weiß nicht, ob dies so viel von einer Antwort ist, da es eine Arbeit um ist. Alles, was ich tat, war zu Cookies in Ihrem Browser-Sitzungen wechseln und alles reibungslos funktioniert.

Andere Tipps

Dies kann passieren, wenn Sie (oder diejenigen, die restful_authentication schrieb), um die aktuellen Benutzer in einer Klassenvariablen Caching. Ich habe eine Reihe von Artikeln zu sehen die Verwendung von „User.current_user“ befürworten, aber da Klassen über Anfragen zwischengespeichert sind, kann diese Sitzung tainting führen.

Ist diese Seite Fernbedienung? Protokollieren Sie in es auf zwei verschiedenen Computern im selben Netzwerk?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top