MySQL-Zugangsdaten sicher machen // Sicherheitsproblem

Wie ists denn überhaupt möglich dieser Dateien zu lesen sich anzuschauen ohne FTP-Zugriff?
Kann man die Rechte allgemein für alle Ordner und Dateien(also nicht nur die Config.php) auf 640 oder 600 setzen oder kann dies zu Problemen führen?
 
Hi,

ich würde die Verzeichnisse schon der Reihe nach durchgehen und Schritt für Schritt die Rechte anpassen und danach natürlich ausführlich testen (Beispiel: ein Cache-Ordner / ein Ordner für Uploads muss natürlich vom www-data auch beschrieben werden)

Ausserdem muss bei Verzeichnissen nicht nur das r-Bit gesetzt sein, sondern auch das x-Bit (r-x, Lesen + Ausführen, oktal also 5).

Gruß
BK
 
Hmm also Dateien welche von der Scriptlogik her beschrieben werden und Ordner welcher Scriptbedingt zb durch Uploads oder Cache befüllt werden, sollten also ihre Rechte auf 777 behalten? Verstehe ich das so richtig?

Kann man sich das mal irgendwo näher anschauen? Nen TUT oder so?
 
Hi,

777 ist imho schon wieder zu offen, hier darf ja jeder auf dem System rein schreiben. Wenn der Ordner dem Benutzer www-data gehört, dann reicht es, wenn nur der Besitzer da rein schreiben darf. Das heißt Standardmäßig soll keiner schreiben dürfen, nur bei den speziellen Verzeichnissen halt der Webserver. Sprich: 750 oder 700.

Gruß
BK
 
naja also php myadmin kann ich ja wohl kaum deinstallieren? das ja bei mir fest auf dem Server?

Ich kann doch mit speziellen Programmen, den ganzen Inhalt der auf dem FTP liegt ganz normal ohne Zugangsdaten herunterladen? Somit auch meine Config.php? Wenn ich die dann auf meinem Rechner öffne, dann hab ich doch einblick in die Datei? z.B. mit WinHTTrack?

Und das will ich umgehen? Da bringen mir doch Rechte auch nix?
 
Zuletzt bearbeitet:
Das nennt man dann hacken. Ansonsten wenn du auf einen FTP-Server willst (Bsp.weise mit Filezilla), dann brauchst du einen Zugangnamen und Passwort.
 
Hallo,

phpmyadmin bietet eine direkte Schnittstelle zum MySQL Server. Dieser hört normalerweise nur auf Verbindungen von 127.0.0.1 und ist von aussen nicht erreichbar.

Hast du nun phpmyadmin installiert, dann kann ein böswilliger Benutzer entweder ausgespähte Zugangsdaten oder einfach durch bloßes Ausprobieren auf die Datenbank zugreifen. So kann er sich dann in Ruhe in Backup aller Daten ziehen, praktisch in jedem Format dass er haben will. So geschehen bei bsmparty... Da hat der Angreifer über ein Bild-Upload Script eine PHP-Datei hochgeladen, mit dieser die config.inc.php ausgelesen und dann gemütlich über phpmyadmin die Userdatenbank heruntergeladen.

Daher: phpmyadmin von einem Produktivsystem deinstallieren!

Gruß
BK
 
Hallo,

was Du machen kannst oder auch nicht, hängt auch von Deinem Server/Webspace ab.

Wenn o.g. Angreifer über ein Upload-Script Code ausführen konnte, dann doch wohl nur, weil das Script schludrig programmiert war. Wenn ich den MIME-Type einstelle, ggf. auch noch die Dateiendungen filtere und via .htaccess Direkaufrufe aus dem Upload-Ordner umbiege, sollte wohl nicht mehr viel passieren können. Wenn er die config.inc.php auslesen konnte (also beliebigen Code auf dem Server ausführen kann), hätte er auch bei deinstalliertem phpmyadmin mit einem Dump-Programm die Datenbank auslesen können. Das Problem ist in dem Fall nicht phpmyadmin sondern schlechte Programmierung. Oder (mindestens genauso gefährlich) luschige Passwörter.

