Was ist der beste Weg, um Sitzungsentführungen zu verhindern?

124

Dies gilt insbesondere für die Verwendung eines Client-Sitzungscookies zur Identifizierung einer Sitzung auf dem Server.

Ist die beste Antwort, um die SSL / HTTPS-Verschlüsselung für die gesamte Website zu verwenden, und Sie haben die beste Garantie, dass kein Mann in den mittleren Angriffen in der Lage ist, ein vorhandenes Client-Sitzungs-Cookie zu schnüffeln?

Und vielleicht am zweitbesten, um eine Art Verschlüsselung für den Sitzungswert selbst zu verwenden, der in Ihrem Sitzungscookie gespeichert ist?

Wenn ein böswilliger Benutzer physischen Zugriff auf einen Computer hat, kann er dennoch das Dateisystem überprüfen, um ein gültiges Sitzungscookie abzurufen und damit eine Sitzung zu entführen.

Adam
quelle

Antworten:

140

Das Verschlüsseln des Sitzungswerts hat keine Auswirkung. Das Sitzungscookie ist bereits ein beliebiger Wert. Durch die Verschlüsselung wird lediglich ein weiterer beliebiger Wert generiert, der abgehört werden kann.

Die einzige wirkliche Lösung ist HTTPS. Wenn Sie nicht auf Ihrer gesamten Site SSL ausführen möchten (möglicherweise haben Sie Leistungsprobleme), können Sie möglicherweise nur SSL verwenden, um die sensiblen Bereiche zu schützen. Stellen Sie dazu zunächst sicher, dass Ihre Anmeldeseite HTTPS ist. Wenn sich ein Benutzer anmeldet, setzen Sie zusätzlich zum regulären Sitzungscookie ein sicheres Cookie (dh der Browser überträgt es nur über eine SSL-Verbindung). Wenn ein Benutzer dann einen Ihrer "sensiblen" Bereiche besucht, leiten Sie ihn zu HTTPS um und überprüfen Sie, ob dieses sichere Cookie vorhanden ist. Ein echter Benutzer wird es haben, ein Session-Hijacker nicht.

BEARBEITEN : Diese Antwort wurde ursprünglich im Jahr 2008 geschrieben. Es ist jetzt 2016 und es gibt keinen Grund, SSL nicht auf Ihrer gesamten Website zu verwenden. Kein Klartext-HTTP mehr!

Josh Hinman
quelle
28
HTTPS verhindert nur das Schnüffeln. Wenn Sie jedoch über ein XSS verfügen oder die Sitzungs-IDs leicht erraten werden können oder anfällig für Sitzungsfixierungen sind oder Ihr Sitzungs-ID-Speicher schwach ist (SQL-Injection?), Ist SSL überhaupt keine Verbesserung.
Calimo
5
@Josh Wenn ein böswilliger Benutzer physischen Zugriff auf einen Computer hat, kann er dennoch im Dateisystem ein gültiges Sitzungscookie abrufen und damit eine Sitzung entführen.
Pacerier
72
Wenn ein böswilliger Benutzer physischen Zugriff auf ein Dateisystem hat, muss er keine Sitzung entführen.
Josh Hinman
25
@ Josh. Nicht wahr, manchmal hat ein Benutzer nur begrenzten zeitlichen physischen Zugriff auf ein Dateisystem. Stellen Sie sich einen Laptop vor, der von einem Kollegen entsperrt wurde, der zur Toilette eilt. Jetzt muss ich nur noch zu diesem Laptop gehen, das EditThisCookie-Plugin installieren, seine Cookies unter plus.google.com mithilfe der EditThisCookie-Exportfunktion abrufen und jetzt habe ich sein Konto . Zeitaufwand: 18 Sekunden.
Pacerier
1
Ich bin mir ziemlich sicher, dass in Google eine Art Sicherheitsfunktion integriert sein wird, da dies offensichtlich das erste ist, an das Sie denken würden, wenn Sie über Sitzungsentführungen sprechen
eingebautes
42

