PHP "komische" Datenbank-abfrage für Loginform mit Elseif

...komplette Frage anzeigen

2 Antworten

Deine Frage ist wohl beantwortet. Nur hast du einige Sicherheitslücken in deinem Code.

Erstmal fügst du username und password direkt in die SQL queries ein ohne sie zu säubern. Da kann dir jeder einfach SQL rein machen wie er will.

Außerdem speicherst du die Passwörter im Klartext? Wenn jemand ins System eindringt dann hast du ein ziemlich großes Problem damit.

Schau dir mal salted hashes für die Passwörter an und benutz die Escape-Funktionen für SQL von PHP um dein SQL aufzuräumen. http://de.wikipedia.org/wiki/SQL-Injection

KilerAffe 04.03.2014, 09:07

Hey,

Ja, davon hab ich schon gehört, aber ich dachte ich achte jetzt erst mal auf alles andere und am Schluss dann auf Sicherheit...

Aber noch ne Frage, wenn ich weiss das der benutzername "admin" ist, und ich mag mich mit der SQL-Injection einloggen (nehmen wir an ich kenne das Passwort nicht, was muss ich im Passwort Feld eingeben?

Muss ja was mit MySQL zu tun haben, also so ähnlich wie : ' OR ''='

Aber das geht nicht, heisst das jetzt meine Webseite ist sicher? :D

0
Juliahn 06.03.2014, 15:10
@KilerAffe

Ich seh in deinem Code nichts wo du das verhinderst. Also nein.

0

Du kannst zwischen deinem if und dem elseif nicht Variablen definieren, die müssen raus bzw. du musst es woanders machen.

    $bla = "SELECT status FROM users WHERE username = \'$username\'";
    $bla2 = mysql_query($bla);

Die beiden Zeilen sind dort fehl am Platze.

KilerAffe 28.02.2014, 14:34

aaah, tatsächlich, jetzt klappts ^.^

Wusste gar nicht dass die beiden Zeilen son grossen Einfluss haben >.<

Dankee

EDIT: Nein wart, jetzt kommm ich gar nicht mehr rein O_o

1
phiLue 28.02.2014, 14:40
@KilerAffe

Hab mir das nochmal genauer angeschaut und soweit verbesser wie ichs auf die Schnell gefunden habe. Hoffe das hilft dir. :)

if($_SERVER["REQUEST_METHOD"] == "POST") {
    $tbl_name = "users";
    $username = $_POST['username'];
    $password = $_POST['password'];
    if($username == "" && $password == ""){ 
        echo '<h1 class=\"alert \">Bitte alle Felder ausfüllen!<br /><br /></h1>';
    }
    
    $bla = "SELECT status FROM users WHERE username = \'$username\'";
    $bla2 = mysql_query($bla);
    if($bla == 0){
        echo "<h1 class='alert'>Der Benutzer wurde noch nicht von einem Administrator verifiziert!</h>";
    } else {         
        $sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password' and status=1";
        $result=mysql_query($sql);
        $count=mysql_num_rows($result);
        $sql2 = "UPDATE users Set login = login+'1' WHERE username = '$username'"; //Schauen wie oft sich ein Benutzer eingeloggt hat, später dann login auf 1 Person beschränken
        $result2=mysql_query($sql2);
        if($count==1){
            session_start();
            $_SESSION["user"] = $username;
            header("location:arbeitsjournal.php");
        } else {
            echo "<h1 class=\"alert\">Bitte gültige Daten eingeben<br /><br /></h1>";
        }
    }
}
0
KilerAffe 28.02.2014, 14:50
@phiLue

Habs doch noch alleine hinbekommen :D

        $bla = "SELECT status FROM users WHERE username = \"".$username."\"";
        $bla2 = mysql_query($bla);
        $row = mysql_fetch_object($bla2);

Und dann noch

        elseif($row->status == 0){
            echo "<h1 class=\"alert\">Der Benutzer wurde noch nicht von einem Administrator verifiziert!</h>";
        }

Und dann klappts :D

Trotzdem danke :)

1
cat64k 28.02.2014, 17:01
@phiLue
$bla = "SELECT status FROM users WHERE username = \'$username\'";
    $bla2 = mysql_query($bla);
    if($bla == 0){
        echo "<h1 class='alert'>Der Benutzer wurde noch nicht von einem Administrator verifiziert!</h>";
    } 

$bla wird niemals 0 sein, da $bla ja der SQL-Querystring ist.

auch $bla würde niemals 0 werden, weil die mysql_query immer ein result zurückwirft

das ganze muss also lauten

if(mysql_num_rows($bla2))
0

Was möchtest Du wissen?