Revision 3ccf5a8a
Von Moritz Bunkus vor mehr als 5 Jahren hinzugefügt
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
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.