Das SSL hilft nur bei Schnüffelangriffen. Wenn ein Angreifer Zugriff auf Ihren Computer hat, gehe ich davon aus, dass er auch Ihr sicheres Cookie kopieren kann.

Stellen Sie zumindest sicher, dass alte Cookies nach einer Weile ihren Wert verlieren. Selbst ein erfolgreicher Hijaking-Angriff wird vereitelt, wenn der Cookie nicht mehr funktioniert. Wenn der Benutzer ein Cookie aus einer Sitzung hat, die sich vor mehr als einem Monat angemeldet hat, muss er sein Kennwort erneut eingeben. Stellen Sie sicher, dass die alte Sitzungs-UUID nie wieder verwendet werden kann, wenn ein Benutzer auf den Link "Abmelden" Ihrer Site klickt.

Ich bin mir nicht sicher, ob diese Idee funktioniert, aber hier ist: Fügen Sie Ihrem Sitzungscookie eine Seriennummer hinzu, möglicherweise eine Zeichenfolge wie diese:

SessionUUID, Seriennummer, aktuelles Datum / Uhrzeit

Verschlüsseln Sie diese Zeichenfolge und verwenden Sie sie als Sitzungscookie. Ändern Sie regelmäßig die Seriennummer - möglicherweise, wenn der Cookie 5 Minuten alt ist, und geben Sie ihn dann erneut aus. Sie können es sogar bei jeder Seitenansicht neu ausgeben, wenn Sie möchten. Notieren Sie auf der Serverseite die letzte Seriennummer, die Sie für diese Sitzung ausgegeben haben. Wenn jemand jemals ein Cookie mit der falschen Seriennummer sendet, bedeutet dies, dass ein Angreifer möglicherweise ein Cookie verwendet, das er zuvor abgefangen hat. Machen Sie daher die Sitzungs-UUID ungültig und bitten Sie den Benutzer, sein Kennwort erneut einzugeben und dann ein neues Cookie erneut auszugeben.

Denken Sie daran, dass Ihr Benutzer möglicherweise mehr als einen Computer hat, sodass er möglicherweise mehr als eine aktive Sitzung hat. Tun Sie nichts, was sie zwingt, sich jedes Mal neu anzumelden, wenn sie zwischen Computern wechseln.


quelle
Ich weiß, dass dies ein alter Beitrag ist, wollte aber nur einschließen, dass ein Angreifer, der die Sitzung innerhalb des durch die "Seriennummer" zugewiesenen Fensters entführt, ihn nicht betrifft.
Crush
@crush, aber dann würde der Angreifer nach dem zugewiesenen Fenster ausgesperrt werden, oder? Zumindest ist das Angriffsfenster also klein (äh).
Johanneke
2
Das einzige Problem ist, wenn der Benutzer Ihre Website für 5 Minuten verlässt, muss er sich erneut anmelden
elipoultorak
21

Haben Sie darüber nachgedacht, ein Buch über PHP-Sicherheit zu lesen? Sehr empfehlenswert.

