php/ mysql und Passwoerter

R

rikola

Foren Gott
Hallo,

mit PHP hat man ein nettes Web-Interface zu (my)sql. Ich habe folgendes Verstaendnisproblem: Wenn die Datenbank Passwort-geschuetzt ist, muss das PHP-Skript ja das Passwort irgendwoher haben. Ist es sicher, dies im html-tree innerhalb des Web-Interfaces zu speichern? Bekommt man es dann nicht mit 'wget'? Oder wie bringe ich sonst auf sicherem Wege das Passwort fuer die Datenbank bei?
 
Zuletzt bearbeitet:
das kommt darauf, an, wie Du es abspeicherst.

eine rein .txt z.B. kann man herunterladen - also unsicher.
einen .php z.B. würde erst interpretiert - wenn da also das PW nicht ausgegeben wird sondern nur in einer Variable gespeichert und bei korrekter Serverkonfiguration also kein Problem.

Da das meist noch includet wird kann man auch mit .htaccess z.B. noch was machen.

Schau Dir einfach mal entsprechende Beispiele an, wie es dort gelöst wird - phpbb, phpmyadmin, ...
 
Normal wird um ein Password zu speichern immer eine PHP Datei genommen. Also sowas wie config.inc.php. Der Inhalt sieht dann Ungefähr so aus:
PHP:
<?php
   $user = "";
   $password = "";
   $database = "";
   $host = "";
?>
und beim herstellen der Verbindung sieht das dann wie folgt aus:
PHP:
<?php
   include_once('config.inc.php');
   $link = mysql_connect($host, $user, $password);
   [...]
   unset($user, $host, $password, $database);
?>
wichtig ist danach die Variablen wieder zu löschen, das die nicht irgendwann noch unerlaubt ausgelesen werden können.
Kann man bestimmt auch anders/besser lösen (zB in ein Array packen). Aber das ist so die gängigste Lösung.

//edit
Nein, mit wget kann man es nicht bekommen, weil wget das gleiche Vorgesetzt bekommt wie ein normaler Browser.
 
Zuletzt bearbeitet:
Danke, v.a. an sim4000, das ist ein sehr hilfreiches Stueck Code. Wie lange bleibt die mysql-Datenbank dann offen, v.a., wenn zum Beispiel die Verbindung unterbrochen wird? Ich nehme an, sowas muesste man dann ueber Cookies loesen, was ja dann eine ganz andere Geschichte ist...


Danke an beide nochmals.
 
Zuletzt bearbeitet:
Benutzerdaten in Cookies schreiben ist ganz böse! Die Page Besucher können ja die Cookies auslesen. (va im Firefox geht das sehr gut)

Löschen von Variablen: http://de3.php.net/unset (wie oben in meinem Codeschnipsel)
Die Verbindung bleibt so lange offen, wie du $link mitnimmst. Das ist ja deine Verbindung zur Verbindung.
Wenn die Verbindung aufgebaut ist, kannste die Variablen einfach löschen. Hast die Benutzerdaten ja schon mysql_connect(); übergeben. Also werden die Variablen überflüssig und zu einen Sicherheitsrisiko.

Zum Thema unterbrochene Verbindung: Dazu darf es nicht kommen. Gängige Lösung ist es, die Verbindung einmal aufzubauen, dann die Zugangsdaten zu löschen und diese Verbindung die ganze Zeit aufrecht zu halten.

Die Verbindung bleibt den ganzen Seitenaufbau über offen. Wenn wieder ein Link geklickt wird, oder what ever, wird die Verbindung wieder neu aufgebaut. Dann geht also der Spaß von vorne los.
 
Alternativ auch über einen "Singleton" - also daß die gesamte Applikation eine gemeinsame Datenbankverbindung benutzt - ist aber Programmieraufwand.

Übrigens: Achte darauf, daß Du die config.inc.php auch immer so benennst, daß sie auch wirklich vom php-Parser erkannt und verarbeitet wird. Und auch keine Backups davon anlegen - config.inc.php.old oder config.inc.php_20080101 sind auf live-Systemen sehr unschön und ein beliebtes Sicherheitsloch...
 
Einfache Lösung:

Konfigurationsdateien mit Passwörtern ausserhalb des DocumentRoot ablegen und mittels file_get_contents() einlesen. Dann bekommt man sie nicht direkt über den Webserver.
 
Oder wenns ne PHP Datei ist einfach mit include. ;)
Dann hat man gleich die Variablen.

Das mit include hatte ich bereits versucht. Damit kam ich nicht an eine Datei ausserhalb der Wurzel des Dokumentbaumes heran - macht ja auch Sinn, da das ganze unter dem Webserver laeuft, der ja eigentlich nichts ausserhalb der Wurzel sehen sollte. Ich werde mir mal anschauen, ob man das Problem mit file_get_content nicht hat. Danke - das waere die mir liebste Loesung.
 
Das mit include hatte ich bereits versucht. Damit kam ich nicht an eine Datei außerhalb der Wurzel des Dokumentbaumes heran - macht ja auch Sinn, da das ganze unter dem Webserver laeuft, der ja eigentlich nichts ausserhalb der Wurzel sehen sollte. Ich werde mir mal anschauen, ob man das Problem mit file_get_content nicht hat. Danke - das waere die mir liebste Loesung.

Nein.
Mit include greifst du auf das Filesystem zu, wenn der Server nicht anständig konfiguriert ist, kann man sogar die /etc/passwd auslesen.
Das wird an den Berechtigungen liegen das dass nicht geht. musste mal die chmods prüfen.
PHP:
include("/var/www/nicht_htdocs/config.inc.php");
So muss es gehen.
 

Ähnliche Themen

Werkstudent / in als PHP Developer

Senior PHP Developer in Vollzeit (m/w)

PHP Developer in Vollzeit (m/w)

Werkstudent/ in als Frontend Web Developer

Senior PHP Developer (m/w) in Vollzeit

Zurück
Oben