2012-05-29 5 views
5

Ich versuche herauszufinden, wie Session-Hijacking zu verhindern. Hier ist, was ich dachte:PHP Überprüfen von Benutzer-Agent und IP, um Session Hijacking zu verhindern

Zusammen mit der Benutzer-ID-Sitzung, fügen Sie einen Benutzer-Agent und Benutzer-IP-Sitzung zu. Jedes Mal, wenn eine Seite geladen wird, werden diese Sitzungen überprüft, um zu sehen, ob sie übereinstimmen - reicht das? Zum Beispiel:

<?php 

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

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

?> 

Danke.

Antwort

11

Es ist viel komplexer als das. Ihre Website/Ihr Dienst wird von verschiedenen Personen mit unterschiedlichen Einstellungen aufgerufen. Das erste, was schief gehen kann, ist, wenn jemand einen Proxy-Server durchläuft. Die IP-Adresse, die von Ihrer App angezeigt wird, kann sich ändern, und die Sitzung wird für einen gültigen Benutzer nicht mehr funktionieren.

Wenn Sie unbedingt etwas mit der IP-Adresse machen müssen, sollten Sie das Herkunftsland/die Herkunftsregion überprüfen, ohne zu viele Fehlalarme zu bekommen. Wenn Sie einen Anmeldenamen aus Kanada und einen anderen aus Indien finden, liegt möglicherweise ein Problem vor. Selbst dann ist es nicht narrensicher.

Der Benutzer-Agent ist auch zu einfach zu fälschen: Wenn ich jemandes PHPSESSIONID bekommen kann, dann kann ich definitiv ihren User Agent auch bekommen. Hier wurde also nicht viel erreicht.

Die beste Methode zum Schutz einer Sitzung besteht darin, alles hinter HTTPS zu authentifizieren und sicherzustellen, dass der Sitzungscookie nur HTTPS ist.

BEARBEITEN: Wenn es zu dem Punkt kommt, wo die Daten, die Sie hinter der Sitzung schützen, extrem empfindlich sind und Ihre Benutzer sich dessen bewusst sein müssen, können Sie ihnen immer andere Sitzungen anzeigen, die für sie angemeldet sind Benutzer. Das gleiche geschieht zum Beispiel mit Google Mail.

+0

Danke für die Antwort. Ich bin nicht zu sehr um den ersten Punkt bemüht, um ehrlich zu sein, aber Ihre Sekunde ist gültig. Wenn ich keinen Weg finde, dies zu verhindern, verwende ich einfach HTTPS. –

+1

Danke! Übrigens, egal welche Option Sie wählen, ich würde immer vorschlagen, HTTPS hinzuzufügen. Die Verbreitung von öffentlichen WLAN-Hotspots bedeutet, dass alles, was ohne HTTPS läuft, für jeden sichtbar ist. –

+0

Da Sie nur http verwenden möchten, können der Benutzername und das Passwort Ihres Benutzers bereits von einem Hacker abgerufen werden, wenn der Benutzer nicht vpn verwendet. Nicht einmal für die Sitzung zu denken. –

1

ich mit Z42 einverstanden

auch würde Ich mag einen Ansatz vorschlagen, jedes Mal wenn ein Benutzer-Logins erfolgreich auf Ihrer Website Sie ein Salz erzeugen und speichern sie in einer Sitzung und in Ihrem db aswell und Bedingungen machen um zu überprüfen, ob der Benutzer bereits angemeldet ist oder nicht, damit können Sie nicht verhindern, dass sich mehrere Benutzer mehrfach mit demselben Konto anmelden und das SALT von db löschen, wenn sich der Benutzer abmeldet.

+0

Danke für den Vorschlag, sehr hilfreich! Ich werde sicher sein, diese Technik zu nutzen. –

+1

Sie sind willkommen. :) –