Ich habe mit der folgenden Methode für nicht SSL-zertifizierte Sites viel Erfolg gehabt.

  1. Deaktivieren Sie mehrere Sitzungen unter demselben Konto, und stellen Sie sicher, dass Sie dies nicht nur anhand der IP-Adresse überprüfen. Prüfen Sie lieber anhand eines Tokens, das bei der Anmeldung generiert wird und mit der Benutzersitzung in der Datenbank gespeichert ist, sowie anhand der IP-Adresse, HTTP_USER_AGENT usw.

  2. Verwenden von relationsbasierten Hyperlinks Erzeugt einen Link (z. B. http://example.com/secure.php?token=2349df98sdf98a9asdf8fas98df8) ). Der Link wird mit einer zufällig gesalzenen x-BYTE-Zeichenfolge (bevorzugte Größe) angehängt Token entspricht einer angeforderten Seite.

    • Beim erneuten Laden werden mehrere Überprüfungen durchgeführt.
    • Ursprungs-IP-Adresse
    • HTTP_USER_AGENT
    • Sitzungstoken
    • Sie verstehen den Punkt.
  3. Cookie für die Sitzungsauthentifizierung mit kurzer Lebensdauer. Wie oben angegeben, ist ein Cookie mit einer sicheren Zeichenfolge, die einen direkten Hinweis auf die Gültigkeit der Sitzung enthält, eine gute Idee. Lassen Sie es alle x Minuten ablaufen, stellen Sie dieses Token erneut aus und synchronisieren Sie die Sitzung erneut mit den neuen Daten. Wenn die Daten nicht übereinstimmen, melden Sie den Benutzer entweder ab oder lassen Sie ihn seine Sitzung erneut authentifizieren.

Ich bin kein Experte auf diesem Gebiet, ich habe ein bisschen Erfahrung in diesem speziellen Thema, hoffe, dass einiges davon irgendjemandem da draußen hilft.

Nathan
quelle
4
Gibt es Bücher, die Sie empfehlen würden?
Rikki
1
Insbesondere angesichts der Tatsache, dass das OP nichts spezielles über PHP gesagt hat, würde ich sagen, dass es besser ist, nur ein allgemeines Sicherheitsbuch zu betrachten (zumal sich die Sicherheit zwischen verschiedenen Sprachen nur in Implementierungsdetails unterscheidet, die Konzepte jedoch gleich bleiben).
Matts1
Im Jahr 2017 erlaubt sogar Facebook / Google Mail usw. mehrere Sitzungen unter demselben Konto (insbesondere mit Mobilgeräten), sofern Sie Ihre Benutzer nicht hassen. # 1 ist etwas veraltet.
Cowbert
20
// Collect this information on every request
$aip = $_SERVER['REMOTE_ADDR'];
$bip = $_SERVER['HTTP_X_FORWARDED_FOR'];
$agent = $_SERVER['HTTP_USER_AGENT'];
session_start();

// Do this each time the user successfully logs in.
$_SESSION['ident'] = hash("sha256", $aip . $bip . $agent);

// Do this every time the client makes a request to the server, after authenticating
$ident = hash("sha256", $aip . $bip . $agent);
if ($ident != $_SESSION['ident'])
{
    end_session();
    header("Location: login.php");
    // add some fancy pants GET/POST var headers for login.php, that lets you
    // know in the login page to notify the user of why they're being challenged
    // for login again, etc.
}

Dies erfasst kontextbezogene Informationen über die Sitzung des Benutzers, Informationen, die sich während der Lebensdauer einer einzelnen Sitzung nicht ändern sollten. Ein Benutzer wird nicht gleichzeitig in den USA und in China an einem Computer sitzen, oder? Wenn sich die IP-Adresse innerhalb derselben Sitzung plötzlich ändert, was stark einen Sitzungsentführungsversuch impliziert, sichern Sie die Sitzung, indem Sie die Sitzung beenden und den Benutzer zur erneuten Authentifizierung zwingen. Dies vereitelt den Hack-Versuch, der Angreifer muss sich ebenfalls anmelden, anstatt Zugriff auf die Sitzung zu erhalten. Benachrichtigen Sie den Benutzer über den Versuch (Ajax es ein wenig), und vola, leicht genervter + informierter Benutzer und seine Sitzung / Informationen sind geschützt.

Wir setzen User Agent und X-FORWARDED-FOR ein, um unser Bestes zu geben, um die Eindeutigkeit einer Sitzung für Systeme hinter Proxys / Netzwerken zu erfassen. Möglicherweise können Sie mehr Informationen als diese verwenden. Sie können auch kreativ sein.

Es ist nicht 100%, aber es ist verdammt effektiv.

Sie können noch mehr tun, um Sitzungen zu schützen und sie ablaufen zu lassen, wenn ein Benutzer eine Website verlässt und zurückkommt und ihn möglicherweise zwingt, sich erneut anzumelden. Sie können einen Benutzer erkennen, der das Unternehmen verlässt und zurückkehrt, indem Sie einen leeren HTTP_REFERER erfassen (Domain wurde in die URL-Leiste eingegeben) oder prüfen, ob der Wert im HTTP_REFERER Ihrer Domain entspricht oder nicht (der Benutzer hat auf einen externen / gestalteten Link geklickt, um zu Ihrem zu gelangen Seite? ˅).

Sitzungen ablaufen lassen, nicht unbegrenzt gültig lassen.

Verlassen Sie sich nicht auf Cookies, sie können gestohlen werden. Dies ist einer der Angriffsmethoden für die Entführung von Sitzungen.

ihreonyis
quelle
3
Ich bin zuvor auf eine Situation gestoßen, in der ein bestimmter (ziemlich großer, aber technisch rückständiger) ISP die IP des Browsers des Benutzers von Zeit zu Zeit ändert, basierend auf der Umleitung der Verbindungen seiner Benutzer. Dies hat dazu geführt, dass die REMOTE_ADDR-Prüfung für uns falsche Negative zurückgegeben hat.
goofballLogic
Warum sollte man sich die Mühe machen, einen Hash zu erstellen? $_SESSION['ident'] = $aip . $bip . $agent;wäre genauso sicher.
Dan Bray
2
Wenn mobile Benutzer Ihre Website unterwegs verwenden und von einem Zugriffspunkt zum anderen wechseln, ändern sich ihre IP-Adressen ständig und sie werden weiterhin von ihrem Konto abgemeldet.
Kareem
Was ist mit Proxys und VPNs? Jeder, der einen TOR-Proxy verwendet, wird ständig von seinen Konten abgemeldet. Tatsächlich alle paar Minuten.
Bradley
Selbst wenn Sie dies übersehen, können IP-Adressen vom Client manipuliert werden, sodass dies einen Angreifer ohnehin nicht davon abhalten würde.
Bradley
9

Probieren Sie das in diesem Dokument von Liu, Kovacs, Huang und Gouda beschriebene Secure Cookie-Protokoll aus :

Wie im Dokument angegeben:

Ein sicheres Cookie-Protokoll, das zwischen einem Client und einem Server ausgeführt wird, muss die folgenden vier Dienste bereitstellen: Authentifizierung, Vertraulichkeit, Integrität und Anti-Replay.

Zur Vereinfachung der Bereitstellung:

In Bezug auf die Effizienz beinhaltet unser Protokoll keine Datenbanksuche oder Kryptographie mit öffentlichen Schlüsseln. In Bezug auf die Bereitstellbarkeit kann unser Protokoll problemlos auf einem vorhandenen Webserver bereitgestellt werden und erfordert keine Änderung der Internet-Cookie-Spezifikation.

Kurzum: Es ist sicher, leicht, funktioniert bei mir einfach super.

Hubert
quelle
9
Ihr Link ist eine Spezifikation des Protokolls - haben Sie einen Link zu einer Implementierung? Das wäre toll - danke.
Adam
9

Es gibt keine Möglichkeit, das Entführen von Sitzungen zu 100% zu verhindern, aber mit einem gewissen Ansatz können wir die Zeit reduzieren, die ein Angreifer benötigt, um die Sitzung zu entführen.

Methode zur Verhinderung von Sitzungsentführungen:

1 - Verwenden Sie immer eine Sitzung mit SSL-Zertifikat.

2 - Sitzungscookie nur senden, wenn httponly auf true gesetzt ist (verhindern Sie, dass Javascript auf das Sitzungscookie zugreift)

2 - Verwenden Sie die ID zur Sitzungsregenerierung beim An- und Abmelden (Hinweis: Verwenden Sie die Sitzungsregenerierung nicht bei jeder Anforderung, da Sie bei aufeinanderfolgenden Ajax-Anforderungen die Möglichkeit haben, mehrere Sitzungen zu erstellen.)

3 - Legen Sie ein Sitzungszeitlimit fest

4 - Speichern Sie den Browser-Benutzeragenten in einer $ _SESSION-Variablen und vergleichen Sie ihn bei jeder Anforderung mit $ _SERVER ['HTTP_USER_AGENT']

5 - Setzen Sie ein Token-Cookie und setzen Sie die Ablaufzeit dieses Cookies auf 0 (bis der Browser geschlossen wird). Generieren Sie den Cookie-Wert für jede Anforderung neu. (Bei Ajax-Anforderungen generieren Sie kein Token-Cookie.) EX:

    //set a token cookie if one not exist
    if(!isset($_COOKIE['user_token'])){
                    //generate a random string for cookie value
        $cookie_token = bin2hex(mcrypt_create_iv('16' , MCRYPT_DEV_URANDOM));

        //set a session variable with that random string
        $_SESSION['user_token'] = $cookie_token;
        //set cookie with rand value
        setcookie('user_token', $cookie_token , 0 , '/' , 'donategame.com' , true , true);
    }

    //set a sesison variable with request of www.example.com
    if(!isset($_SESSION['request'])){
        $_SESSION['request'] = -1;
    }
    //increment $_SESSION['request'] with 1 for each request at www.example.com
    $_SESSION['request']++;

    //verify if $_SESSION['user_token'] it's equal with $_COOKIE['user_token'] only for $_SESSION['request'] > 0
    if($_SESSION['request'] > 0){

        // if it's equal then regenerete value of token cookie if not then destroy_session
        if($_SESSION['user_token'] === $_COOKIE['user_token']){
            $cookie_token = bin2hex(mcrypt_create_iv('16' , MCRYPT_DEV_URANDOM));

            $_SESSION['user_token'] = $cookie_token;

            setcookie('user_token', $cookie_token , 0 , '/' , 'donategame.com' , true , true);
        }else{
            //code for session_destroy
        }

    }

            //prevent session hijaking with browser user agent
    if(!isset($_SESSION['user_agent'])){
        $_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
    }

    if($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']){
      die('session hijaking - user agent');
    }

Hinweis: Token-Cookie nicht mit Ajax-Anforderung neu generieren Hinweis: Der obige Code ist ein Beispiel. Hinweis: Wenn sich Benutzer abmelden, muss das Cookie-Token sowie die Sitzung zerstört werden

6 - Es ist kein guter Ansatz, die Benutzer-IP zu verwenden, um das Entführen von Sitzungen zu verhindern, da sich die IP-Adresse einiger Benutzer bei jeder Anforderung ändert. DAS BEEINFLUSST GÜLTIGE BENUTZER

7 - Ich persönlich speichere Sitzungsdaten in einer Datenbank. Es liegt an Ihnen, welche Methode Sie anwenden

Wenn Sie Fehler in meinem Ansatz finden, korrigieren Sie mich bitte. Wenn Sie mehr Möglichkeiten haben, um Sitzungshyjaking zu verhindern, sagen Sie es mir bitte.

Alexandru
quelle
Hallo, ich versuche, Sitzungsentführungen zu verhindern (in ASP.NET) und habe alle oben genannten Schritte berücksichtigt. Es funktioniert ungefähr, aber wenn ich den InPrivateBrowsing / Inkognito-Modus des Browsers verwende, wird die Sitzung entführt. Können Sie bitte eine zusätzliche Sache vorschlagen, die in die sessionId-Zeichenfolge eingefügt werden soll?
Vishwanath Mishra
4

Stellen Sie sicher, dass Sie keine inkrementierenden Ganzzahlen für Sitzungs-IDs verwenden. Es ist viel besser, eine GUID oder eine andere lange zufällig generierte Zeichenfolge zu verwenden.

Kibbee
quelle
3

Es gibt viele Möglichkeiten, einen Schutz gegen Sitzungsentführungen zu schaffen. Alle verringern jedoch entweder die Benutzerzufriedenheit oder sind nicht sicher.

  • IP- und / oder X-FORWARDED-FOR-Prüfungen. Diese funktionieren und sind ziemlich sicher ... aber stellen Sie sich den Schmerz der Benutzer vor. Sie kommen mit WLAN in ein Büro, erhalten eine neue IP-Adresse und verlieren die Sitzung. Ich muss mich erneut anmelden.

  • User Agent prüft. Wie oben ist die neue Version des Browsers nicht verfügbar und Sie verlieren eine Sitzung. Darüber hinaus sind diese wirklich einfach zu "hacken". Für Hacker ist es trivial, gefälschte UA-Strings zu senden.

  • localStorage-Token. Generieren Sie beim Anmelden ein Token, speichern Sie es im Browserspeicher und speichern Sie es in einem verschlüsselten Cookie (serverseitig verschlüsselt). Dies hat keine Nebenwirkungen für den Benutzer (localStorage bleibt durch Browser-Upgrades erhalten). Es ist nicht so sicher - es ist nur Sicherheit durch Dunkelheit. Zusätzlich können Sie JS eine Logik (Verschlüsselung / Entschlüsselung) hinzufügen, um sie weiter zu verschleiern.

  • Neuausgabe des Cookies. Dies ist wahrscheinlich der richtige Weg, dies zu tun. Der Trick besteht darin, jeweils nur einem Client die Verwendung eines Cookies zu erlauben. Ein aktiver Benutzer erhält also jede Stunde oder weniger ein neues Cookie. Altes Cookie wird ungültig, wenn ein neues Cookie ausgegeben wird. Hacks sind weiterhin möglich, aber viel schwieriger durchzuführen. Entweder Hacker oder gültige Benutzer erhalten einen abgelehnten Zugriff.

Luke
quelle
1

Nehmen wir an, dass sich Client und Server während der Anmeldephase auf einen geheimen Salt-Wert einigen können. Danach stellt der Server bei jeder Aktualisierung einen Zählwert bereit und erwartet, dass der Client mit dem Hash von (geheimes Salz + Zählung) antwortet. Der potenzielle Entführer hat keine Möglichkeit, diesen geheimen Salzwert zu erhalten, und kann daher den nächsten Hash nicht generieren.

Davej
quelle
3
Aber wie wollen Sie dieses Salz auf Kundenseite aufbewahren, damit niemand es stehlen kann?
Dcortez
1

AFAIK Auf das Sitzungsobjekt kann auf dem Client nicht zugegriffen werden, da es auf dem Webserver gespeichert ist. Die Sitzungs-ID wird jedoch als Cookie gespeichert und ermöglicht es dem Webserver, die Sitzung des Benutzers zu verfolgen.

Um zu verhindern, dass eine Sitzung über die Sitzungs-ID entführt wird, können Sie eine Hash-Zeichenfolge im Sitzungsobjekt speichern, die mithilfe einer Kombination aus zwei Attributen, Remote-Adresse und Remote-Port, erstellt wird, auf die auf dem Webserver im Anforderungsobjekt zugegriffen werden kann. Diese Attribute binden die Benutzersitzung an den Browser, in dem sich der Benutzer angemeldet hat.

Wenn sich der Benutzer über einen anderen Browser oder einen Inkognito-Modus auf demselben System anmeldet, bleibt die IP-Adresse dieselbe, der Port ist jedoch unterschiedlich. Wenn auf die Anwendung zugegriffen wird, wird dem Benutzer daher vom Webserver eine andere Sitzungs-ID zugewiesen.

Unten ist der Code aufgeführt, den ich implementiert und getestet habe, indem ich die Sitzungs-ID von einer Sitzung in eine andere kopiert habe. Es funktioniert ganz gut. Wenn es eine Lücke gibt, lassen Sie mich wissen, wie Sie sie simuliert haben.

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    HttpSession session = request.getSession();
    String sessionKey = (String) session.getAttribute("sessionkey");
    String remoteAddr = request.getRemoteAddr();
    int remotePort = request.getRemotePort();
    String sha256Hex = DigestUtils.sha256Hex(remoteAddr + remotePort);
    if (sessionKey == null || sessionKey.isEmpty()) {
        session.setAttribute("sessionkey", sha256Hex);
        // save mapping to memory to track which user attempted
        Application.userSessionMap.put(sha256Hex, remoteAddr + remotePort);
    } else if (!sha256Hex.equals(sessionKey)) {
        session.invalidate();
        response.getWriter().append(Application.userSessionMap.get(sessionKey));
        response.getWriter().append(" attempted to hijack session id ").append(request.getRequestedSessionId()); 
        response.getWriter().append("of user ").append(Application.userSessionMap.get(sha256Hex));
        return;
    }
    response.getWriter().append("Valid Session\n");
}

