Wie kann ich die MySQL Daten (IP, Port, Username, Password, Datenbank) professionell sichern?
D. h. ohne, dass man ziemlich leicht die MySQL Daten auslesen kann. Ich weiß nicht ob meine bisherige Methode sicher ist (wäre super, ob mir das einer sagen könnte):
In einem Ordner eine PHP Datei namens dbconfig, in welcher folgender Code steht (MySQL Daten zensiert):
<?php
$con = mysqli_connect("IP/localhost","USERNAME","PASSWORD") or die("Fehler bei Datenbankverbindung.");
mysqli_select_db($con,'DATABASE');
?>
4 Antworten
Du kannst per htaccess den Zugriff auf das Directory sperren indem sich die Nutzerdaten befinden.
Selbst wenn der Webserver den PHP Code ausgeben sollte kann er damit nicht den Inhalt der Datei mit den Passwörtern ausgeben, PHP selbst ist das egal und es kann alle Dateien in diesem Ordner sehen und einbinden.
In der Regel sichert man da nicht zusätzlich, die Anmeldedaten stehen meist fest in der PHP Datei aber man trennt den Source i.d.R. vom Einstiegspunkt, so dass der Benutzer keinen Zugriff hat auf den Source, wenn z.B. mal was an der Webserver Konfiguration nicht stimmen sollte und er den puren PHP Quellcode sehen sollte.
Das läuft dann meist über die Verzeichnisstruktur, sprich du hast z.B. einen Public Order, auf selber Ebene deine einzelnen Source oder Module Ordner, so dass der Einstiegspunkt vor deinen relevanten Files liegt. Der Webserver zeigt auf den Public Ordner und der Benutzer kann keine Dateien oberhalb dessen direkt öffnen, das kann nur über die Includes auf dem Server geschehen.
Anschließend lädt die Index.php z.B. dann eine Datei die vom Namen keine großen Implementationsdetails verrät, wie eine app.php oder bootstrap.php die sich oberhalb des Public Ordners befindet. Von dort aus geht es dann entsprechend weiter mit der Programmlogik.
Es kann dann also keiner auf die anderen PHP Dateien zugreifen, die z.B. die Anmeldedaten beinhalten. Wenn der PHP Interpreter aus irgendeinen Grund nicht feuert z.B. nach einem Webserver Update, wenn was schief gelaufen ist, dann sieht der Benutzer maximal, dass eine bootstrap.php eingebunden werden sollte. Er sieht keine Anmeldedaten und weiß noch nicht mal wo es welche Dateien geben könnte, welche Datenbank verwendet wird, welche bekannten Schwachstellen angreifbar wären usw.
Solang die SQL Daten fest im PHP Skript sind und nicht irgendwie extern aus einer normalen Textdatei o.Ä. geladen werden, sind sie sicher. Es ist unmöglich, den Inhalt einer PHP-Datei bzw. eines PHP Skripts von extern auszulesen (außer PHP macht auf deinem Server Probleme und gibt den Code auf dem Bildschirm aus, statt ihn zu parsen und auszuführen... Das wäre dann aber doch eher die Seltenheit).
Kurzum, sehr viel sicherer als so geht nicht.
Wenn du tatsächlich mehrere Webserver hast, definitiv auf jedem Server einzeln hochladen. Wenn du einen Server (Rootserver / VPS / wie auch immer) hast, auf welchem du selbst mehrere Webserver verwaltest, ließe sich die Datei auch ein einziges Mal anlegen und dann immer wieder mit einem relativen Pfad darauf verweisen. Da ich aber davon ausgehe, dass du tatsächlich mehrere verschiedene Webserver meinst, solltest du die Datei tatsächlich mehrfach hochladen. Theoretisch könntest du auf einem der Server ne API schreiben, welche die MySQL Daten ausgibt (ggf. mit einem Passwort / einer Signatur o.Ä.), aber da läufst dann eben Gefahr, dass jemand diese API findet, das Passwort / den Signaturalgorithmus knackt und sich dadurch Zugriff auf die SQL Daten holt. Kurzum - sein lassen.
Ich habe mal irgendwas mit .htaccess gehört? Kann man da noch irgendetwas machen?
Über eine htaccess könntest du, wenn dein Webserver auf Apache läuft (die meisten Standard-Webhoster), den Zugriff auf bestimmte Unterordner z.B. sperren. Dadurch würde dann zusätzlich verhindert werden, dass man die Daten auslesen könnte, wenn PHP Probleme macht und den Code ausgibt statt ihn auszuführen.
Einfach in deinen PHP-Code fest verankern, dann kann das eh kein Client einsehen.
Wenn du dich vor z.B. jemanden schützen möchtest, der bereits Zugriff auf deine Dateien (auch .php) hat, so könntest du diese mit z.B. ionCube verschlüsseln, damit er beim öffnen der "dbconfig.php" nur verschüsselte Daten sieht.
Auch ein ionCube ist nicht perfekt, und kann decoded werden, aber das ist hier glaube ich ertmal egal, bei der Fragestellung :D
P.S. Wenn du mehrere WebServer hast, dann musst du die .php-File auf jeden Webserver packen, und entsprechend editieren.
MFG xGlumi
und wie würde man es machen, wenn man mehrere Webserver hat? Kommt dann auf jede die PHP Datei mit den MySQL Daten?