Login ja, aber sicher?

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

  • Login ja, aber sicher?

    Hi Leutz,

    war mir nicht sicher ob PHP oder mySQL Forum,
    da das Thema SQL ist und die Lösung, denke ich
    mal, PHP ist....

    Ich habe hier einen Login Script und Ich frage
    mich gerade, was man zum Thema Sicherheit
    noch dran verändern kann....

    Und vor allem (Headline) was ist mit dem Thema
    der SQL Injection?

    Meine bisherigen Annahmen:
    - Name als Email (weil man per Emailcheck sicherstellt das es eine Email ist)
    - MD5 Passwort (alle Eingaben werden vor dem DB Kontakt verschlüsselt)

    Das war es aber schon...

    Hier der bisherige Script:
    PHP-Code:
        if ($_POST['login'] == '1') {
            
            
    $pw md5($_POST['password']) ;
            
    $sql 'SELECT * FROM users WHERE email = "'.$_POST['email'].'" 
                                        AND password = "'
    .$pw.'" 
                                        LIMIT 1;'
    ;
                                        
            
    $result mysql_query($sql) ;
            
            if(
    mysql_num_rows($result) == 0) {
                    
                echo 
    GLOBAL_LOGIN_DENIED ;

            } else {
                
                
    mysql_query($sql).mysql_error() ;
                
                while(
    $row mysql_fetch_assoc($result)) { 
                    
                    
    $_SESSION['id'] = $row['id'] ;
                    
    $_SESSION['name'] = $row['name'] ;
                    
    $_SESSION['email'] = $row['email'] ;
                    
    $_SESSION['password'] = $row['password'] ;
                    
    $_SESSION['level'] = $row['level'] ;
                    
    $_SESSION['admin'] = $row['admin'] ;
                    
    $_SESSION['logged'] = '1' ;
                        
                }
                        
                echo 
    GLOBAL_LOGIN_SUCCESFULL ;
                  
               }
              
        } 
    Design & Coding with a breeze of madness at xjonx

  • #2
    PHP-Code:
    $sql 'SELECT * FROM users WHERE email = "'.mysql_real_escape_string($_POST['email']).'" 
    AND password = "'
    .md5($_POST['password'].'" LIMIT 1'
    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


    • #3
      Re: Login ja, aber sicher?

      Original geschrieben von xJonx
      Und vor allem (Headline) was ist mit dem Thema der SQL Injection?
      Willst du ernsthaft behaupten, dass du nicht in der Lage warst, zu diesem Klassiker selber Informationen zu sammeln?
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Re: Re: Login ja, aber sicher?

        Original geschrieben von wahsaga
        Willst du ernsthaft behaupten, dass du nicht in der Lage warst, zu diesem Klassiker selber Informationen zu sammeln?
        nein will ich nicht. letztlich geht es mir mehr um den script selber.
        nicht wirklich um die injection...

        danke soweit
        Design & Coding with a breeze of madness at xjonx

        Kommentar


        • #5
          Erst lesen, dann denken, dann antworten
          wahsaga meinte einfach, dass dein Skript schon einmal nicht sicher sein kann, wenn du nicht einmal das Minimum an Sicherheit, welches als Standard bezeichnet werden kann, umsetzt, ergo sql injections.

          Als Tipp, in PHP beugt man diesen mit mysql_real_escape_string() vor

          Kommentar


          • #6
            Original geschrieben von hasch
            mysql_real_escape_string() vor
            Aber vorsicht in multibyteumgebungen wenn man mysql 4.1 bzw. 5.0 vor 4.1.20 und 5.0.22 einsetzt. Da ist mysql_real_escape_string() eine schwachstelle die sql-injection erst möglich macht.

            greets
            (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

            Kommentar


            • #7
              Also ich finde Du solltes erst mal abfragen was in den Variablen drinsteht bevor Du es überhaupt in den SQL einbaut.
              Wir haben alle mal angefangen!

              Kommentar


              • #8
                Greaseball: und wonach soll ich dann schauen?

                Kommentar


                • #9
                  Ob diese vorhanden sind z.B. isset()
                  ob diese gefüllt sind z.B. empty()
                  und ob diese den erwarteten Inhalt enthalten z.B. mit preg_match()

                  In deinem Fall solltest Du prüfen ob die eMail-Adresse gültig ist.
                  Ich benutze dafür dieses

                  if (!preg_match('/[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9|ü|ä|ö]+([-_\.]?[a-z0-9|ü|ä|ö])+\.[a-z]{2,4}/',$_POST['emailadresse']))

                  in der Art kannst Du auch das Passwort abfragen indem du halt nur bestimmte Zeichen zulässt.
                  Zuletzt geändert von Greaseball; 03.02.2007, 19:29.
                  Wir haben alle mal angefangen!

                  Kommentar


                  • #10
                    Original geschrieben von Greaseball
                    in der Art kannst Du auch das Passwort abfragen indem du halt nur bestimmte Zeichen zulässt.
                    kann wegfallen, wenn das passwort gehasht wird, sollte eigentlich standard sein. somit sind auch alle sonderzeichen für das passwort erlaubt, was auch sicherer ist.

                    Kommentar


                    • #11
                      Mir ist das zu unsicher.
                      Ich lasse generell nur bestimmte Zeichen zu.
                      Dann bin ich mir sicher das auch nur das ankommt was ich auch haben will.
                      Wir haben alle mal angefangen!

                      Kommentar


                      • #12
                        @3DMax
                        kannst du mir bitte kurz erklären, was man unter gehasht versteht? Denke mal verschlüsselt - bin mir aber nicht sicher.

                        Kommentar


                        • #13
                          Original geschrieben von nobody2
                          @3DMax
                          kannst du mir bitte kurz erklären, was man unter gehasht versteht? Denke mal verschlüsselt - bin mir aber nicht sicher.
                          zum bsp. md5().
                          das erzeugt einen hash (immer 32 hex-zeichen, also ohne "böse" zeichen) und keine verschlüsselung, wie oft behauptet wird.

                          Kommentar


                          • #14
                            Das ist ja nix neues.
                            Macht ja wohl hoffentlich jeder.

                            Aber trotzdem frage ich für jeden Eintrag, egal woher er kommt, ab ob er vorhanden und gefüllt ist und gültge Zeichen enthält.

                            Für mich ist das der minimal Standard an Sicherheit.
                            Wir haben alle mal angefangen!

                            Kommentar


                            • #15
                              du verwechselst die eingabevalidierung (oft völlig entbehrlicher spaß) mit sicherheitsmaßnahmen.

                              Kommentar

                              Lädt...
                              X