PHP Verificarea agentului utilizator și a IP-ului pentru a preveni deturnarea sesiunii

Încerc să-mi dau seama cum să împiedici deturnarea sesiunii. Iată ce mă gândeam să fac:

Împreună cu sesiunea de ID utilizator, adăugați și o sesiune IP utilizator și utilizator IP. De fiecare dată când o pagină este încărcată, aceste sesiuni vor fi verificate pentru a vedea dacă se potrivesc - va fi suficient? De exemplu:

<?php

$userIp = $_SESSION['userIp'];
$userAgent = $_SESSION['userAgent'];

if ($userIp != $_SERVER['REMOTE_ADDR'] || $userAgent != $_SERVER['HTTP_USER_AGENT'] {
    session_destroy();
}

?>

Mulțumiri.

5

1 răspunsuri

Este mult mai complexă decât asta. Site-ul/serviciul dvs. va fi accesat de o varietate de persoane cu setări diferite. Primul lucru care poate merge prost este dacă cineva trece printr-un server proxy. IP-ul pe care aplicația dvs. îl va vedea se poate schimba, iar sesiunea va fi anulată chiar și pentru un utilizator valid.

Dacă aveți absolut nevoie să faceți ceva cu perioada de anchetă, cel mai mult puteți face fără a obține prea multe poziții false verificând țara/regiunea de origine. Dacă descoperiți un singur login din Canada și altul din India, s-ar putea să existe o problemă. Chiar și atunci, nu este o dovadă greșită.

Agentul utilizator este, de asemenea, prea ușor de fals: dacă pot obține codul PHPSESSIONID al unei persoane, atunci cu siguranță pot obține și agentul de utilizator. Deci nu s-au realizat prea multe aici.

Cea mai bună modalitate de a proteja sesiunea cuiva este de a pune totul autentificat în spatele HTTPS și asigurați-vă că cookie-ul sesiunii este numai pentru HTTPS.

EDIT: If it comes to the point where the data you are protecting behind the session is extremely sensitive, and your users need to be aware of it, you can always show them other sessions that are logged in for their users. The same thing is done by GMail for example.

11
adăugat
Mulțumiri! Apropo, indiferent de opțiunea pe care ați decis să o faceți, aș sugera întotdeauna adăugarea HTTPS în partea de sus. Proliferarea hotspoturilor publice WiFi înseamnă că orice lucru care se întâmplă fără HTTPS este destul de deschis pentru toată lumea să vadă.
adăugat autor ziad-saab, sursa
Deoarece doriți doar să utilizați http, numele de utilizator și parola utilizatorilor dvs. pot fi deja obținute de un hacker dacă utilizatorul nu utilizează vpn. Nici măcar nu trebuie să vă gândiți la sesiune.
adăugat autor Ye Lwin Soe, sursa
PHP România, Moldova
PHP România, Moldova
173 participanți

Vorbim despre Yii, Laravel, Symphony, MySQL, PgSQL, WP, OpenCart... Pentru confort, opriți notificările. Parteneri: https://ciupacabra.com @js_ro @node_ro @python_ro @seo_ro @Romania_Bot Offtop: @holywars_ro Joburi: @php_job @Grupuri_IT