Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 3ccf5a8a

Von Moritz Bunkus vor mehr als 5 Jahren hinzugefügt

  • ID 3ccf5a8a5d5ede8cb37d5e5886c128c6bb35ae00
  • Vorgänger 3fb7a4a5
  • Nachfolger 9db40ab0

Sessions: keine Prüfung der Quell-IP-Adresse

Wenn ein Hostname sowohl A- (IPv4) als auch AAAA-Records (IPv6)
aufweist, nutzen manche Reverse Proxies wie nginx mal IPv4, mal
IPv6. Dadurch prüft kivitendo manchmal (nämlich genau dann, wenn die
Verbindung über IPv4 reinkommt) die Quell-IP. Wurde die Session aber
initial über IPv6 erzeugt, so schlägt die Quell-IP-Prüfung natürlich
fehl.

Die Quell-IP-Prüfung liefert eh einen mehr als fragwürdigen Gewinn an
Sicherheit. Für IPv6, wo sich die Quell-Adresse aufgrund von Techniken
wie Privacy Extensions mitten in der Session ändern kann, haben wir
die Prüfung ja eh schon nicht mehr.

Unterschiede anzeigen:

SL/Auth.pm
577 577
  #  1. session ID exists in the database
578 578
  #  2. hasn't expired yet
579 579
  #  3. if cookie for the API token is given: the cookie's value equal database column 'auth.session.api_token' for the session ID
580
  #  4. if cookie for the API token is NOT given then: the requestee's IP address must match the stored IP address
581 580
  $self->{api_token}   = $cookie->{api_token} if $cookie;
582 581
  my $api_token_cookie = $self->get_api_token_cookie;
583 582
  my $cookie_is_bad    = !$cookie || $cookie->{is_expired};
584 583
  $cookie_is_bad     ||= $api_token_cookie && ($api_token_cookie ne $cookie->{api_token}) if  $api_token_cookie;
585
  $cookie_is_bad     ||= $cookie->{ip_address} ne $ENV{REMOTE_ADDR}                       if !$api_token_cookie && $ENV{REMOTE_ADDR} !~ /^$IPv6_re$/;
586 584
  if ($cookie_is_bad) {
587 585
    $self->destroy_session();
588 586
    return $self->session_restore_result($cookie ? SESSION_EXPIRED() : SESSION_NONE());

Auch abrufbar als: Unified diff