Autor |
Nachricht |
Linger
Threadersteller
Dabei seit: 24.05.2007
Ort: Leipzig
Alter: 43
Geschlecht:
|
Verfasst Di 29.05.2007 23:18
Titel PHP: MySQL-Zugangsdaten schützen? |
|
|
Hallo liebe Community!!
Ich habe leider nichts Passendes über die Suche gefunden - falls das Thema dennoch schonmal diskutiert wurde, hier schonmal ein ernst gemeintes "Tschuldigung" vorab...
Nun zum Eigentlichen:
Ich habe eine MySQL-Datenbank-Application mittels PHP realisert und dabei die Zugangsdaten zur Datenbank in einer extra Datei abgelegt, die in etwa so aussieht:
$dbhost='host.zur.db';
$dbuser='username';
$dbpass='password';
...
Diese Datei (PHP) hole ich mir via INCLUDE in das jeweilige Skript und erzeuge dort mein Datenbank-Handle. Das funktioniert auch alles dufte - nun aber das "Problem":
Wie verhindere ich es, dass sich jemand Fremdes diese PHP-Datei mit den DB-Zugangsdaten in ein eigenes Skript INCLUDEd und mittels GET_DEFINED_VARS() meine Daten ausliest??? Wenn auf dem Server des Fremden die Option "Allow_URL_fopen" auf ON gesetzt ist, ist das INCLUDEn meiner Datei ohne Probleme möglich.
Ich weiß, dass diese Art der Zugangsdatenspeicherung gängige Praxis bei PHP-MySQL-Anwendungen ist, aber scheinbar läßt sich das Auslesen irgendwie verhindern - ich habe zumindest im Netz nix gefunden, was ein Hijacking der Daten auf dem von mir beschriebenen Weg bestätigt... (Kann das leider nicht einfach testen, da mein Provider "Allow_URL_fopen" auf OFF gestellt hat.
Ich beschäftige mich erst seit etwa einem halben Jahr mit PHP und habe keine Ahnung, wo ich noch nach einer Antwort auf meine Frage suchen könnte (vielleicht gibts ja für das Problem sogar einen eigenen Begriff...) daher hoffe ich hier auf Lösungsansätze.
Besten Dank schomal vorab und
beste Grüße!!
Linger
|
|
|
|
|
pRiMUS
Dabei seit: 09.09.2003
Ort: Vienna
Alter: 48
Geschlecht:
|
Verfasst Mi 30.05.2007 00:04
Titel
|
|
|
auf servern, wo jedermann ausserhalb seines "home" verzeichnisses daten einlesen kann, würde ich mich eh fern halten.
denn schützen kannst du dich gegen sowas, wenns möglich ist, nicht.
|
|
|
|
|
Anzeige
|
|
|
tacker
Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht:
|
Verfasst Mi 30.05.2007 08:18
Titel
|
|
|
Grundsätzlich ist das gar nicht möglich.
Ruf doch mal deine PHP-Datei mit den Variablen im Browser auf.
Was siehst Du?!
Nix.
Genau das kommt auch beim Angreifer an.
Das gilt natürlich nur, wenn deine Datei auch eine PHP-Endung hat (meist .php).
Wenn Du sowas wie .inc verwendest, wird die Datei nicht automatisch von PHP geparst und wird vom Webserver als reine Text-Datei behandelt.
Desweiteren bringen einem Angreifer die Zugangsdaten nix, da in den meisten Fällen die Datenbank nur Verbindungen vom lokalen Rechner zulässt und nicht von extern.
Zuletzt bearbeitet von tacker am Mi 30.05.2007 08:19, insgesamt 1-mal bearbeitet
|
|
|
|
|
pRiMUS
Dabei seit: 09.09.2003
Ort: Vienna
Alter: 48
Geschlecht:
|
Verfasst Mi 30.05.2007 09:38
Titel
|
|
|
tacker hat geschrieben: | Grundsätzlich ist das gar nicht möglich.
Ruf doch mal deine PHP-Datei mit den Variablen im Browser auf.
Was siehst Du?!
Nix.
Genau das kommt auch beim Angreifer an.
Das gilt natürlich nur, wenn deine Datei auch eine PHP-Endung hat (meist .php).
Wenn Du sowas wie .inc verwendest, wird die Datei nicht automatisch von PHP geparst und wird vom Webserver als reine Text-Datei behandelt.
Desweiteren bringen einem Angreifer die Zugangsdaten nix, da in den meisten Fällen die Datenbank nur Verbindungen vom lokalen Rechner zulässt und nicht von extern. |
soweit ich das verstanden habe, handelt es sich um unerlaubte includes vom selben server aus. da würde das sehr wohl gehen, wenn der entsprechende server, wie angesprochen, schlampig eingerichtet ist, so das ich zb auf dein home verzeichniss zugreifen dürfte - und genau hier liegt der hund begraben, denn gegen sowas kann man sich nicht schützen.
alles andere, wo die dateien über den php interpreter geschickt werden, wird geparsed, und somit hast du natürlich recht, das der php source nicht inzusehen ist, vorrausgesetzt die dateien werden geoparsed (was natürlich auch bei .inc dateien möglich ist, je nach server konfig).
|
|
|
|
|
tacker
Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht:
|
Verfasst Mi 30.05.2007 12:03
Titel
|
|
|
Unerlaubte Includes brauchen aber kein "allow_url_fopen" sondern gehen einfach per include/require.
Von daher dachte ich an fremde Angreifer.
Und da hast Du natürlich recht. Wenn sowas geht, sollte man keine sensiblen Daten haben und bald den Hoster wechseln.
|
|
|
|
|
Linger
Threadersteller
Dabei seit: 24.05.2007
Ort: Leipzig
Alter: 43
Geschlecht:
|
Verfasst Mi 30.05.2007 14:50
Titel
|
|
|
Erstmal besten Dank für die flinken Antworten!!
Leider sind sie nur teilweise zutreffend - wahrscheinlich habe ich mich etwas unglücklich ausgedrückt.
Das „Sicherheitsproblem“ liegt nicht bei meinem Hoster sondern bei dem des (fiktiven) Angreifers:
Nehmen wir mal an, meine Domain ist „sauberedomain.de“ beim Hoster A – dort sind dann die Zugangsdaten zur Datenbank z.B. unter „guestbook/database.inc.php“ abgelegt.
Diese „database.inc.php“ könnte dann, wie eingangs schon mal aufgeführt, so aussehen:
Code: |
$dbhost='host.zur.db';
$dbuser='username';
$dbpass='password';
...
|
Eine Ausgabe erfolgt in dieser Datei nicht.
Nun könnte ein potentieller Angreifer mit der Domain „angreifer.de“ bei Hoster B (mit Allow_URL_fopen=ON) folgendes Skript erstellen:
Code: |
include('http://www.sauberedomain.de/questbook/database.inc.php');
echo 'Host: '.$dbhost.' Username: '.$dbuser.' Passwort: '.$dbpass;
|
Und schon hätte er meine Daten auf dem Präsentierteller.
Hier müsste der Angreifer natürlich noch meine Variablennamen kenn, was ziemlich unwahrscheinlich ist.
Die PHP-Funktion GET_DEFINED_VARS() gestattet es jedoch, alle definierten Varablen eines Skripts auszugeben, ohne deren Namen zu kennen -
und spätestens jetzt könnte der Angreifer sich meine Daten sauber auflisten lassen.
Oder doch nicht???
|
|
|
|
|
tacker
Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht:
|
Verfasst Mi 30.05.2007 15:05
Titel
|
|
|
Linger hat geschrieben: | Nun könnte ein potentieller Angreifer mit der Domain „angreifer.de“ bei Hoster B (mit Allow_URL_fopen=ON) folgendes Skript erstellen:
Code: | include('http://www.sauberedomain.de/questbook/database.inc.php');
echo 'Host: '.$dbhost.' Username: '.$dbuser.' Passwort: '.$dbpass; |
|
Richtig. Bringt ihm aber nix. Da er die Ausgabe deines Webservers included. Und die ist leer, da dein Konfigurations-Script auf .php endet und von deinem Webserver interpretiert wird.
|
|
|
|
|
pRiMUS
Dabei seit: 09.09.2003
Ort: Vienna
Alter: 48
Geschlecht:
|
Verfasst Mi 30.05.2007 15:08
Titel
|
|
|
exakt, alles was irgendwie durch den php interpreter geschickt wird (und das wird zunächst alles, es sei denn man includet direkt auf dem gleichen server) resultiert in blankem html.
|
|
|
|
|
|
|
|
Ähnliche Themen |
WordPress - Zugangsdaten
[WindowsCommander] FTP-Zugangsdaten übernehmen
[PHP + mySQL] Kann Fehler in einer mySQL-Phrase nicht finden
[PHP/MySQL] MySQL Error: 1054, falsche Tabelle ausgewählt?
[MySql]Lost connection to MySQL server during query
[php / mysql] Mysql Daten in php als Link ausgeben
|
|