PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Passwortschutz


Limbi
15.05.2002, 14:41:29
Hallo alle! Hier die letzte Frage die ich gerne wissen möchte, dann lasse ich euch in ruhe ;)

Ich habe jetzt ein Forum also nicht gerade ein Forum aber ein Kommentarforum gemacht. Aber damit jemand etwas reinschreiben kann, musste er vorher seine Angaben machen und das Passwort bestimmen (wie es hier auch gemacht wird) und das Passwort sollte gespeichert werden. Und jetzt ist meine Frage: Wie kann ich checken, ob ein Name und Passwort auf einer Seite existiert. Zuerst musste ja man das Passwort und Username angeben und wird dann in einem .txt oder .dat File gespeichert. Und jetzt sollte PHP prüfen, ob dieser Username und Passwort in diesem .dat oder .txt File existiert. Thx to all! Ich glaube das war diesmal klaar genug...

Nev
15.05.2002, 16:06:17
Hi Limbi

Entweder du machst es so das du eine Datei hast in der alle User namen Stehen, der du legst für jeden User eine Datei an, welche den User-namen als Dateinamen hat.

Bei der ersten Lösung, liest du die Datei in ein Array und suchst dann im Array den Usernamen.

bei der zweiten Lösung, schaust du nach ob die Username + Dateiendung (User-File) da ist, bzw. lesbar.

wenn sie vorhanden bzw. lesbar ist, gibt es den User namen schon.
daher neuen Namen wählen.

Tip:
Die User-Daten sollten in einen eigenen Ordner sein, der mit einem Htaccess geschützt ist.
Somit kannst du sicher sein das keiner die Datein direkt ausliest.

Limbi
15.05.2002, 16:08:37
WIe ich den Username und Passwort in einem File schreiben kann, das weiss ich. Aber könntest du mir den Befehl-Code geben, der Schaut, ob dies vorhanden ist?
Danke!

Nev
15.05.2002, 16:23:49
@Limbi

