Wie kann man ein Passwort in PHP Code sicher speichern?

7

Wie kann ich ein Passwort innerhalb des PHP-Codes haben und garantieren, dass niemand die Seite im Browser abrufen kann?

Ist: <?php $password = 'password' ?> genug? Gibt es einen besseren, sichereren Weg, dies zu tun?

    
nunos 16.09.2009, 12:02
quelle

12 Antworten

12

hängt vom Typ der Kennwörter ab, die Sie speichern möchten.

  • Wenn Sie Passwörter für den Vergleich speichern möchten, z. mit einem $users -Array, dann ist Hashing der Weg zu gehen. sha1 , md5 oder andere Geschmack (hier ist eine Übersicht)

    Das Hinzufügen eines salt sorgt für zusätzliche Sicherheit, da dasselbe Passwort nicht zum selben Hash führt

  • Wenn Sie Kennwörter speichern möchten, um eine Verbindung zu anderen Ressourcen wie einer Datenbank herzustellen: Am sichersten sind Sie, wenn Sie Ihre Kennwörter außerhalb Ihres Dokumentstammverzeichnisses speichern, d. h. für Browser nicht erreichbar. Wenn das nicht möglich ist, können Sie eine .htaccess -Datei verwenden, um alle Anfragen von außerhalb zu löschen

knittl 16.09.2009, 12:12
quelle
6

Ihr PHP-Code wird auf dem Server verarbeitet (Konfigurationsfehler werden angezeigt). Nichts in den <?php ?>; Blöcken wird jemals im Browser sichtbar sein. Sie sollten sicherstellen, dass Ihr Deployment Server dem Client keine Syntaxfehler anzeigt - dh die Fehlerberichte werden auf etwas gesetzt, das E_PARSE nicht enthält, damit es nicht zu einer übereilten Bearbeitung von Live-Code kommt / p>

Bearbeiten: Der Punkt, dass Sie sie in einer Datei außerhalb des Dokumenten-Stammverzeichnisses speichern, um zu vermeiden, dass Ihre PHP-Konfiguration bricht, ist sicherlich gültig. Bei der Verwendung von PHP habe ich eine config.inc-Datei außerhalb von htdocs gespeichert, die zur Laufzeit require d war, und konfigurationsspezifische Variablen (d. H. Kennwörter) exportiert.

    
Adam Wright 16.09.2009 12:05
quelle
2

Es gibt unzählige Möglichkeiten, dies zu tun. Es ist jedoch nicht möglich, das Kennwort, das Sie gespeichert haben (in reinem Text), in einer PHP-Datei anzuzeigen, da PHP eine serverseitige Sprache ist, was bedeutet, dass, solange Sie es nicht im Browser ausdrucken, dies auch geschieht bleiben unsichtbar.

Also ist es 'sicher'.

    
Jake 16.09.2009 12:06
quelle
1

Speichern Sie das Passwort verschlüsselt. Nehmen wir zum Beispiel die Ausgabe von:

%Vor%

... und lege es in deinen Code. Noch besser, legen Sie es in Ihre Datenbank oder in eine Datei außerhalb der Verzeichnisstruktur des Webservers.

    
Jeff Ober 16.09.2009 12:04
quelle
1

Nehmen wir an, Ihr Passwort lautet " iamanuisance ". So speichern Sie das Passwort in Ihrem Code. Schieben Sie das einfach irgendwo in Ihren Header.

%Vor%

Nur für den Fall, dass es nicht vollständig offensichtlich ist , können Sie dann später leicht auf das Passwort als $password zugreifen. Prost! : P

    
brianreavis 16.09.2009 14:44
quelle
1

Wenn Sie das Passwort in PHP abrufen können, ist es abrufbar ...

Sie können nur Ihr Passwort an einen "geschützten" Ort verschieben.

Die meisten Hosting-Unternehmen bieten einen separaten Ort an, an dem Sie Ihre DB-Dateien usw. platzieren können, und dieser Ort ist nicht über den Browser zugänglich. Sie sollten Passwörter dort speichern.

