Array an function übergeben

mr_floppy

Mitglied
Hi,

ich habe eine Function für ein Uploadscript geschrieben die überprüfen soll ob die Endung der hochgeladenen Datei richtig ist. Die erlaubten Endungen sind in einem Array und sollen an die Function übergeben werden.

PHP:
//Erster Parameter enthält Dateienung der Hochgeladenen Datei, zweiter enthält Anzahl der erlaubten Endungen und dritter die erlaubten Endungen
function check_file_extension($extension, $extensionscount, $allowedfileextensions)
{
	for ($i = 0; $i < $extensionscount; $i++)
	{
		if ($extension == $allowedfileextensions[$i])
		{
			$i = count($extensionscount);
			return true;
		}
		else
		{
			return false;
		}
	}
}

PHP:
$allowedextensions = array("jpg","png","gif");       //Erlaubte Dateiendungen
$uploadedfile = $_FILES['file']['name'];    
$fileextension = explode(".", $uploadedfile);    //$fileextension[1] enthält die Endung

//Aufruf der Function
if (check_file_extension($fileextension[1], count($allowedextensions), $allowedextensions) == true)
		{

Die Function gibt immer false zurück, ich glaub ich habe das Array faslch übergeben?!


MfG
 
Den Filetyp kannst du anhand von $_FILES['file']['type']; testen
da kommt dann sowas wie "image/jpg" raus, so kannst du die Abfrage viel einfacher gestalten.

Ich verweise mal hierauf
der letzte Post von mir birgt deine Lösung;)

Zudem kannst du auch ein Pdf in jpg umbenennen, es ist aber trotzdem ein Pdf, wenn du es hochlädst, dem Type-Attriubut von Php nach, aber nicht nach deiner Prüfung.
So kann Schadcode auf den Server kommen.
 
Zuletzt bearbeitet:
Das Problem ist, dass bei dir die Schleife nur einen Durchlauf macht und danach wegen return vorzeitig abgebrochen wird.
PHP:
function check_file_extension($extension, $extensionscount, $allowedfileextensions)
{
	for ($i = 0; $i < $extensionscount; $i++) {
		if ($extension == $allowedfileextensions[$i]) {
			return true;
		}
	}
	return false;
}

Du kannst aber auch einfach die in_array()-Funktion verwenden:
PHP:
if (in_array($fileextension[1], $allowedextensions)) {
	// …
}
 
Den Filetyp kannst du anhand von $_FILES['file']['type']; testen
da kommt dann sowas wie "image/jpg" raus, so kannst du die Abfrage viel einfacher gestalten.

Das Problem dabei ist (ich weiß zwar nicht wie, aber es geht), dass man den MIME-Type irgendwie faken kann. Ich hatte mal eine PHP-Shell auf dem Server, weil ein Upload-Script nur das abgefragt hat.

Zudem kannst du auch ein Pdf in jpg umbenennen, es ist aber trotzdem ein Pdf, wenn du es hochlädst, dem Type-Attriubut von Php nach, aber nicht nach deiner Prüfung

Ich prüfe beides, ist gesünder so... ;)

Du kannst aber auch einfach die in_array()-Funktion verwenden:

Man, ich bin aber auch manchmal eine Schlafmütze! :rolleyes:
So mache ich das jetzt auch.

$i = count($extensionscount);

Das ist auch total überflüssig (und falsch) fällt mir gerade auf.

Danke euch beiden.


MfG
 
Den Dateityp empfehle ich, da es sich um Grafiken handelt, per [phpf]getimagesize[/phpf] zu Prüfen...mir ist nicht bekannt, dass man diese Methode überlisten kann.
 
Auch getimagesize() kann überlistet werden. Deswegen sollte sowohl die Dateierweiterung als auch der tatsächliche Dateityp geprüft und miteinander verglichen werden.
 
Die meisten Grafikformate erlauben Bereiche für Kommentare und Ähnliches, also Nicht-Grafikdaten. Dort kann beispielsweise auch PHP-Code untergebracht werden, der – falls als Datei mit „.php“-Dateierweiterung hochgeladen und unverändert von außen zugänglich – schließlich auch ausgeführt werden kann.
 
Gibt es dafür irgendwo ein Beispiel? Mich würde brennend interessieren wie das aussehen soll. Wenn es nicht fü die Öffentlichkeit bestimmt ist, geht auch eine PN.

btw: Ich markiere mal als erledigt.


MfG
 
Zurück