Wie würden Sie eine FORM-basierte Authentifizierung ohne eine unterstützende Datenbank implementieren?

StackOverflow https://stackoverflow.com/questions/17376

Frage

Ich habe ein PHP-Skript, das als CGI-Programm und HTTP ausgeführt wird Authenticate Der Kopf wird gefressen und ausgespuckt.Daher möchte ich eine Art FORM-basierte Authentifizierung implementieren.Als zusätzliche Einschränkung gibt es keine Datenbank, sodass keine Sitzungsdaten gespeichert werden können.

Ich bin sehr offen für einen Master-Benutzernamen und ein Master-Passwort.Ich muss die Anwendung nur vor einem Eindringling schützen, der diese Anmeldeinformationen nicht kennt.

Wie würden Sie das also umsetzen?

Kekse?

Ich könnte das Formular präsentieren und wenn es validiert wird, kann ich ein Cookie zurücksenden, das ein Hash des IP-Adressen-Geheimcodes ist.Dann kann ich verhindern, dass Seiten gerendert werden, es sei denn, das Ding wird korrekt entschlüsselt.Aber ich habe keine Ahnung, wie ich das in PHP implementieren soll.

War es hilfreich?

Lösung

Es gibt einige Möglichkeiten, wie Sie dies tun können.

  1. htaccess - Lassen Sie Ihren Webserver die betreffenden Seiten sichern (allerdings nicht genau auf CGI-Formular basierend).
  2. Verwenden Sie Cookies und eine Art Hashing-Algorithmus (md5 reicht aus), um die Passwörter in einer Flatfile zu speichern, wobei jede Zeile in der Datei username:passwordhash ist.Stellen Sie sicher, dass Salz Ihre Hashes für zusätzliche Sicherheit im Vergleich zu Rainbow Tables.(Diese Methode ist etwas naiv ...Sei sehr Seien Sie vorsichtig mit der Sicherheit, wenn Sie diesen Weg gehen)
  3. Verwenden Sie so etwas wie a sqlite Datenbank, nur um die Authentifizierung durchzuführen.SQLite ist kompakt und einfach genug, dass es Ihren Anforderungen auch dann gerecht wird, wenn Sie kein großes Datenbank-Backend benötigen.

Theoretisch könnten Sie Sitzungsdaten auch in einer Flatfile speichern, selbst wenn Sie keine Datenbank haben.

Andere Tipps

Wenn Sie derzeit Authenticate verwenden, verfügen Sie möglicherweise bereits über eine htpasswd Datei.Wenn Sie diese Datei weiterhin verwenden möchten, aber zur FORM-basierten Authentifizierung statt über den Authenticate-Header wechseln möchten, können Sie ein PHP-Skript verwenden, um dieselbe htpasswd-Datei zu verwenden und Sitzungen zur Aufrechterhaltung des Authentifizierungsstatus zu verwenden.

Eine schnelle Google-Suche nach php htpasswd verrät es diese Seite mit einer PHP-Funktion zum Überprüfen von Anmeldeinformationen anhand eines htpasswd.Sie könnten es (vorausgesetzt, Sie haben Sitzungen auf Autostart eingestellt) mit einem Code wie diesem integrieren:

// At the top of your 'private' page(s):
if($_SESSION['authenticated'] !== TRUE) {
    header('Location: /login.php');
    die();
}

// the target of the POST form from login.php
if(http_authenticate($_POST['username'], $_POST['password']))
    $_SESSION['authenticated'] = TRUE;

Brauchen Sie wirklich ein Formular?Was auch immer Sie tun, die Einschränkung besteht darin, dass der Benutzername und das Passwort bekannt sind.Wenn sie das wissen, bekommen sie Ihren magischen Keks, der es ihnen ermöglicht.Sie möchten verhindern, dass sie die Seiten sehen, wenn sie das Geheimnis nicht kennen, und die Basisautorisierung erledigt dies, ist einfach einzurichten und erfordert nicht viel Arbeit Ihrerseits.

Müssen Sie den Authorization-Header wirklich sehen, wenn der Webserver die Zugriffskontrolle für Sie übernimmt?

Wenn Sie die Anwendung außerdem einer bekannten Liste von Personen (und nicht der Öffentlichkeit) zur Verfügung stellen, können Sie einen Webserver-basierten Zugriff auf andere Faktoren gewähren, wie z. B. eingehende IP-Adressen, Client-Zertifikate und viele andere Dinge eine Frage der Konfiguration und nicht der Programmierung.Wenn Sie Ihre Sicherheitsbeschränkungen erläutert haben, können wir möglicherweise eine bessere Lösung anbieten.

Viel Glück, :)

...Was Salt betrifft: Fügen Sie den Benutzernamen zu Ihrem Hash-Salt hinzu, um zu verhindern, dass jemand, der Ihren Salt kennt und Zugriff auf Ihre Passwortdatei hat, eine Regenbogentabelle schreibt und die Nummer des Passworts Ihrer Benutzer knackt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top