Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
02.03.2005, 19:44
Alcapone



Ich möchte einen Login erstellen. Dieser Login besteht aus 2 PHP Dateien. In der ersten datei mit dem namen pass.php befindet sich das Formular mit dem Benutzernamen und Passwort Feld. In der zweiten befindet sich die Passwortabfrage der Datenbank und das vergleichen des Passwortes und des Benutzernamens vom Post Formular mit der Datenbank. Ich hab mal bisschen gecodet, aber hat ned so funktioniert wie ich wollte.

Hier mal der Teil des Quelltextes:

PHP-Quellcode:<?php
$name 
$_POST['name'];
$pass $_POST['pass'];

$sql "SELECT name, pass FROM dbuser WHERE name = $name AND pass = $pass ";

mysql_query($sql) or die (mysql_error());
?>
Es kommt der fehler: Unknown column 'Passwort' in 'where clause'

Gibt es eine einfachere möglichkeit ? Und warum funktioniert diese möglichkeit nicht ?

//edit: datenbankconnect ist natürlich dabei !

--

"Everything, that can go wrong, will go wrong" Murphy's Law


Dieser Beitrag wurde am 02.03.2005 um 19:46 von Alcapone bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
02.03.2005, 19:57
K-Putt



Ganz einfach, wenn du einen String-Vergleich machst, musst du das ganze im einfache Anführungszeichen ( ' ) setzen.

Beispiel:

PHP-Quellcode:<?php
$sql 
="SELECT name, pass FROM dbuser WHERE name='$name' AND pass='$pass'";
?>
Sauber müsste das ganze letztendlich so aussehen:

PHP-Quellcode:<?php
$sql 
"SELECT name, pass FROM dbuser WHERE name='".$name."' AND pass='".$pass."'";
?>
Alles klar?

PS: Das passwort "Passwort" ist relativ unsicher ;)

--

Rambo Engineer @ Drippy's 2fort - finest TFC 1.5 || Bild Upload || The world's most advanced open source database


Dieser Beitrag wurde am 02.03.2005 um 19:57 von K-Putt bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
02.03.2005, 20:28
Alcapone



Ah, verdammt, sorry, das ich den Thread aufgemacht habe, hat gestern abend schon funktioniert ! Hab bloß was vergessen wozu ich jetzt komme:

So, jetzt müssen die passwörter "gespeichert" werden, das man auf den passwortgeschützten seiten nicht jedesmal das passwort und den namen eingeben muss.

1. Ist es besser wenn ich das ganze in cookies schreibe ? Und wenn ja ist es noch sinnvoller das ganze in MD5 zu verschlüsseln ?

2. Oder wäre es besser wenn ich ich es mit ner Session ID mache ?

3. Oder sollte man das in einer URL einspeichern (verschlüsselt natürlich, wenns geht)

Also nummer eins wüsste ich wie es gehen würde, bei nummer 2 und nummer 3 bräuchte ich evtl hilfe.

--

"Everything, that can go wrong, will go wrong" Murphy's Law


Dieser Beitrag wurde am 02.03.2005 um 20:30 von Alcapone bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
02.03.2005, 21:12
theDon



du solltest uebrigens unbedingt username und passwort durch addslashes() jagen, sonst hast du da eine riesige sicherheitsluecke.

--

\o tanz den naziprau! o/

And more than ever, I hope to never fall,
Where enough is not the same it was before

zum Seitenanfang zum Seitenende Profil || Suche
004
02.03.2005, 21:22
K-Putt



Mach es mit Sessions.
Arbeiten letztendlich auch mit Cookies, die Methode über die URL ist jedenfalls zu unsicher, weil durch weitergabe der URL Sessions geklaut werden könnten.

Zum Thema PHP und Sessions gibts viele, viele Tutorials und Anleitungen...

--

Rambo Engineer @ Drippy's 2fort - finest TFC 1.5 || Bild Upload || The world's most advanced open source database

zum Seitenanfang zum Seitenende Profil || Suche
005
03.03.2005, 18:33
scus



mach vieleicht die datenbankabfrage so, dass du erst das passwort mit "WHERE user=$user" holst und dann vergleichst, dann könntest du genauer sagen ob passwort oder username falsch ist...

--

sincères amitiés scus
--
Tand, Tand ist das Gebilde von Menschenhand

zum Seitenanfang zum Seitenende Profil || Suche
006
03.03.2005, 19:44
TheTinySteini



Ne, das is schlecht, weil einfacher zu hacken.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
007
03.03.2005, 20:21
epidemic



wieso?

Die Scripte werden doch auf dem Server ausgeführt?!

--

Der Optimist glaubt, dass wir in der Besten aller Welten leben.
Der Pessimist fürchtet, dass dies stimmt.

