Sesje i bezpieczeństwo

0

Czy ktos tutaj mógłby opisac na czym polega vezpieczenstwo w sesjach?
Czytalem na roznych stronach ale czasami jedna wypowiedz drugą wyklucza.
Ogolnie ludzie piszą zeby uzywac jakiegos algorytmu do generowania id sesji ( tylko jak to zapisac skoro sesja sama wysyla klucz ) zeby nikt nie mogl wykrasc id sesyjnego. Jednoczesnie piszą ze id sesji po ponownym jej wygenerowaniu te stare nie usuwa sie. Jest jskis sposob na usuniecie starego??
Ogolnie jest wiele tematow ktore bardziej mieszaja w glowie nic cos rozjasniaja.
Zna ktos z Was jakis tutorial ktory opisuje bezpiecxne uzywanie sesji?

2

Nie idzie zabezpieczyc sie przed kradzieza sesji. Sejsa dziala jak klucz kto go ma to otworzy drzwi ;). Sesja wygasa po okreslonym czasie ustalonym na backendzie. Nie pisze w PHP to ci nie pomoge od strony technicznej. Co do zarzadznaia sesjami to wydaje mi sie ze wystarczy trzymac je w db i tam mozna je usuwac i miec nad nimi kontrole.

0

Prosze o sprawdzenie. Jeszcz przydaloby sie ustawic na sztywno czas esji gdzies w bazie danych i to tez sprawdzac.


<?php
$existingSessionId = session_id();

if ($existingSessionId != "")
{

     session_start();
	 session_regenerate_id();
     $_SESSION = array();

     if (ini_get("session.use_cookies")) {
         $params = session_get_cookie_params();
         setcookie(session_name(), '', time() - 42000,
             $params["path"], $params["domain"],
             $params["secure"], $params["httponly"]
         );
     }

     session_destroy();
	 session_regenerate_id();
}
else {
	
session_start();
if(session_status() == PHP_SESSION_ACTIVE)
{
    session_regenerate_id();
	

$user_browser = $_SERVER['HTTP_USER_AGENT'];
$ip_address = '127.0.0.1';
$password = 'qwerty12345';

$_SESSION['userid'] = '1';
$_SESSION['login'] = hash('sha512', $password.$ip_address.$user_browser);


$user_id = $_SESSION['userid'];
$login_string = $_SESSION['login'];




$login_check = hash('sha512', $password.$ip_address.$user_browser);

if($login_check == $login_string) {
     print "logowanie prawidlowe";
     
} else {
     print "nie ok";
     
}

}
}
?>

2

@Akihito napisał "Nie idzie zabezpieczyc sie przed kradzieza sesji".

Na pewno dużym zabezpieczeniem tutaj jest pilnowanie, aby nie zmieniał się adres IP, z którego się łączy druga strona podczas trwania sesji. W sytuacji, w której ktoś przejmie sesję, serwer stwierdzi, że nagle nastąpiła zmiana adresu klienta i z tego powodu ubija sesję. Bardzo proste, ale wyjątkowo skutecznie rozwiązanie.

2

@cerrato: jesli zalezy nam by uzytkownik posiadal jedna sesje na jednym urzadzeniu to spoko pomysl. Jednak w przyapdku takiego FB, gdzie liste otwartych sesji mozemy zobaczyc to juz nalezy zostawic uzytkownikowi taka opcje ;).

2

No to zależy od tego, co jest priorytetem - czy bezpieczeństwo, czy wygoda. W istotnych sprawach (np. logowanie do banku, jakiegoś systemu sprzedażowego itp.) to raczej istotniejsze jest bezpieczeństwo - jeśli serwer wykryje podejrzane działania, powinien ubić sesję. Z kolei na FB nie ma co popadać w paranoję, wygoda ważniejsza. Oczywiście - można sporządzić listę sesji/logowań i adresów IP, ale np. na telefonie jest szansa, że IP się co kilka odpaleń FB zmieni, więc nastąpi wylogowanie. Można to trochę obejść przez np. sprawdzanie user-agent i na tej podstawie wykrywanie podejrzanych zmian. Bo (jak pisałem przed chwilą) ta sama komórka może mieć różne adresy IP (łącząc się po WiFi w domu masz jeden, w firmie inny, a w tramwaju jadąc do pracy jeszcze inny), ale raczej user-agent się nie zmieni. I jeśli nagle ta sama sesja zmieni się z chrome na Android w FF na Windows to powinno takie coś dać do myślenia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1