brauche hilfe bei erstellung eines einfachen login scripts

  • Per Formular werden die Felder "Username" und "Passwort" ausgefüllt, die werden in der den variablen $username und $passwort "gespeichert".

    Dannach hab ich das passwort verschlüsselt und mit if versuch ich zu überprüfen ob username und passwort(als hashcode) in der db vorhanden sind.

    Jetzt hab ich ein problem unzwar es funktioniert nicht...

    Ich hab mir andere login scripts angeguckt und ich versteh garnicht was dort abläuft da ich das so gelernt habe wie im script zu sehen ist.

    Verbindung zur Datenbank wird erfolgreich aufgebaut, könnt ihr mir helfen wie ichs richtig mache? finde den fehler nicht... mit erklärung wenns geht


  • Probiers mal so

    Hier ein paar Links:
    http://de3.php.net/mysql_num_rows
    http://de2.php.net/mysql_real_escape_string

    Versuch dich erstmal an ein paar Tutorials z.B. hier:
    http://tut.php-quake.net/de/

    Gruß crAzywuLf :D

    2 Mal editiert, zuletzt von crAzywuLf (27. Februar 2012 um 19:25)

  • Ein mysql_real_escape_string ist nicht nötig. Da du einen MD5-Hash erzeugst, muss man das dann nicht mehr machen. ;)

  • PHP
    if ($_SERVER['REQUEST_METHOD'] == 'POST')

    Dafür gibts isset.
    Und md5 ist zum hashen von PWs schon lange nicht mehr sicher.
    Wenn man schon auf md5 setzt sollte man wenigstens einen Random Salt nutzen der zusammen mit dem md5 Hash mehrfach gehasht wird.

  • PHP
    if ($_SERVER['REQUEST_METHOD'] == 'POST')

    Dafür gibts isset.
    Und md5 ist zum hashen von PWs schon lange nicht mehr sicher.
    Wenn man schon auf md5 setzt sollte man wenigstens einen Random Salt nutzen der zusammen mit dem md5 Hash mehrfach gehasht wird.

    REQUEST_METHOD ist ein total gängige Variante um zu prüfen ob die Datei im per POST aufgerufen wurde, ich weiss nicht was du hast? wüsste nicht, dass es da einen wirklichen Vorteil bei isset() gäbe oder irre ich mich da?
    Und das ich ausversehen das Passwort durch ein kurzes Zeitfenster auf der Arbeit escaped habe, wurde doch schon angemerkt?

    Gruß crAzywuLf :D

  • REQUEST_METHOD ist ein total gängige Variante um zu prüfen ob die Datei im per POST aufgerufen wurde, ich weiss nicht was du hast? wüsste nicht, dass es da einen wirklichen Vorteil bei isset() gäbe oder irre ich mich da?
    Und das ich ausversehen das Passwort durch ein kurzes Zeitfenster auf der Arbeit escaped habe, wurde doch schon angemerkt?

    Wieso ist es wichtig ob die Seite per Post aufgerufen wurde? Ich differenziere da in den seltensten Fällen. Ein Login-Formular verwendet selbstverständlich als method POST, aber wenn sich nen User nen GET-String zusammenbaut um sich direkt mit einem Aufruf einloggen zu können soll er das von mir aus machen, wenn ihn das Risiko seines Klartext-Passworts in der URL nicht stört.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Wenn man mit $_REQUEST (bzw. einem request-Objekt) arbeitet macht es keinen Unterschied. Dann braucht man nichtmal Weichen für Autologins mit Cookies.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Siehe http://dev.mysql.com/doc/refman/5.1…nction_password

    Und md5 ist zum hashen von PWs schon lange nicht mehr sicher.


    Man sollte aber auch mal die Kirche im Dorf lassen. Für die meisten Fälle ist md5 im Privatbereich völlig ausreichend, denn wir reden hier ja nicht von Hochsicherheitsbereichen, die permanent von Hackern angegriffen werden. Wem md5 nicht sicher genug ist, kann ja auf sha1 ausweichen.

    Das sollte sicher genug sein: $string = sha1(md5(sha1("passwort")));

    3 Mal editiert, zuletzt von Bandit (3. März 2012 um 21:06)

  • Da hast du es noch sicherer:

  • Zunächst mal sollte man zwischen einen Hash und Verschlüsseln unterscheiden. Das sind 2 Komplett andere Dinge.
    Beim Hash verfahren würd ich sha256 empfehlen plus Salt.

    Das öftere Anwenden eines Hash verfahren bring nicht wirklich mehr Sicherheit. Ob jetzt ein Hash oder 10 oder 1000 drauf folgende zurück verfolgt werden macht keinen Zeit unterschied aus. Die Hash sind oft in Datenbanken bereits gelistet und können so in Sekunden ausgewertet werden.

    Allerdings macht sich das Zeitlich bei der Erstellung des Hash bemerkbar. (Im Grunde also nur ein Nachteil für den Seitenbetreiber den Sicherheit bring es keine spur mehr)

    Mfg Splasch

    Einmal editiert, zuletzt von splasch (4. März 2012 um 12:07)

  • REQUEST_METHOD ist ein total gängige Variante um zu prüfen ob die Datei im per POST aufgerufen wurde, ich weiss nicht was du hast? wüsste nicht, dass es da einen wirklichen Vorteil bei isset() gäbe oder irre ich mich da?

    Schonmal was von Sauberkeit gehört?
    Es gibt immer einen sauberen und mindestens einen unsauberen Weg.
    Wenn ich prüfen will ob der Inhalt eines Strings "bla" ist kann ich auch jeden Buchstaben einzeln checken statt dem String als ganzen, wäre genau so richtig, aber unnötig umständlich und unsauber.

    Da hast du es noch sicherer:

    Ein statischer Salt ist witzlos, jeder der den algoritmus kennt kann ihn zurückberechnen.

  • Genauso wie das mehrmalige anwenden des Hash auf ein und den selben Wert. Frist nur unötig performenc.
    Im bandit script ist das abhängig von der länge des Passwortes.

    Hat es 7 Zeichen wird 8 mal das Hash verfahren angewendet.
    Hat es 5 Zeichen wird 6 mal das Hash verfahren angewendet.

    Und soweiter...

    Zitat

    Ein statischer Salt ist witzlos, jeder der den algoritmus kennt kann ihn zurückberechnen.

    Das als Salt zu bezeichnen ist schon weit hergeholt. Den es werden ja nur die einzelen Zeichen in Acii Code umgewandelt und mit einem md5 Hash versehen.

    Diese wiederholte hash bringen nicht wirklich mehr Sicherheit!
    Pw = haus
    Neuer wiederholter hash = md5(h).md5(a).md5(u).md5(s)
    Das ganze wird dann nochmal mit dem md5 hash versehn.
    (Wiederholungen bringen keine spur an mehr Sicherheit!)

    Bringt also überhaupt nix an mehr Sicherheit jeden einzelnes Zeichen extra zu hashen und dann zusammenhängen.
    Ob dabei nun der Acii Code oder das Zeichen drin steht ist im Grunde egal kommt auf selbe raus.

    Ein Gutes Beispiel dafür, sieht man oft bei base64_decode() und base64_encode() mehrmaliges anwenden kann den Quelltext nicht besser schützen.

    Besser were es da sich einen Algorthmus einfallen zu lassen und damit einen Dynamsichen Salt zu generieren.


    Zu ord() sollte ihr mal diesen Beitrag anschauen:
    http://www.psd-tutorials.de/forum/45_php-u…ichen-wert.html

    Wenn das Stimmt würde es bedeuten das du mit dem Umwandeln auf Acii bei Umlauten die Sicherheit noch weiter heruntersetzen würdest. Statt zu verbessern!
    Mfg Splasch

    4 Mal editiert, zuletzt von splasch (8. April 2012 um 11:22)

  • wie wärs hiermit?