PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Upload script Fehler? case "multipart/form-data



Julian100200
05.07.2009, 23:55
Hallo,
ich habe eine Upload seite Für einen FTP server mit PHP gemacht (gesucht),
Dieser beschränkt sich jedoch leider auf die haupt Bild-endungen, so dass ich z.B. keine exe Dateien Hochladen kann!

Wie kann ich dass auf alle Dateiendungen (auch dateien ohne Endung) erweitern)

Hier der PHP-Teil der Seite:


<?php
if (isset($_FILES['datei']))
{
switch($_FILES['datei']['type'])
{
case "image/gif" : $error = false;
break;
case "image/jpeg" : $error = false;
break;
case "image/png" : $error = false;
break;
default : $error = true;
break;
}

if(file_exists(htmlspecialchars(basename($_FILES['datei']['name'] ))))
$error = true;


if(!$error)
{
if(move_uploaded_file($_FILES['datei']['tmp_name'], htmlspecialchars(basename($_FILES['datei']['name'] ))))
echo "<br /><font color=green><b>Die Datei (".htmlspecialchars(basename($_FILES['datei']['name'] )).") wurde erfolgreich hochgeladen</b></font><br />";
else
echo "<br /><font color=red><b>Es gab einen Fehler beim Hochladen der Datei: (".htmlspecialchars(basename($_FILES['datei']['name'] )).")</b></font><br />";
}
else
echo "<br /><font color=red><b>Die Datei (".htmlspecialchars(basename($_FILES['datei']['name'] )).") entspricht nicht den Normen bzw. ist schon vorhanden!<br /> Erlaubt sind nur: gif, jpg, jpeg, jpe oder png</font></b><br />";
}
?>Ich habe das auch schon mit:

case "multipart/form-data" : $error = false;
versucht!

VeN0m
06.07.2009, 18:06
Wie wäre es, wenn Du den Dateinamen beim "." aufsplittest und dann danach gehst?

z.B.



$tmp = explode(".",$_FILES['datei']['name']);

switch($tmp[1]) {

case "exe":

$error = false;

break;

}


Weiß nur geraden icht genau, wie der korrekte Arraywert für den Dateinamen ist.
Aber das Prinzip sollte klar sein.
$tmp erhält den Wert, der beim Punkt gesplitteten Teile.
bla.exe --> $tmp[0] = bla, $tmp[1] = exe. Wenn Du nun $tmp[1] switchest kannst Du mit jeder Dateiendung arbeiten.

Da es aber, wie Du sagtest auch Dateien ohne Endung gibt kannst Du mit case "": arbeiten (denke ich mal). Dann kannst Du zusätzlich mit is_file() arbeiten.

Siehe auch bei PHP.net bei explode und is_file ;).

War das das, was Du suchst?

litlein
06.07.2009, 18:20
Ich denke, er will, dass er einfach nur alle Dateien hochladen kann. Zurzeit funktionieren nur Bilder. Im letzten Switch Teil das default ist der entscheidende Punkt. Hier werden alle anderen Dateitypen "geblockt". Wenn du alle erlauben willst, änderst du einfach das letzte

default : $error = true;
in ein

default : $error = false;

Das ist nicht die schönste Methode, da jetzt jede Menge überflüssiger Code übrig bleibt, aber es funktioniert ;)

Julian100200
06.07.2009, 23:36
So ok litlein genau das hab ihc sesucht DANKE!!! Das es an einem Wort lag tz tz tz.
Hier der Link zur Seite
www.databasecrew.tk

Danke nochmla an euch für die Hilfe

n00kie
07.07.2009, 00:30
Naja ziemlich sicher ist das ganze nicht, da man ohne Probleme eine Shell hochladen könnte. Fall's du nicht weiss, was ich meine schau mal hier (http://free-hack.com/showthread.php?t=31075).

Julian100200
07.07.2009, 01:33
Ähm... was sit dieses "shell" und wie kann ich das verhindern, ich hab mit mla die defailt.index angeschaut und da ist kein unterschied, oder?

EDIT: ich hba zur problem lösung erstmal was anderes hochgeladen^^