• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

[PHP] Passwortsammlung speichern & aufrufen

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Hallo liebe Community.

Ich habe ein kleines "Projekt" vor.
Und zwar habe ich einen PHP Filebrowser programmiert, der mit einem sessionbasierten Login System geschützt ist. Dabei ist es notwendig, dass es Mehrere Namen und Passwörter zum erfolgreichen Login führen.
Das habe ich so gelöst:

Code:
if (($username == 'nutzer1' && $passwort == 'pass1') or ($username == 'nutzer2' && $passwort == 'pass2') or ($username == 'nutzer3' && $passwort == 'pass3')) {

Nun möchte ich aber etwas gemütlicher Passwörter und Nutzer hinzufügen.
Da dachte ich, dass ich mir ein anderes Formular frickel, welches mir die Namen und Passwörter als MD5 Hash in eine Datei (blabla.txt oder so) speichert.
Und das Loginteil (der Code oben) müsste dann das ganze Abfragen. Also:

Code:
if (md5($passwort) == [I]Zeile 1 von blabla.txt[/I] && md5($username) == [I] Zeile 2 von blabla.txt[/I]) {

Nu frag' ich mich, wie ich die Zeilen definieren soll.
Also müsste mein Login-teil Die blabla.txt auslesen, dann ein Array (nutzernamen) und eines weiteres (passwörter) schreiben (also den ganzen text so auflösen: array1 = array1 + zeile 1 array2 = array2 + zeile2) und dann die arrays abgleichen:

Code:
if (md5($username) == [I]item1 von array1[/I] && md5($passwort) == [I]item1 von array2[/I]) {

und dann item2 von array1 und item2 von array2.
Eben so oft, wie viele items im jeweiligen Array sind.

Ich hoffe ich habe das verständlich ausgedrückt.
Wie mach ich das denn? Das alles mit dem in Arrays auflösen und vor allem so oft wiederholen, bis das array durchgearbeitet ist??
Oder gibts eine noch einfachere Lösung als diese, die ich mir ausgedacht hab?


Vielen lieben Dank für jede Antwort, jeden Hinweis oder sogar ein schönes workaround.
Beste Grüße
 

jomi

Kleiner Weinapfel
Registriert
05.10.07
Beiträge
1.138
Ist der Unterschied eines Arrays gegenüber einer Liste von Strings nicht gerade, dass du beliebige Objekte einfügen kannst, die dann selbst eine Struktur haben können?
In der Theorie fände ich es daher sauberer, einen Array von Objekten (Benutzern) zu erstellen und dann jedem Objekt die Eigenschaften Nutzername und PW-Hash zuzuweisen. Wie das in der Praxis aussieht, kann ich dir leider nicht sagen…
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Klingt wunderbar. Da hast Du sicherlich Recht.
Scheint logischer.

Allerdings hab ich eher die Frage, wie man das dann liest.
Wahrscheinlich würde ich das schon hinbekommen. Allerdings weiß ich beim besten Willen nicht, wie ich variabel viele Einträge in die if {}; Schleife laden kann.
Also praktisch das if … or …*{} immer erweitern. Heute muss es 5 Einträge haben, morgen 7, 8, 9, dann 10 und so weiter.

Danke schon mal
 

torben1

Celler Dickstiel
Registriert
05.08.08
Beiträge
797
Schnell und einfach würde ich wie folgt vorgehen:
Name und Passwort in je eine Zeile einer Textdatei schreiben (z.B. Name=PSW).
Dann kannst Du die Datei Zeilenweise in ein Array laden.
Dann einfach mittels foreach und explode die Passwortabfrage machen.
Code:
foreach ($arr AS $tpm) # jeder Eintrag (Zeile) wird abgearbeitet
    {
    $namePass = explode("=", $tpm);
    if ($username == $namePass[0] && $psw == $namePass[1])
        {
        #Drin
        }
    }

Aber! gerade für Passwörter usw. würde ich nicht unbedingt eine TXT-Datei nehmen. Eine Datenbank wäre hier sicher der bessere und sichere Weg.

Torben
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
DANKE!
Klingt vernünftig.
Nur das foreach(); hatte mir gefehlt.

Ich denke, dass das mit der Textdatei nicht die Sicherste Methode ist. Da habe ich auch schon drüber nachgedacht.
Allerdings will ich ja auch Benutzernamen und[/I] Passwörter als MD5 Hash sichern. Das würde die ganze Sache für den Hacker sicherlich Massiv erschweren.
Und durch die Passwörter wird auch kein CIA-Server gesichert :)
Also würde jetzt keiner sterben, wenn sich da einer einhackt. Und hinzu kommt, dass keiner Interesse an meiner Internetseite hat und sich da Stunden hinsetzt um per Bruteforce meine Passwörter hacken will :))


Danke nochmal.
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Gibts denn einen noch sichereren Hash als MD5, der auch von PHP unterstützt wird?
Ich könnte doch sogar zum Erhöhen der Sicherheit (kommt kein drauf [?]) den MD5 vom MD5 vom Passwort nehmen, oder?
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Ich glaub Du musst mir da noch mal helfen :)
Das hat nicht funktioniert.

Code:
// PWD-Datei wird eingelesen
	  $arr = fopen('text.txt', 'r');
	  
	  // Benutzername und Passwort werden überprüft
	  foreach ($arr as $tpm) # jeder Eintrag (Zeile) wird abgearbeitet
    {
    $namePass = explode("=", $tpm);

Und foreach(); gibts mir einen Fehler aus:
Warning: Invalid argument supplied for foreach() in /Library/WebServer/Documents/schreiben/index.php

Woran liegt das?!
Muss ich das Text file irgendwie anders auslesen???


Danke & Grüße
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Habe es jetzt hinbekommen!
An dieser Stelle muss man
Code:
$arr = file ('text.txt');
benutzen, um den Inhalt der Datei in ein Array zu bekommen.
Jetzt funktioniert alles einwandfrei und alle meine Fragen sind geklärt.

Vielen Dank für die Unterstützung!
Alles Gute und liebe Grüße
 

_linx_

Kleiner Weinapfel
Registriert
04.01.09
Beiträge
1.125
Gibts denn einen noch sichereren Hash als MD5, der auch von PHP unterstützt wird?
Ich könnte doch sogar zum Erhöhen der Sicherheit (kommt kein drauf [?]) den MD5 vom MD5 vom Passwort nehmen, oder?

sha1() wäre soweit mir bekannt ist noch ein müh sicherer...