Frage

    

Diese Frage bereits eine Antwort hier:

         

Ich bin mit 2 Variablen in Cookies (7 Tage Ablauf), die Benutzer-ID und Hash ist. Hash ist SHA1 kodieren von User-Agent und Benutzer-ID. In diesem Fall können einige Hacker anmelden, der Know-Cookie im Browser gestohlen wird. Welche Art und Weise soll ich folgen oder welche Praxis ist am besten für mich erinnern Sicherheitsprobleme?

War es hilfreich?

Lösung

Während Sie eine user_id und secret_key Hash kann jeder, der dieses Cookie dazwischen und können in Ihrer Anwendung anmelden. Zusätzlich dazu können Sie machen es so, dass Ihr an mich erinnern Cookies abgestanden sehr schnell gehen. Niemand mag einen schalen Cookie.

Sie können speichern die Zeitstempel von jedem letzten Besuch des Benutzers in der Datenbank und im Cookie. Jedes Mal, wenn Sie das Cookie lesen Sie den Benutzer anmelden, können Sie überprüfen, um zu sehen, dass beiden Zeitstempel übereinstimmen. Wenn sie dies nicht tun, verweigern Sie den Benutzer. Wenn sie das tun, aktualisieren Sie die Zeitstempel.

Mit dieser Methode, zu jeder Zeit Ihre Benutzer kehrt auf Ihre Website, alle alten Cookies gehen abgestanden. Ein Hacker, die einen Cookie abgefangen hat, hat jetzt ein wertlos abgestanden Cookie, weil er nicht die genauen Zeitstempel im aktuellen Cookie nicht kennt. Natürlich kann der Hacker ein neues Cookie so viel verwenden, wie er will, bis sich der Benutzer anmeldet zurück.

//check for cookie
if(isset($_COOKIE['remember_me'])) {
   // get hash and time stamp from cookie
   $hash = substr($_COOKIE['remember_me'],0,40);
   $last_visit = substr($_COOKIE['remember_me'],41);

   // query your db with $hash and $last_visit

   // if hash and time stamp match up
      // log in

      // store the current time stamp in a variable to use for both
      $time = date("Y-m-d H:i:s");
      // update the time stamp in your cookie
      $cookie = $pass . "-" . $time;
      setcookie('remember_me', $cookie, time()+60*60*24*100, '/');
      // update the time_stamp in your database
   else {
      // remove the remember me cookie
      setcookie('remember_me', '', time()-42000, '/')
   }

Diese Methode bietet eine geringe Menge an Sicherheit und soll auf jeden Fall an der Seite von Methoden in anderen Antworten vorgeschlagen werden. Ein Hash-Schlüssel sollte im Cookie gespeichert werden. Ein erinnere mich Cookie kann nicht vollkommen sicher sein, so Passwort Wiedereintritt sollte für jeden weiteren Zugang zu hochsensiblen Daten oder Anwendungsfunktionen erforderlich.

Ich empfehle auch Ihre Cookie etwas anderes als ‚Remember_Me‘ Namensgebung es ein wenig schwerer zu finden. Während es nicht viel Sicherheit hinzufügen, falls vorhanden, benennen Sie die Cookie ‚ht33424‘ dauert nur so lange, wie es Remember_Me "oder‚hack_me‘zu nennen.

Andere Tipps

Sie können simlply das Ablaufdatum gesetzt, wie jetzt dazu noch Jahr auf den Keks, aber dann muss ein Passwort-Feld in allen sensiblen Bereichen geben, ähnlich wie die Umsetzung amazon Anwendungen. Ein entführten Cookie Zugang zu gewähren, sondern zum Kauf oder etwas Persönliches erfordert Passwort ändern neu eingegeben werden.

Das Problem mit ‚remember me‘ Tabellen ist, dass, wenn ein Hacker Zugriff auf diese Tabelle gewinnen kann er so viele Konten erstellen und Login zu können, wie er will. Sie können es argumentieren stärkt Sicherheit ein erinnere mich verfügen, aber es muss in mit den Risiken der Erweichung Knie Bereichen Sicherheit abgewogen werden.

Persönlich erstelle ich eine zufällige Hash und speichert ihn in einer „remember me“ Tisch. Die Tabelle hat auch den User-Agent, Benutzer-ID und die IP-Adresse. Ich überprüfe beide jedes Mal, wenn ich wieder anmelden, um den Benutzer von dem erinnern-me funktionieren. Und wenn der Benutzer manuell abmeldet, entferne ich einfach diese Zeile aus der Tabelle. Dann, wenn sie sich wieder anmelden, erstellt es eine neue zufällige Hash. Es gibt wirklich keine Möglichkeit, jemanden zu bekämpfen Sniffing Pakete mit einem erinnere mich System (es sei denn, Sie sichere Cookies verwenden, um mit dem HTTPS nur Flag gesetzt). So verwenden Sie eine sichere Verbindung mit HTTPS-Cookies nur. Wenn Sie nicht können, dann zumindest die die Hash zufällig so machen, wenn es entdeckt wird, kann man zumindest einen neuen Hash generieren, die Anmeldung ...

zu töten

Sie können schließlich Sitzungen verwenden Benutzerstatus zu speichern. Aber Sitzung zu halten, so lange verursacht gleiches Problem, wenn Session-ID wird gestohlen werden. Sie können Cookie Informationen mit einem anderen verbinden -. Wie Browser oder die IP-Adresse, aber es würde ein Problem verursachen, wenn der Benutzer keine statische IP hat

Wie auch immer, eine Session-ID hält, ist sicherer, dass nur darum, Benutzer-SHA1 endoded Passwort Cookies.

HMAC

ich auf diese Weise in der Regel tun, damit ich nichts zu speichern, auf der Server-Seite haben auf Datenbanken oder ähnliches.

Sie haben zufälligen Zeichenfolge zu erzeugen, die Ihren „geheimen Schlüssel“ werden und dass Sie zum Speichern auf der Serverseite haben (wahrscheinlich in einem Config-PHP-Skript als eine Konstante), und Sie haben nie jemandem zu erzählen. Ich werde diese geheimen Schlüssel SECRET_KEY nennen.

Dann wird Ihr Cookie hat zwei Werte setzen:

  • USER_ID: Die Benutzer-ID des Benutzers, der die automatische Anmeldung bekommen
  • HASH: Eine sichere kryptographische Hash von USER_ID und SECRET_KEY. So zum Beispiel md5(USER_ID . "-" . SECRET_KEY). (Etwas anderes als md5, wie SHA1 oder SHA256 wird bevorzugt).

So Ihre letzte Cookie könnte. USER_ID:HASH

Wenn Sie dann überprüfen, ob ein Cookie ein echt ist erinnere mich Cookie, was Sie tun müssen so:

function isCookieGenuine($cookie_value) {
  list($value, $hash) = explode(':', $cookie_value, 2);

  if (md5($value . "-" . SECRET_KEY) == $hash)
    return true;
  else
    return false;
}

Der Punkt ist, dass nur Sie einen Hash generieren, die diese Überprüfung bestanden, da der Hash nicht nur die USER_ID braucht, sondern auch die SECRET_KEY , die unbekannt ist von jemand anderem als dem Server! :)

Wie bemerkt, in den Kommentaren Sie dies mit der hash_hmac Funktion in PHP tun> = 5.1.2: http://us.php.net/manual/en/function.hash-hmac.php

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top