Malcolm Beck`s: Ein Loginscript

Beitrag lesen

Hi Felix,

wenn Du PHP nutzt, dann solltest Du das Generieren einer Session-ID den Automatismen von PHP überlassen.

Das mache ich ja. Ich nutze nur kein session_regenerate, weil ich dadurch viel mehr Türen für's hijacking öffne, als tatsächlich geschlossen werden. Vorallem, weil alte Sessions nicht richtig gelöscht werden, öffnet sich mit jeder neuen Session eine neue Hintertür. So war es jedenfalls, als ich vor 3 Jahren den Prototyp dieser Klasse schrieb.

userid | Pass (gehasht) 1 | 4a4350df2403b94a13304ee88b861041

Für den Hash verwendest Du password_hash()? Sieht nicht so aus, solltest Du aber.

Das werde ich mir ansehen. Hashen tue ich derzeit so:

md5 (irgendwas.USEREINGABE.nochirgendwas)

Was bitte ist ein "normales" Cookie?

Ein Cookie halt :) Das eine heisst PHPSESSION, das andere Cookie. Ich weiss, es sind beides letztenendes Cookies, aber der verständlichkeit halber nenne ich es „normale Cookies“.

Es empfiehlt sich sehr, dass Da nur und ausschließlich die Session-ID steht.

? Da steht doch nur der Session-Name.

Alles andere speicherst Du in der Session. Wenn der User keine Cookies zulässt, dann brauchst Du einen URL-Parameter mit der Session-ID

Genau das will ich ja nicht. Cookies sind zwingend.

// userid mit irgendwas multipliziert
$_SESSION['USER'] = '541 4a4350df2403b94a13304ee88b861041';
$_COOKIE['USER']  = '541 4a4350df2403b94a13304ee88b861041';

Das bedeutet, dass die Passwort-Informationen im Cookie des Users auf dessen Computer abgelegt werden. Das willst Du nicht, da bin ich mir sicher, denn Du weißt, dass die Cookie-Daten unverschlüsselt durchs Netz gehen, wenn Du keine https-Verbindung hast.

Es ist doch gehashed, sowohl die Userid ist verfremdet, als auch das Passwort, was will ein Hacker mit den Daten anfangen? Ich könnte ja auch, bevor ich die Daten im Cookie speichere, das ohnehin schon gehashte Passwort noch mal mit md5() hashen, aber viel ändern würde sich ja nicht. Und mit dem gehashten Passwort kann sich keiner einloggen. Ich weiss, es gibt Regenbogentabellen, aber ich salze die Daten ja noch, bevor ich sie speichere. Wie könnte ich denn sonst einen Automatischen Login machen? Irgendwo muss ich die Daten ja hinterlassen.

Ein Session-Hijacking unterbindest Du sinnvollerweise dadurch, dass Du bei jedem Request eine neue Session-ID generieren lässt.

Diese Funktion hatte ich vor Jahren genutzt, und festgestellt, das ich mit jedem neuen Seitenaufruf eine neue Session generiert habe, ohne das die alte Session gelöscht wurde. Dadurch schuf ich mit jedem Seitenaufruf eine Hintertür nach der anderen. Das Session Hijacking wird dadurch leider nur erleichtert.

Eventuell ist ein Cookie-Zwang für diverse Bereiche Deiner Seite Grundvoraussetzung.

Ohne Cookie, ohne mich :)

Entweder der User kommt mit einer gültigen Session-ID an, oder nicht. Sollten seine Session-Daten in Ordnung sein, ist er auch eingeloggt. Das kannst Du damit überprüfen, indem Du in den Session-Daten (aber nicht im Cookie und schon gar nicht in irgendeinem URL-Parameter!!) das Passwort des Users (gerne als Hash aus der DB) ablegst und bei einem Request gegen den Hash aus der DB abgleichst.

Deswegen der Cookie-Zwang. Wenn die Session offen ist, kann ich einfach Session mit Cookie vergleichen, statt die Datenbank zu bemühen.

Warum? Du hast bei manchen Providern den Fall, dass Leute bei einem Seitenaufruf die einzelnen Dateien mit unterschiedlichen IP-Adressen aufrufen, da der Provider die Requests über einen Pool an IP-Adressen leitet. Das würde die User-Experience im Zweifelsfall empfindlich behindern!

Das stimmt natürlich, aber der Anteil dieser Nutzer dürfte wohl sehr gering sein. Dafür wäre aber die Anwendung ein ticken sicherer. Dann wäre auch egal, ob jemand die Session oder das Cookie hackt, wenn die IP nicht bekannt ist, muss sich der User regulär einloggen. Wäre nicht mal Security through obscurity ;)

Um Deine Sicherheit zu erhöhen, kannst Du beim Einloggen mit einer Zwei-Faktor-Authentifizierung arbeiten: Nach dem Login mit Usernamen und Passwort verschickst Du eine Mail mit einem Zufallswert, der ergänzend eingegeben werden muss, der nur etwa fünf Minuten lang gültig ist und nach der ersten Verwendung sofort ungültig wird

Ich will kein Online-Banking betreiben :)

Ich brauche einfach nur ein Easy-to-Use-Loginscript, dass ich schnell und einfach implementieren kann, das aber halbwegs sicher ist. Damit plane ich z.B. so eine Seite, wo User sich einloggen und eigene Playlists erstellen können. Also nichts Weltbewegendes.

Bis bald

--
Hosen sind Blau
0 58

Ein Loginscript

Malcolm Beck`s
  • datenbank
  • php
  1. -2
    pl
    1. 0
      Orlok
      • perl
      • zu diesem forum
  2. 0
    Jörg Reinholz
    1. 0
      Jörg Reinholz
      1. 0
        Malcolm Beck`s
        1. 0
          Jörg Reinholz
          1. 0
            woodfighter
            1. 0
              Auge
              • datenbank
              • menschelei
              • php
              1. 0
                Christian Kruse
                1. 0
                  Jörg Reinholz
          2. 0
            Malcolm Beck`s
            1. 2
              Auge
              • php
              • sicherheit
              1. 0
                Malcolm Beck`s
                1. 2
                  Jörg Reinholz
                  1. 0

                    Ein Loginscript - so weit, so gut

                    Malcolm Beck`s
                    1. 0
                      Matthias Apsel
                      1. 0
                        Malcolm Beck`s
                        1. 1
                          Auge
                          • internet-anbindung
                          • sicherheit
                          1. 0
                            woodfighter
                            • internet-anbindung
                            1. 0
                              Auge
                              1. 0
                                woodfighter
                                1. 0
                                  Auge
                      2. 0
                        woodfighter
                        1. 0
                          Jörg Reinholz
                        2. 0
                          Matthias Apsel
                          1. 0
                            woodfighter
                            • internet-anbindung
                    2. 1
                      Jörg Reinholz
                      • php
                      • programmiertechnik
                      • programmiertechnik
                      1. 0

                        Ein Loginscript - so weit geklärt

                        Malcolm Beck`s
                    3. 1
                      Jörg Reinholz
                      1. 0
                        Malcolm Beck`s
            2. 1
              woodfighter
    2. 0
      Malcolm Beck`s
      1. 0
        woodfighter
      2. 1
        Jörg Reinholz
    3. 3
      1unitedpower
  3. 2
    Felix Riesterer
    1. 4
      Christian Kruse
      1. 0
        Malcolm Beck`s
        1. 1
          Christian Kruse
          1. 0
            Malcolm Beck`s
            1. 0
              Christian Kruse
              1. 0
                Malcolm Beck`s
            2. 2
              woodfighter
              1. 0
                woodfighter
                • sicherheit
            3. 1
              Tabellenkalk
              1. 0
                Auge
                • datenbank
                • menschelei
                • php
              2. 0
                Jörg Reinholz
      2. 0
        Felix Riesterer
        1. 0
          Christian Kruse
      3. -2
        pl
        1. 0
          woodfighter
    2. 0
      Malcolm Beck`s
      1. 3
        Christian Kruse
        1. 0
          Malcolm Beck`s
          1. 0
            Christian Kruse
            1. 0
              Malcolm Beck`s
              1. 0
                Christian Kruse