Ich habe den SHA-2-Algorithmus verwendet, um den Wert anhand des Beispiels bei SHA-256 Hashing in Baeldung zu hashen

Ich freue mich auf Eure Kommentare.

Jzf
quelle
@zaph Es tut mir leid, aber ich habe die Antwort nicht hinzugefügt, um Wiederholung zu erhalten. Der Punkt ist auch nicht die SHA-2-Verschlüsselung. Aber die Tatsache, dass ich die Verwendung der Sitzungs-ID Cookie eines anderen Benutzers in der Sitzung eines anderen Benutzers erkennen konnte, dh Sitzungsentführung wie in der ursprünglichen Frage. Ich habe meine Lösung getestet und festgestellt, dass sie funktioniert. Aber ich bin kein Experte in diesem Bereich, daher möchte ich, dass die Community prüft, ob meine Antwort gut genug ist. Vielleicht können Sie sehen, was mein Code-Snippet macht und entscheiden, ob es die Frage beantwortet. Vielen Dank!
Jzf
@zaph Danke, dass du auf den Fehler hingewiesen hast. Ich habe meine Antwort gemäß Ihrem Vorschlag aktualisiert. Bitte entfernen Sie Ihre Abwahl, wenn Sie der Meinung sind, dass die Antwort hilfreich ist.
Jzf
0

