Sicher? AND passwort=MD5('"._POST['passwort']."')

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sicher? AND passwort=MD5('"._POST['passwort']."')

    Hallo,

    ist diese Abfrage sicher? Der Username wird vorher mittels RegEx auf Zahlen/Buchstaben geprüft.

    PHP-Code:
    $result mysql_query("SELECT * FROM tabelle WHERE username='".$_POST['username']."' AND passwort=MD5('".$_POST['passwort']."') LIMIT 1"); 
    Das Passwort wird ohne Prüfung durchgeschleift, allerdings mittels MD5() in Zahlen/Buchstaben umgewandelt und dürfte daher ja harmlos sein oder?

  • #2
    Re: Sicher? AND passwort=MD5('".$_POST['passwort']."')

    Original geschrieben von Truncate
    ist diese Abfrage sicher? Der Username wird vorher mittels RegEx auf Zahlen/Buchstaben geprüft.
    Das kannst du dir sparen. Benutze einfach mysql_real_escape_string(). Damit kann über den Benutzernamen keine SQL-Injection stattfinden. Ob der User etwas anderes als Buchstaben und Zahlen eingegeben hat, brauchst du nur bei INSERT/UPDATE-Queries prüfen - falls du unbedingt so streng sein willst (ich finde ja [a-z0-9\-_\.] ausreichend).
    Das Passwort wird ohne Prüfung durchgeschleift, allerdings mittels MD5() in Zahlen/Buchstaben umgewandelt und dürfte daher ja harmlos sein oder?
    Nein! Die "Umwandlung" mit MD5 geschiet doch erst wenn das Datenbanksystem die Query auswertet. Die syntaktische Analyse macht es aber vorher und dort lauert die Gefahr. Überlege dir einfach mal was passiert, wenn $_POST['passwort'] den String "') OR ''='" enthält.
    Das ist zwar ein relativ harmloses Beispiel, aber es ist wichtig, dass du verstehst wo und warum du aufpassen mußt.

    Kommentar


    • #3
      Das Passwort wird ohne Prüfung durchgeschleift, allerdings mittels MD5() in Zahlen/Buchstaben umgewandelt und dürfte daher ja harmlos sein oder?
      In deinem Beispiel eben nicht. Dies weil du die MySql-Fkt md5() verwendest d.h. der ggf manipulierte Wert wird an die Datenbank und deren Funktionen übergeben.
      Sicher wäre es wenn du die PHP-Fkt md5() verwenden würdest
      PHP-Code:
      $result mysql_query("SELECT * FROM tabelle WHERE 
      username='"
      .$_POST['username']."' AND passwort='".md5($_POST['passwort'])."' LIMIT 1"); 
      Weil dann bereits der Hash an die DB übergeben wird.

      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Re: Re: Sicher? AND passwort=MD5('".$_POST['passwort']."')

        Gut das mit der md5-PHP-Funktion ist logisch, verwende das jetzt auch mal so.

        Original geschrieben von onemorenerd
        [B]Das kannst du dir sparen. Benutze einfach mysql_real_escape_string(). Damit kann über den Benutzernamen keine SQL-Injection stattfinden. Ob der User etwas anderes als Buchstaben und Zahlen eingegeben hat, brauchst du nur bei INSERT/UPDATE-Queries prüfen - falls du unbedingt so streng sein willst (ich finde ja [a-z0-9\-_\.] ausreichend).
        Hm ich will ja ev. "falsche" Usernamen vorher schon nicht für eine DB-Abfrage zulassen, sprich wenn dieser zu kurz/lang ist oder "böse" Zeichen enthält.

        Kommentar


        • #5
          Re: Re: Re: Sicher? AND passwort=MD5('".$_POST['passwort']."')

          Hm ich will ja ev. "falsche" Usernamen vorher schon nicht für eine DB-Abfrage zulassen, sprich wenn dieser zu kurz/lang ist oder "böse" Zeichen enthält.
          Machs dir einfach und escape den String einfach!

          Kommentar

          Lädt...
          X