Würde diese PHP klappen?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
achtung
anfrage
anmeldung
anweisung
array
beginn
benutzer
benutzername
code
datenbank
datum
ende
host
login
string
tabelle
url
versuch
verwenden
zeichen
-
Habe leider nicht besonders viel ahnung und wollt mir mal nen Feedback holen, würd das klappen?
<?php // PHP-Code Beginn $host = "localhost"; // Nicht verändern - bleibt bei Funpic und den meisten anderen Hostern gleich $user = "<Hier muss der Username hinein>"; // Verändern! - Hier müsst ihr den Username eingeben der bei Funpic unter "MySql-Daten" steht $pass = "<Hier muss das Passwort hinein>"; // Verändern! - Hier müsst ihr das Passwort eingeben das bei Funpic unter "MySql-Daten" steht $dbase = "<Hier muss der Name der Datenbank hinein>"; // Verändern! - Hier müsst ihr den Namen der Datenbank eingeben der bei Funpic unter "MySql-Daten" steht mysql_connect($host, $user, $pass); // Öffnet eine Verbindung zu dem MySql-Server mysql_select_db($dbase); // Wählt die Datenbank $dbase aus $Benutzername = mysql_real_escape_string($HTTP_GET_VARS['benutzername']); // In der Variable steht der String der in der Url nach "benutzername=" übermittelt wurde $Passwort = mysql_real_escape_string($HTTP_GET_VARS['passwort']); // In der Variable steht der String der in der Url nach "passwort=" übermittelt wurde $result = mysql_query("SELECT * FROM User_Daten WHERE Benutzername='" . $Benutzername . "'"); // Sendet die Anfrage an die MySql-DB: "Wähle alle Daten aus der Tabelle User_Daten wo der Benutzername gleich $Benutzername ist" // !!! Achtung !!! - Habt ihr vorher den Namen der Tabelle verändert müsst ihr logischerweise auch den neuen Namen verwenden $row = mysql_fetch_row($result); // mysql_fetch_row($result) gibt ein Array zurück mit allen Daten aus der Spalte in der der Benutzername gleich $Benutzername ist if ($row) // Wenn ein Datensatz gefunden wurde { // ... Benutzername ist also schonmal vorhanden in der DB $Dbmd5Passwort = $row[1]; // Die Variable $Dbmd5Passwort enthält nun das Passwort als MD5-String // mysql_fetch_row in Zeile 34 hatte ein Array zurück gegeben, deshalb $row[1] // In der DB ist die Passwortspalte die zweite Spalte von oben - somit $row[1] ( die Spalten sind von 0 ab nummeriert) if ($Passwort == $Dbmd5Passwort) // Wenn das übermittelte Passwort mit dem Passwort aus der DB übereinstimmt { // Passwort stimmt echo 1; // Gib eine 1 aus } else // Ansonsten { // Passwort stimmt nicht echo 2; // Gib eine 2 aus } } else // Ansonsten { // Benutzername nicht vorhanden echo 0; // Gib eine 0 aus } // PHP-Code Ende ?>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
An sich gibt es immer einen einfachen Weg dies herauszufinden, indem man es einfach ausprobiert. Auf den ersten Blick kann ich keine gravierenden Fehler entdecken, allerdings würde sich vielleicht eine while-Schleife anbieten um (wenn vorhanden) mehrere Datensätze auszulesen.
-
Aus Sicherheitsgründen würde ich gar nicht erst unterscheiden (oder zumindest nicht ausgeben), ob Benutzername oder Passwort falsch ist. Stattdessen kann man ja einfach mit
SELECT COUNT(*) FROM User_Daten WHERE Benutzername = 'Benutzer' AND Passwort = 'Passwort'
abfragen, ob es einen Benutzer mit diesen Anmeldedaten gibt. Wenn eine Zahl > 0 zurückkommt, ist die Anmeldung gültig. -
Was deddyh sagt, würde ich auch empfehlen. Potentielle "Hacker" darauf aufmerksam zu machen, dass der User zwar existiert, das eingegebene Kennwort jedoch falsch ist, ist nicht die weiseste Entscheidung.
Ich würde es in etwa so machen:
<?php // PHP-Code Beginn $host = 'localhost'; // Nicht verändern - bleibt bei Funpic und den meisten anderen Hostern gleich $user = '<Hier muss der Username hinein>'; // Verändern! - Hier müsst ihr den Username eingeben der bei Funpic unter "MySql-Daten" steht $pass = '<Hier muss das Passwort hinein>'; // Verändern! - Hier müsst ihr das Passwort eingeben das bei Funpic unter "MySql-Daten" steht $dbase = '<Hier muss der Name der Datenbank hinein>'; // Verändern! - Hier müsst ihr den Namen der Datenbank eingeben der bei Funpic unter "MySql-Daten" steht @mysql_connect($host, $user, $pass) or die(mysql_error()); // Öffnet eine Verbindung zu dem MySql-Server @mysql_select_db($dbase) or die(mysql_error()); // Wählt die Datenbank $dbase aus $benutzername = mysql_real_escape_string($_REQUEST['benutzername']); // In der Variable steht der String der in der Url nach "benutzername=" übermittelt wurde $passwort = mysql_real_escape_string($_REQUEST['passwort']); // In der Variable steht der String der in der Url nach "passwort=" übermittelt wurde $query = mysql_query("SELECT COUNT(*) FROM User_Daten WHERE LOWER(Benutzername) = LOWER('".$benutzername."') AND Passwort = '".md5($passwort)."'") or die(mysql_error()); // Sendet die Anfrage an die MySql-DB: "Wähle alle Daten aus der Tabelle User_Daten wo der Benutzername gleich $benutzername ist" // !!! Achtung !!! - Habt ihr vorher den Namen der Tabelle verändert müsst ihr logischerweise auch den neuen Namen verwenden $result = mysql_fetch_array($query); // mysql_fetch_array($result) gibt ein Array bestehend aus Benutzername & Passwort zurück if($result[0]>0) { echo 'Die Benutzerdaten sind korrekt.'; // Login erfolgreich } else { echo 'Benutzername oder Kennwort falsch.'; // Login nicht erfolgreich } // PHP-Code Ende ?>
EDIT:
or die(mysql_error()) mit eingefügt.
Beitrag zuletzt geändert: 9.4.2011 9:29:57 von fabo -
Wie ich sehe versuchst du gerade ein Login-Bereich zu erstellen. Dazu gibt es ein super Tutorial welches du als Anregung verwenden kannst. Link: http://www.tutorials.de/php-tutorials/9684-php-mysql-login-system-mit-sessions.html
Auch ich empfehle dir nicht darauf hinzuweisen das es den Benutzer gibt aber das Passwort falsch sei. Prüfe ob die Kombination richtig ist und wenn nicht dann gib eine Meldung aus, dass die Anmeldung fehlgeschlagen sei. Es ist zwar immer noch ziemlich schwierig mithilfe des Benutzernamens das Passwort herauszufinden aber es gibt auch die Möglichkeit mit einem Injection Hack die Datenbank auszulesen. Weiss der Angreifer den Benutzernamen fällt ihm das herausfinden des Passworts kinderleicht. Bei Youtube findest du dazu eine Menge Beispielvideos.
Ich finde ansonsten keine Fehler aber wenn du auf Nummer sicher gehen willst dann würde ich es mal testen. Dabei vielleicht erstmal lokal mit XAMPP.
Gruß S.Brosch -
Danke, @fabo ich werds mal ausprobieren :D
@software.brosch um genau zu sein versuch ich im nach hinnein mit einem programm den quelltext auszulesen wo dann nur das ergebnis drinnen stehen sollte und somit die bestätigung da ist, das man das prog nutze darf :P
Danke an alle, wenn was ist meld ich mich nochmal :D
Edit:
Ok habs probiert, klappt immernoch nicht, das teil gibt immer 1 aus, auch wenn der nutzer in der MySQL existiert... Was mach ich falsch? Liegt es vielleicht an den mySQL einstellungen? Der host wäre doch mysql.lima-city.de:3306 oder?
Beitrag zuletzt geändert: 8.4.2011 10:08:19 von h2t -
Entferne mal die @-Zeichen vor den MySQL-Anweisungen und füge vor
if($result[0]>0) {
mal
die(var_dump($result));
ein und schau, was raus kommt. Achte zudem bitte auf groß und Kleinschreibung.
Alternativ könntest du auch hinter den MySQL-Anweisungen
or die(mysql_error));
verwenden.
Beitrag zuletzt geändert: 8.4.2011 11:35:44 von fabo -
Anführungszeichen vergessen? Statt
echo 1;
// Gib eine 1 aus
...
echo 2;
// Gib eine 2 aus
...
echo 0;
versuchs mal mit
echo "1";
...
echo "2";
...
echo "0"; -
Außerdem steht da etwas von MD5, also muss wohl das übergebene Passwort auch zunächst "gehashed" werden, sonst kann der Vergleich ja nicht funktionieren (es sei denn, das Passwort steht im Klartext in der DB).
-
Noch n kleiner Einwurf.
Wenn du bei der MySql Abfrage where benutzername = ' Benutzername' das '=' mit dem Wort Like ersetzt , wird
nicht auf groß und kleinschreibung geachtet.
Mich nervt es wenn ich den Benutzernamen so schreiben muss wie ich ihn in der Anmeldung angegeben hab
mfG. -
Ob LIKE case-insensitive arbeitet ist IIRC Einstellungssache. Dann doch lieber
, damit ist man auf der sicheren Seite.WHERE LOWER(Benutzername) = LOWER('Hanswurst')
-
t-bone schrieb:
Mich nervt es wenn ich den Benutzernamen so schreiben muss wie ich ihn in der Anmeldung angegeben hab
^^ Ist aber sicherer, da mehr Zeichen zur Verfügung stehen ;) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage