Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP und MySQL - wie kann man Passwörter im Quellcode vermeiden?

Der einfachste Weg ist, wie Sie sagten, die Verwendung einer Konfigurationsdatei.

Viele Frameworks verwenden dies (Zend ). , CakePHP , Kohana , usw.) und es ist die gebräuchlichste Art, Dinge zu tun (sogar in einer Nicht-PHP-Umgebung wie ASP.NET mit seiner web.config). Dateien). Dies ermöglicht Ihnen auch, Konfigurationswerte von Umgebung zu Umgebung zu kopieren, indem Sie einfach die Dateien für die Site kopieren, was ein Vorteil gegenüber dem Verlassen auf Server-Setup-Umgebungsvariablen ist (die sehr schnell verloren gehen und vergessen werden können).

Sie sollten sich keine Gedanken über die Verschleierung des Passworts machen müssen, da es sich nicht um eine weltweit zugängliche Datei handelt, es sollte sicherlich nicht über das Internet zugänglich sein. Was ich damit meine ist, dass Sie entweder a) Ihren Webserver anweisen würden, Ihre Konfigurationsdatei nicht bereitzustellen ( IIS tut dies bereits mit web.config Dateien und stellt einen HTTP 404.8-Status anstelle des Inhalts bereit) oder b) Verschieben Sie es aus Ihrem vom Web bereitgestellten Verzeichnis. Wenn jemand Ihre Konfigurationsdatei sehen kann, ist das schlimmer, als sie in Ihrem Quellcode zu haben.

Es ist auch eine gute Idee, eine (leere / Standard-) Basisversion der Konfigurationsdatei zu haben und sie nach Umgebungen aufzuteilen, sodass Sie unterschiedliche Konfigurationsdateien für Produktions-, Entwicklungs- und Testplattformen haben können.

Eine Umgebungsvariable ist die gebräuchlichste Methode, um zwischen diesen Umgebungen zu unterscheiden, etwa wie der folgende Code:

// Check if it's been set by the web server
if (!empty($_ENV['ENVIRONMENT'])) {
    // Copy from web server to PHP constant
    define('ENVIRONMENT', $_ENV['ENVIRONMENT']);
}

if (!defined('ENVIRONMENT')) {
    // Default to development
    define('ENVIRONMENT', 'development');
}

// Load in default configuration values
require_once 'config.default.php';

// Load in the overridden configuration file for this environment
require_once 'config.' . ENVIRONMENT . '.php';

Eine andere, weit verbreitete Möglichkeit besteht darin, eine XML-Konfigurationsdatei zu verwenden und nur die Werte einzulesen, die Sie entsprechend benötigen (Speichern einer zwischengespeicherten Kopie der Konfigurationsdatei im Arbeitsspeicher). Dies kann sehr einfach darauf beschränkt werden, nur bestimmte Werte zu laden, anstatt das willkürliche Einfügen von PHP-Dateien zuzulassen, und ist meiner Meinung nach insgesamt eine bessere Lösung, aber das oben Gesagte sollte Sie in die richtige Richtung führen.

Wahrscheinlich möchten Sie Ihr VCS um die Datei zu ignorieren. Andererseits möchten Sie vielleicht, dass ein Skelett der Datei oder eines mit vernünftigen Standardeinstellungen (letzteres gilt natürlich nicht für Anmeldedaten) versioniert wird. Eine gängige Methode, damit umzugehen, besteht darin, eine Vorlagenkonfigurationsdatei einzuchecken, und die Installationsprozedur kopiert diese Datei an den Speicherort der echten Konfigurationsdatei, wo sie angepasst wird. Dies kann ein manueller oder automatisierter Prozess sein.

(Obwohl etwas nichts mit der Hauptfrage zu tun hat, ermöglicht Ihnen die Einführung einer Konstante für Ihre Umgebung einige andere coole Dinge, wie z ="https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol">SMTP one, aber das geht natürlich auch mit einer Konfigurationsdatei)