PHP Login mit Prüfung von ID aus MYSQL Datenbank

...komplette Frage anzeigen

2 Antworten

Dir ist das vielleicht nicht ganz klar, aber du hast da eine dicke fette SQL-Injection-Sicherheitslücke in deinem Code!

Das wird dazu führen, dass automatisierte Skripte entweder deine komplette Datenbank mit Benutzernamen und Passwörtern auslesen können, oder - was wesentlich einfacher ist - dass irgend ein Skript-Kiddie deine Datenbank kaputt macht (DROP TABLE).

Und das ist nicht nur Theorie, das WIRD spätestens binnen weniger Tage bis Wochen passieren, da Bots / Crawler / Spider / automatisierte Skripte das WWW ständig nach solchen Sachen durchsuchen.

Hinzu kommt, dass du ein "ungesalzenes" Passwort abspeicherst, was bedeutet, dass man in den meisten Fällen, die MD5-Summe der Passwörter mittels Rainbow-Tables in den Klartext zurück wandeln kann! Mit anderen Worten: Du kannst die Passwörter auch gleich direkt abspeichern, ohne den Umweg über MD5 zu gehen ... beides nimmt sich nicht viel.

Aaaaber, da jeder mal irgendwie anfängt, sei dir verziehen! ;)

Lies dir trotzdem mal bitte Artikel oder Tutorials zu folgenden Themen durch:

  • Prepared Statements

  • SQL Injection

  • XSS (Cross Site Scripting)

  • MD5 Kollisionen

  • gesalzene (und evtl. gepfefferte) Passwörter

Das findest du auch in der Wikipedia recht gut erklärt, und das sind gößtenteils DIE Standard-Sicherheitslücken, die normalerweise von Hackern ausgenutzt werden, um an Benutzerdaten ran zu kommen, in Server einzudringen, und evtl. Schadsoftware über fremde Server zu verteilen.

Die obige Liste ist zwar nicht komplett, aber wenn du diese Punkte beherzigst (was wirklich nicht schwer ist), ist deine Website schon mal ein ganzes Stück sicherer! :)

Viel Spaß und Erfolg beim (sichere) Webseiten-Bauen! :)

bitte den code nochmals mit ctrl-K formatiert.

<?php session_start(); ?>

<?php $verbindung = mysql_connect("localhost", "user" , "passwort") or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); mysql_select_db("radius") or die ("Datenbank konnte nicht ausgewählt werden");

$username = $_POST["username"]; $passwort = md5($_POST["password"]);

$abfrage = "SELECT username, passwort FROM rm_users WHERE username LIKE '$username' LIMIT 1"; $ergebnis = mysql_query($abfrage); $row = mysql_fetch_object($ergebnis);

if($row->passwort == $passwort) { $_SESSION["username"] = $username; header("Location: <a href="http://website">http://website</a>"); } else { echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login"; }

?>
0

Bin jetzt mittlerweile soweit:

<?php 
$verbindung = mysql_connect("localhost", "user" , "passwort") 
or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); 
mysql_select_db("radius") or die ("Datenbank konnte nicht ausgewählt werden"); 

$username = $_POST["username"]; 
$passwort = md5($_POST["password"]); 

$abfrage = "SELECT username, passwort, srvid FROM radius WHERE username LIKE '$username' LIMIT 1"; 
$ergebnis = mysql_query($abfrage); 
$row = mysql_fetch_object($ergebnis); 

if ($row->srvid == "53" or $row->srvid == "54" or $row->srvid == "55" or $row->srvid == "56" or $row->srvid == "57" or $row->srvid == "58" or $row->srvid == "59" or $row->srvid == "60" or $row->srvid == "61" or $row->srvid == "62" or $row->srvid == "63" or $row->srvid == "64" or $row->srvid == "65" or $row->srvid == "66" or $row->srvid == "67" or $row->srvid == "68" or $row->srvid == "69" or $row->srvid == "70" or $row->srvid == "71" or $row->srvid == "72" or $row->srvid == "73" or $row->srvid == "74" or $row->srvid == "75")
    if($row->passwort == $passwort) 
     { 
     $_SESSION["username"] = $username; 
     header("Location: <a href="http://website">http://website</a>"); 
     }
     else 
        { 
        echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>";
        }  
    else 
        { 
        echo "Falsches Paket. <a href=\"login.html\">Login</a>";
        } 

?>

Aber jetzt fragt er die id ab und nicht mehr das Passwort.

0
@Steven200492

Ich hab einmal password und einmal passwort geschrieben, da war der Fehler.

Danke dennoch für die Hilfe, aber ich denke das war es erstmal.

0
@Steven200492

was anderes: hast du wirklich die zeile

$row->srvid == "53" or $row->srvid == "54" or .......

abgetippt?

und nicht mal an if ( $row->srvid >= 53 and $row->srvid <= 75 ) gedacht?
oder hat das einen tieferen grund?

0

Was möchtest Du wissen?