Um das Risiko zu verringern, können Sie der Sitzung auch die ursprüngliche IP zuordnen. Auf diese Weise muss sich ein Angreifer im selben privaten Netzwerk befinden, um die Sitzung nutzen zu können.

Das Überprüfen von Referer-Headern kann ebenfalls eine Option sein, diese können jedoch leichter gefälscht werden.

Julius Caesar
quelle
7
Nein, Sie können die Ursprungs-IP nicht verwenden, da sie sich ändern kann - entweder durch dynamische IPs, die geändert werden, wenn ein Benutzer vorübergehend getrennt wird, oder durch die (implizite oder explizite) Verwendung einer Proxy-Farm. Außerdem können Sitzungsentführer, die vom selben ISP stammen, denselben Proxy und dieselbe IP als legitimen Benutzer verwenden ...
Olaf Kock,
1
PHP-Nuke hat eine gute Seite über ihren Sitzungsansatz und sie sprechen ausführlich darüber, wie das Anschließen an die IP nicht bei allen ISPs funktioniert. Phpnuke.org/…
Sembiance
4
Das Ändern von IPs ist bei mobilen Internetanbietern sehr häufig. Mit Vodafone ändert sich meine IP mit JEDER Anfrage.
Blaise
1
Etwas altmodisch, aber um das zu fördern. IPs sind wie erwähnt eine schlechte Idee. Wie bereits erwähnt, tendieren mobile Benutzer dazu, IPs zu durchstreifen. Einige ISPs hatten in der Vergangenheit auch Roaming-IPs (wie AOL). Dieser Ansatz wird jedoch aufgrund des Mangels an IPv4-IPs immer beliebter. Zu diesen ISPs gehören Plus Net und BT
Peter
-15

Schützen durch:

$ip=$_SERVER['REMOTE_ADDER'];
$_SESSEION['ip']=$ip;
Nima
quelle
12
Ich verstehe nicht, was Sie hier tun.
Samayo