Aber kommen wir kurz auf die .htaccess zu sprechen. Nehmen wir an, Dein Script liegt im Ordner "includes", dann kannst Du den Zugriff über die URL folgendermaßen unterbinden:
PHP:
RewriteEngine On
RewriteBase /
RewriteRule includes /index.php [R=301,L]
Wer immer jetzt versuchen würde, über die URL Deine config aus "includes" aufzurufen, landet auf Deiner Startseite (hier index.php, muss also z.B. Deine Startseite drinstehen; Du kannst ihn auch ganz woanders hinschicken :-)
Voraussetzung ist aber, dass Dein Provider auch das Apache mod_rewrite-Modul über die httpd.conf eingebunden hat. Ferner muss hier auch "Allow Overrides All" und "Allow From All" gesetzt sein. Bei einem eigenen Rootserver kannst Du das selber machen, bei V-Servern oder Webspace sind die Aussichten nicht mehr ganz so rosig, musst Du halt Deinen Provider fragen oder testen, was geht.

Dieses HTTrack kenne ich nicht, aber wenn es sich dabei um ein Programm handelt, das Webseiten grabben soll, musst Du Dir auch keine Sorgen machen. PHP wird immer auf dem Server geparst und interpretiert, am Ende wird nur der HTML-Code ausgeliefert. Der Browser selber versteht kein PHP. Einzige Chance wäre vielleicht (hier muss ich jetzt mutmaßen, denn mir ist das in den ganzen Jahren noch nie passiert), der PHP-Interpreter auf dem Server hätte seinen Geist aufgegeben. Aber selbst dann gäbe es keinen Nutzen, selbst wenn man Deine Passwörter kennen würde: Ohne PHP kein Mysql. Das würde nur gehen, wenn man gleichzeitig Shell-Zugriff auf Deinen Server hätte und z.B. über mysqladmin auf die Daten zugreifen würde. Aber an dem Punkt wäre sowieso alles zu spät.

Mach lieber Deine Zugangsarten mit komplizierten User- und Passwörtern sicherer, benutze (wenn's geht) ssh anstatt FTP (dann am besten ganz abschalten) und programmiere sauber: Keine ungeprüften Inhalte von außen zulassen, kritische PHP-Funktionen wie z.B. exec() und Einstellungen wie "allow_url_include" abschalten (wenn nicht von Hause aus schon geschehen), eigene Fehlerbehandlungsroutinen und auf dem Produktivsystem "DisplayErrors" abschalten (ich staune immer wieder, auf wie vielen Seiten das noch funktioniert. Dabei könnte man das, selbst wenn man keinen Zugriff auf die php.ini hat das per iniset() einstellen).

Greetz
cw
 
Vielen Dank für eure Antworten.

Ich hab es endlich geschafft, das alles umzusetzen.

Jetzt muss ich kurz vom Thema weg (ist aber ähnlich).

Ich versuche gerade mein Register Script, sicher zu machen, vor Injektions.
Die Variablen werden dann in eine MySql Tabelle gespeichert:

PHP:
$username = strtolower(preg_replace("/[^A-Za-z0-9]/", "", $_POST['username'])); 
	$schuhe = preg_replace("/[^A-Z a-z0-9]/", "", $_POST['schuhe']); 
	$vorname = preg_replace("/[^A-Z a-z0-9]/", "", $_POST['vorname']); 
	$nachname = preg_replace("/[^A-Z a-z0-9]/", "", $_POST['nachname']);
	$strasse = preg_replace("/[^A-Z a-z0-9]/", "", $_POST['strasse']); 
	$wohnort = preg_replace("/[^A-Z a-z0-9]/", "", $_POST['wohnort']);
	$sex = preg_replace("/[^A-Z a-z 0-9]/", "", $_POST['sex']); 
	$age = preg_replace("/[^A-Z a-z 0-9]/", "", $_POST['age']);
	$koerper = preg_replace("/[^a-z/]", "", $_POST['koerper']); 
	$groesse = preg_replace("/[^0-9]/", "", $_POST['groesse']); 
	$gewicht = preg_replace("/[^A-Z a-z0-9]/", "", $_POST['gewicht']); 
	$konfektion = preg_replace("/[^A-Z a-z0-9]/", "", $_POST['konfektion']); 
	$email = stripslashes($_POST['email']);
	$email = strip_tags($email);
	$email = mysql_real_escape_string($email);
	$password = preg_replace("/[^A-Z a-z 0-9]/", "", $_POST['password']);

ich denke an der Email wirds ein Problem geben?

Danke fürs drüberschauen.
 
Hi,

warum so kompliziert mit preg_replace()? Ein "normales" mysql_real_escape_string()" reicht bei allem aus, oder du arbeitest mit PreparedStatements.

Gruß
BK
 
Zurück