Aber sie sind immer noch auf Ihrem Server, und wenn jemand Zugriff auf Ihre Box hat, dann hat er Ihr Passwort. (Er kommt zu Ihrem PHP, das den Weg hat, es zu entschlüsseln, und er hat Zugriff auf die geschützte Datei - & gt; er kann es lesen)

Es gibt also kein "sicheres Passwort"

Die einzige Möglichkeit, die Sie haben, ist PASSWÖRTER für Ihre Benutzer usw. nicht zu speichern ... Ich werde wütend, wenn ich einen Dienst abonniere, und sie bieten an, mir mein Passwort per E-Mail zu senden, falls ich es vergesse. Sie speichern es "abrufbar", und das ist nichts, was Sie tun sollten.

Hier kommt all das Hashing und Salzen ins Spiel. Sie möchten, dass jemand auf eine Ressource zugreifen kann. Sie hash + salzen das Passwort und speichern es in der Datenbank für den USER, der auf den Service zugreifen möchte. Wenn der Benutzer sich authentifizieren möchte, wenden Sie denselben Algorithmus an, um den Hash zu erstellen und diese zu vergleichen.

    
Heiko Hatzfeld 16.09.2009 12:29
quelle
1

Basic, wahrscheinlich nicht 100% wasserdicht, aber genug für allgemeine Zwecke:

Hash das Passwort (verwenden Sie Salz für zusätzliche Sicherheit) mit Ihrem Lieblings-Algorithmus, und speichern Sie den Hash (und die Salz). Vergleichen Sie gesalzene & amp; Hash-Eingabe mit gespeicherten Daten, um ein Passwort zu überprüfen.

    
Martijn 16.09.2009 12:05
quelle
0

PHP-Codeblöcke können von Clients nicht abgerufen werden, es sei denn, sie geben etwas aus. Beobachte:

%Vor%

Benutzer kann entweder OK oder Falsch nichts bekommen.

    
Cem Kalyoncu 16.09.2009 12:06
quelle
0

Im Allgemeinen traue ich PHP-Rohcode für Passwörter für Dienste nicht. Schreiben Sie eine einfache PHP-Erweiterung, um das Passwort freizugeben. Dies stellt sicher, dass der Arbeitssatz passwortfrei ist, und macht es zu einem zusätzlichen Schritt für eine kompromittierte Maschine, um dem Hacker Zugriff auf den Dienst zu gewähren.

    
MathGladiator 20.09.2009 01:38
quelle
0

Speichern Sie wie vorgeschlagen das Passwort sha1, gesalzen und gespickt

%Vor%

und vergleichen Sie dann die beiden Werte

%Vor%

Und wenn Sie Ihre gehashten Passwörter nicht außerhalb des Server-Stammverzeichnisses speichern können, denken Sie daran, Apache anzuweisen, den Zugriff auf diese Datei in Ihrer .htaccess-Datei zu verbieten:

%Vor%     
macjohn 02.12.2011 16:46
quelle
-1

Am besten speichern Sie das Passwort über Ihrem Stammverzeichnis. Wenn Sie sich entschließen, ein Passwort in der PHP-Datei zu haben, dann könnte kein Körper sehen, weil PHP-Dateien auf dem Server ausgeführt werden. Aber wenn der Server PHP nicht unterstützt, dann werden diese Dateien als Textdateien geliefert und jeder kann das Passwort sehen.

    
Mohamed 16.09.2009 12:06
quelle
-1

Was passiert, wenn ich einen zweiten Webserver erstelle (es könnte sogar ein Intranetserver sein, der überhaupt nicht über das Internet erreichbar ist), um das Passwort an das PHP-Skript zu senden, das sich auf dem öffentlichen Server befindet, der sich mit der Datenbank verbindet?

Auf diese Weise kann ich die Direktiven im zweiten WebServer so verwenden, dass sie nur auf die erste antworten und die IPs aller anderen ablehnen. Der öffentlich zugängliche Server speichert das Passwort nie, es wird nur bei Bedarf angefordert. Ich denke, ist eine gute Idee, was denkst du?

    
MisterWalrus 02.12.2011 16:13
quelle

Tags und Links