zum Seitenanfang zum Seitenende Profil || Suche
008
03.03.2005, 20:35
theDon



weil du dann sicher sein kannst, dass du den username richtig geraten hast. wenn nicht klar ist, welches von beiden falsch war, vergroessert das die kombinationsmoeglichkeiten ziemlich.

--

\o tanz den naziprau! o/

And more than ever, I hope to never fall,
Where enough is not the same it was before

zum Seitenanfang zum Seitenende Profil || Suche
009
05.03.2005, 12:37
scus



mann muss es ja nicht ausgeben. man könnte aber, wenn 3x der username falsch eingegeben wurde die ip für 'n paar std sperren oder wenn 10x das passwort falsch ist. ein falscher username deutet denke ich eher auf hack als falsches passwort (hier kann man sich eher vertippen, weil mans nich sieht bzw. weil man - was die wenigsten machen - groß und kleinschreibung verwenden sollte)

--

sincères amitiés scus
--
Tand, Tand ist das Gebilde von Menschenhand

zum Seitenanfang zum Seitenende Profil || Suche
010
05.03.2005, 13:58
CN



scus
das is schwachsinn
man sollte nichts dergleichen machen

--

zum Seitenanfang zum Seitenende Profil || Suche
011
05.03.2005, 18:08
scus



war ja nur'n vorschlag... ich kenn mich in solchen dingen nicht aus...

--

sincères amitiés scus
--
Tand, Tand ist das Gebilde von Menschenhand

zum Seitenanfang zum Seitenende Profil || Suche
012
07.03.2005, 01:09
oxff



Der SQL Query is bloed, du brauchst pass doch garnicht.

--

mwcollect - mein Projekt | oxlog - mein blog | happyhardcore.com Stream - gute Musik

zum Seitenanfang zum Seitenende Profil || Suche
013
14.03.2005, 22:35
dp
Administrator


wenn man user und passwort mit and verknuepft, wie hier geschehen, sollte man auch einen index dafuer machen, falls groessere datenbestaende anzunehmen sind. (deswegen bevorzuge ich es nur user in die where-klausel zu nehmen und den vergleich mit php auszufuehren.)

--

zum Seitenanfang zum Seitenende Profil || Suche
014
20.03.2005, 22:15
Chronial



Also zuallererst mal, wie alcapone schon sagte - die wichtigste Regel für php-scripte, die nicht jedem Deppen Zugriff auf deinen Server/alle Daten geben sollen: never trust user input.
Der Username und das Passwort kommen aber vom user - was könnte der User also damit machen? Naja, er könnte da ein ' einbauen, somit deinen String beenden und lustige querys ausführen.
z.b. "egal' OR TRUE OR 'auchegal" als Passwort.
Das ergibt folgendes query:
SELECT name, pass FROM dbuser WHERE name = '*givenname*' AND pass = 'egal' OR TRUE OR 'auchegal'
Das du das nicht möchtest sollte klar sein. Deswegen Usereingaben für mysql querys immer mit mysql_real_escape_strin escapen solltest (mysql_escape_string für php-versionen vor 4.3).

Des Weiteren solltest du deine Passwörter in der datenbank nicht einfach so speichern, sondern nur den md5-hash. So kann niemand mit datenbankzugriff passwörter erfahren, die eventuell noch woanders genutzt wurden, und es kann auch niemand zugriff auf deinen account erhalten, ohne dein Passwort zu ändern, was du natürlich merkst.

Weiterhin ist dein Query unsinnig.
Entweder
SELECT 1 FROM dbuser WHERE name=*givenname* and pass=*givenpass* - und dann am besten mysql_num_rows (sollte das Schnellste sein)
oder
SELECT pass FROM dbuser WHERE name=*givenname* - und das passwort dann mit php überprüfen.
Um den Unterschied zu kapieren solltest du dich mit MYSQL-indexes beschäftigen, da es von deiner Tabelle abhängt, welche die "richtige" abfrage ist. Solange die Tabelle aber klein ist, ist das sowieso egal. Hackbar ist keine der beiden methoden, solange du immer maximales Misstrauen gegenüber Userangaben hegst.

zu deinen 3 Möglichkeiten:
die 3. Methode auf keinen Fall. Die 1. Methode wenn du möchtest, dass user über längere Zeit auf mehreren Rechnern eingeloggt bleiben können - dann aber auf jeden Fall mit md5. Die Methode ist aber relativ unsicher.
Sessions sind generell die beste Möglichkeit, da das Passwort nirgends mehr zu finden ist und du sessions an IPs binden kannst, was einen missbrauch stark an dir Grenze des unmöglichen rückt.

--

"tsuji-giri" (japanisch) - ein neues Schwert an einem Passanten ausprobieren

zum Seitenanfang zum Seitenende Profil || Suche