Der beste Weg, um Benutzername und Passwort ohne Datenbank zu speichern

8

Ich möchte eine einfache "single user login" -Bibliothek in PHP erstellen, aber ich stehe vor dem folgenden Dilemma: Wie soll ich Benutzernamen und Passwort speichern, wenn ich keine Datenbank verwende?

Eine einfache Klartextdatei könnte leicht gelesen werden und dann könnte das Passwort leicht dekodiert werden, so dass es keine Option ist.

Wenn ich eine PHP-Datei mit nur

erstellen %Vor%

dann sollte niemand in der Lage sein, es zu lesen, und ich könnte diese Datei einfach dorthin einfügen, wo ich sie brauche, aber ich bin mir nicht wirklich sicher, dass Sie keinen besseren Weg finden können, dies zu tun!

Was ist Ihrer Meinung nach die beste Lösung für dieses Problem (und warum)?

Danke

    
Mokuchan 06.05.2010, 17:26
quelle

9 Antworten

3

Eine einfache Textdatei ist eine Option, und es ist die einfachste Lösung hier. Hash einfach das Passwort (mit Salz ). Es ist nicht zuverlässig entschlüsselbar.

Sie können PHPs md5 oder sha1 Hash-Funktionen dafür.

    
Daniel DiPaolo 06.05.2010 17:29
quelle
3

Sie können es in einer Datei speichern und einen SHA1 / SHA2 Hash verwenden, so dass es nicht entschlüsselt werden kann.

%Vor%     
Mitch Dempsey 06.05.2010 17:28
quelle
2

Wenn Sie mehrere Konten benötigen, ist eine einfache Textdatei einfacher als eine PHP-Quelldatei. Ich denke, du sorgst dich darum, dass Leute die Datei über ihren Browser anfordern?

Überprüfen Sie, ob Ihr Webhost irgendeine Art von Verzeichnis hat, auf das nicht öffentlich zugegriffen werden kann, z. B. ein übergeordnetes Verzeichnis, in dem sich der eigentliche Webinhalt befindet. PHP wird normalerweise dort lesen und schreiben können, aber es wird nicht über das Web zugänglich sein.

Dateiberechtigungen und / oder .htaccess-Dateien (Apache) können Ihnen helfen, falls vorhanden kein Verzeichnis, auf das Sie zugreifen können.

Ich schlage vor, dass Sie die Funktion crypt verwenden, um das Passwort (Hash) zu speichern, anstatt es einfach zu speichern Passwörter. Dies ist ein separates Problem, von dem Sie sie jedoch speichern:)

    
Thorarin 06.05.2010 17:33
quelle
1
  • Sie können eine einfache Textdatei mit einem Hash oder crypt Funktion. Es ist zuverlässig, aber nicht wirklich flexibel, wenn Sie viele Benutzer haben.

  • Sie können auch SQLite verwenden, das eine Datenbank ist, die aber kein Server ist und die gespeichert wird in einer einfachen Datei. Es ist ein guter Kompromiss, wenn Sie keinen SQL-Server installieren können, aber viele Benutzer speichern und flexibler arbeiten möchten.

  • Je nachdem, was Sie tun möchten, könnte ein .htaccess ein sein gute Lösung. Es ist bereits sicher, aber als Klartextlösung ist es nicht flexibel. Aber es ist fast in allen Apache-Konfigurationen integriert.

Boris Guéry 06.05.2010 17:32
quelle
1

Was ist der Zweck, einen Benutzernamen zu haben, wenn es nur einen Benutzer gibt?

Kann auch nur Berechtigungen mit .htaccess verwalten ...

    
quelle
1

(Das begann als Kommentar zu Daniel DiPaolo, als Antwort auf Mokuchan.)

Wenn Sie ein Passwort (unabhängig vom Speicherort) speichern möchten, verwenden Sie das folgende Schema:

$ hashedPassword = $ salz. Hash ($ Salz. $ Passwort);

Der Speicherort des Hash-Passworts sollte sicher sein. Sei es in einer Datenbank oder in einer Datei mit den richtigen Berechtigungen.

Wenn eine Datei erstellt wird, sieht Ihr 'Datensatz' für den Benutzer bob mit dem Kennwort geheim ungefähr so ​​aus (mit BCrypt Hash):

%Vor%

Niemand kann das Passwort "entschlüsseln". Das ist der Sinn eines Hashing-Algorithmus: Er ist nicht reversibel.

Sie sagen das:

  

Es gibt einige Werkzeuge, die versuchen, md5 und sha1 zu entschlüsseln, und zumindest scheinen sie in einigen Fällen zu funktionieren

Da Hash-Algorithmen nicht reversibel sind, ist dies nicht möglich. (Es gibt keine Entschlüsselungsoption)

Meine beste Vermutung ist, dass Sie sich auf ein Tool beziehen, das nach einem Hash aus einer vorberechneten Tabelle gesucht hat und eine gültige Eingabezeichenfolge zurückgegeben hat, wahrscheinlich Ihr Passwort.
Diese Tabellen heißen Regenbogen Tische . Sie können durch A) mit einem zufälligen -Salz und B) mit einem starken Hash-Algorithmus (zB BCrypt-Hash oder SHA2-Familien-Hash)

besiegt werden

Bezüglich falscher Hashalgorithmen: MD5 und SHA1 gelten als kryptographisch gebrochen. Mit anderen Worten: Sie sollten sie nicht mehr benutzen.

Für eine Diskussion dazu, siehe: Ссылка

    
Jacco 06.05.2010 18:42
quelle
0

Ditto an alle, die sagen, dass Sie das Passwort verschlüsseln können.

Legen Sie die Datei auch nicht in den Dokumentbaum. Legen Sie die Datei woanders ab. Ihr PHP-Programm sollte immer noch in der Lage sein, es zu lesen, indem Sie einen absoluten Pfad oder einen relativen Pfad angeben, der ".." lautet. Es gibt jedoch viele Ebenen, um die Hierarchie und dann die Datei zu bearbeiten. (In Java-Apps gibt es ein WEB-INF-Verzeichnis, das praktisch ist, um solche Sachen zu speichern. Ich glaube nicht, dass es so etwas in PHP gibt - es ist eine Weile her, seit ich PHPing gemacht habe - aber Sie können Legen Sie die Datei immer vollständig außerhalb der Verzeichnishierarchie Ihrer Anwendung ab.)

    
Jay 06.05.2010 19:43
quelle
0

Erfinden Sie das Rad nicht neu, verwenden Sie dieses Ссылка

    
Cristian Rodriguez 06.05.2010 20:45
quelle
0

Der beste Weg ist

$ password_hash = hash ("sha256", "iamawesome"); // 4aa4029d0d0265c566c934de4f5e0a36496c59c54b6df8a72d9c52bdf0c1a0e8

$ user_entered = Hash ("sha256", $ _POST ['Passwort']); return ($ user_entered == $ password_from_db);

hashin wird Ihr Passwort sichern ..

ausführlicher Artikel: Ссылка

    
user1500341 19.10.2012 05:48
quelle

Tags und Links