du kannst den Befehl is_readable (http://www.php.net/manual/de/function.is-readable.php) verwenden bzw. file_exists (http://www.php.net/manual/de/function.file-exists.php)

beiden Befehlen, gibst du den absoluten Pfad zur Datei mit!!

Matt
15.05.2002, 16:25:12
Lösung zwei wäre die einfache, aber ich glaube nicht, dass sie umbedingt besser wäre, aber lassen wird das einmal.
Du könntest das folgendermaßen überprüfen:
if(!@fopen("$username.dat","r"))
{# account existiert nicht
}
else
{
#account existiert bereits...
}
das @ist wichtig, da du sonst ne fehlermeldung bekommst, wenn du versuchst, eine datei zu öffnen, die nicht existiert. mit dem @ unterdrückst du diese.
ich würde das Passwort übrigens auch in der datei nochmals kodieren - im empfehle md5(), allerdings ist das eine einwegverschlüsselung, sprich, du kannst sie nicht mehr entschlüsseln. Wenn du also wissen willst, ob das passwort funktioniert, musst du auch das eingegebene Passwort md5 kodieren, und die beiden stringt dann erst vergleichen.

Nev
15.05.2002, 16:37:18
@Matt
welche Lösung hättest du den, für das Problem

Limbi
15.05.2002, 16:51:44
Alle passwörter sollten in einem File sein. Es muss doch eine Möglichkeit geben, dass PHP eine .dat oder .txt File durchschaut und vergleicht, ob ein Passwort mit dem Formular übereinstimmt?

Matt
15.05.2002, 16:56:06
Ich würde es eben so machen, wie es limbi jetzt macht, mit einer datei, ich hab jetzt keine lust, die vorteile aufzuzählen, aber bitte.
Schau dir mal die CSV Funktionen an, Limbi, da kannst du die linien einzeln herauslesen und vergleichen, die funktionen sind recht brauchbar dafür.
wenn du fragen dazu hast, stell sie einfach...

Nev
15.05.2002, 17:11:16
Hat Vorteile und Nachteile

wenn er Angreifer die eine Datei knackt, hast a Problem

wenn er nur die User-Datei hat, ist es ned so ein Problem

Schneller bist du mit mehreren Dateien.

Aufwand ist ca gleich.

Progman
15.05.2002, 17:17:10
ich würde die Lösung mit nur einer Datei vorziehen. Ist nicht umbedingt berauschent wenn man den Server wechseln woll und man 100 Dateien verschieben muss. Auslesen kann man die Datei am ein fachsten mit file(); und dann mit explode(); weiterverarbeiten.

http://de.php.net/file
http://de.php.net/explode
http://de.php.net/in_array (vielleicht)

Limbi
15.05.2002, 17:34:23
Ok sagen wir ich habe jetzt einen File das heisst: Limbi.dat. Oder so wird es dann auftauchen? Und jetzt was muss ich machen? Das mit dem PHP.net zeugs verstehe ich nicht was das soll... Jetzt muss ich:

file('Limbi.dat') und jetzt?

Aber wenn jemand ein Formular ausfüllt und das Passwort anlegen will, dann muss ja dieser File autotisch geschrieben werden?!=

Matt
15.05.2002, 17:46:45
du öffnest die file mit fgetcsv und liest die daten mit einer funktion ein, so dass du immer eine zeile hast, diese explodest du, so dass du ein array mit einem usernamen und einem passwort hast, das vergleichst du dann, wenn es passt, brichst du aus der schleife aus, wenn nicht, machst du weiter.

in etwa so:


$file=fopen(...)<
while(!feof($file)
{
$line=fgetcsv($file,1000);
$line=explode(";",$line);
# jetzt schaust du, ob username in dieser zeile vorkommt.
}

klar?

Limbi
15.05.2002, 17:48:51
Wo muss ich den Username in dem Code angeben? Aber das Passwort muss ja auch noch abgefragt werden!?

Matt
15.05.2002, 18:30:50
also jetzt möchte ich mal eine persönliche Meinung anbringen: Es scheint ziemlich klar, dass du dich mit PHP nicht wirklich gut auskennst, und dich einarbeiten möchtest, allerdings glaube ich auch, dass du dich mit dem Projekt etwas übernímmst, wir haben für dich so gut wie alles für das Forum geschrieben allerdings bezweifle ich, dass du davon soetwas wie einen lerneffekt hattest. weisst du, was ich meine. an dem punkt, wo ich mein kommentar eingefügt habe musst du deine überprüfungen einsetzen, aber du hast es selbst nicht gewusst. verstehst du, was ich meine? Wenn das prjekt dafür war, dich PHP näherzubrignen, wird es ziemlich sicher fehlgeschlagen sein, denn funktionen anwenden kann man schnell, was jedoch wichtig ist, ist programmentwicklung!

Limbi
15.05.2002, 19:05:46
Es reicht mir allmälich hier mit all euren Kommentaren zu meinem Schreibstil oder PHP-Kenntnissen. Es ist dir (@Matt) sicherlich klaar, dass man durch die PHP-Codes selber lernt! Und übrigens bin ich nicht der gleichen Meinung, dass das Forum nur zum Lernen hier ist, sondern auch um Hilfe zu posten!!! Also wenn jemand wiedermal lust hat mir auf irgend eine Weise einen Kommentar zu hinterlassen zu meinen PHP-Kenntnissen, dem kann ich sagen, dass ich PHP tatsächlich am Lernen bin! Vielleicht nicht gerade hier im Forum aber mit einem Buch, dass ich zuhause entspannt lese!

Aber Danke für deinen Beitrag zu meinem Schreibstil!

Matt
15.05.2002, 19:11:09
das war nicht böse gemeint, nur das wäre genauso, wie wenn du einem kleinen Kind statt bauklötze einen Taschenrechner und ein Blatt papier hinlegst und erwartet, dass es integrieren lernt. Das war keine böse kritik, nur wir haben dir lösungsansätze geliefert aus denen man schlaut werden würde, wir haben dir code geliefert, beides zusammen auch noch und auf mehrere varianten! und das hat nicht gereicht, daraus schließe ich, dass das Forum einfach ein zu großes Einstiegsprojekt ist. Wenn du den balken anfangs zu hoch legst, wirst du einfach nur nicht drüberkommen. das wollte ich damit sagen, und das war keine beleidigung! Wenn man sich mit was nicht gut auskennt, fängt man nicht gleich mit etwas hochkomplexen an, das hätte ich auch nicht getan verstehst du, und ein forum ist sicherlich nichts einfaches!

Limbi
15.05.2002, 19:14:24
Naja! Ich hoffe wir können wieder frieden schliessen...
Aber nun wieder zur Sache:

Den Username muss man nachdem "#" einsetzen... Stimmt's?

Matt
15.05.2002, 19:17:57
dort, wo das kommentar (#) ist, musst du abfragen, ob der username stimmt, also etwa so:


$file=fopen(...);
#NEU!!
$found=0;
while(!feof($file)
{
$line=fgetcsv($file,1000);
$line=explode(";",$line);
#### NEU!!!
if($line[0]==$user && $line[1]==$password)
{
$found=1;
break;
}
}

if($found) print "passwort und username stimmen, eingeloggt";
else print "falscher username/password";


in etwa so müsste das sein.

|Coding
15.05.2002, 19:21:23
ja, Limbi, aber nicht NUR den usernamen, das dürfte dir doch klar sein, oder?

Limbi
15.05.2002, 19:40:52
Dieser Script macht den Computer zur hölle!! Es kommt andauernd die Zeilen:

"Warning: feof(): supplied argument is not a valid File-Handle resource in c:apachehtdocsforen
euehomepage est.php on line 12"

"Warning: fgetcsv(): supplied argument is not a valid File-Handle resource in c:apachehtdocsforen
euehomepage est.php on line 14"

Also sagen wir mal ich habe da ein File das heisst: Members.htm und drinnen ist geschriben (habe ich so getestet)

Limbi
123

Wie muss ich das abfragen.

Ich weiss schon das ich euch auf den Wecker geh mit solchen für euch "einfachen" fragen. Aber das ist auch meine letzte Frage und bitte euch nur noch das zu posten und bitte kein Kommentar über mich zu schreiben! Danke! Sorry für diese Sachen! Aber bitte posten... Das ist mir wichtig! Danke!

Matt
15.05.2002, 22:48:02
nunja, ich schätze einmal, da hat es irgend ein problem mit dem öffnen der Datei gegeben, bist du sicher, dass du sie im richtigen modus geöffnet hast? mach mal print $file, wenn da irgend eine beschreibung rauskommt, teil sie mir bitte mit, wenn das einfach nur leer ist, kannst du sicher sein, dass die datei nicht geöffnet wurde (in dem fall überprüf mal, ob du nicht zufällig variablen verwechselt hast)

|Coding
15.05.2002, 23:24:55
diese zeile ist mir gerade im script auf gefallen:


.
.
.
$line=explode(";",$line);
.
.
.


heißt das nicht das der username und das passwort so:

user;pass

...im save file gespeichert werden müssen?
oder was hat es mit dieser stelle auf sich?

Matt
15.05.2002, 23:34:49
ja, das war eigentlich so gemeint, aber soweit ich weiss habe ich das einmal irgendwo erwähnt... wieso?

|Coding
15.05.2002, 23:40:00
ja, ganz einfach. Limbi speichert seine daten so:

Limbi
123


das ist dann wahrscheinlich auch der fehler.

|Coding
16.05.2002, 08:00:41
@ Limbi,

ersetzt die stelle:

$file=fopen(...);

durch die:

$file=fopen(filename.dat, "r");


dann ist der fehler weg.