Willkommen in der Webstatt Zum Webstatt Blog und Stories
Cpt.Iglo am 02.10.07 20:35

Hallo,
Ich habe mal wieder ein Problem und zwar möchte ich die Dateien, die von einem User hochgeladen werden automatisch umbennen.

Hier mal ein Beispiel wie es sein sollte:

User lädt Datei "wörter.txt" hoch -> php wandelt das Wort vor der speicherung in "woerter.txt" um -> Alle sind zufrieden =)

Bei mir ist das lieder aber so:

User lädt Datei "wörter.txt" hoch -> php wandelt das Wort vor der speicherung nicht in "woerter.txt" um -> Niemand ist zufrieden...

//Funktion zum umwandel//
function umlaute($text)
{
$suchen = array ('ä', 'ö', 'ü', 'ß', 'Ä', 'Ö', 'Ü');
$ersetzen = array ('ae', 'oe', 'ue', 'ss', 'ae', 'oe', 'ue');
$umgewandelt = str_replace($suchen, $ersetzen, $text);
return $umgewandelt;
}
//Umlaute aus Dateinamen ersetzen//
$dateiname1 = umlaute($_FILES['datei1']['name'])


Problem ist, dass die Funktion sonst klappt.
So erzeugt folgender Code:
$meintext = "Schöne Beiträge werden von niemanden verfasst.";
echo umlaute($meintext);

Die Ausgabe: Schoene Beitraege werden von niemanden verfasst.

Problem ist halt - wie oben beschrieben -, dass die Umlaute bei hochgeladenen Datein nicht ersetzt werden.

MFG,
Tobi

netcup.de Warum gibt es hier Werbung?
nuit nuit am 02.10.07 21:08

was ist dann dateiname1? was verwendest du um die Datei zu generieren?
das ist ja nur die funktion, und die funktioniert ja

wie benennst du die dateien um? fragen über fragen :D

Cpt.Iglo am 02.10.07 21:19

Dateien werden wie oben beschrieben vom User hochgeladen...Ein ganz normales Uploadformular ;)

Hier wird die funktion angewandt:

$dateiname1 = umlaute($_FILES['datei1']['name']);

MFG,
Tobi

Broken Sword Broken Sword am 02.10.07 23:08

Dann brauchen wir meeeeeeeehhhr... meeeeehhhrrr Code ^^
Wenn es anders Funktioniert, müsste es ja auch so gehen.

nuit nuit am 02.10.07 23:35

Quote
Original von Cpt.Iglo
Dateien werden wie oben beschrieben vom User hochgeladen...Ein ganz normales Uploadformular ;)

Hier wird die funktion angewandt:

$dateiname1 = umlaute($_FILES['datei1']['name']);

MFG,
Tobi

es geht nicht um die anwendung der funktion.....ich bin mir sicher...seeehr sicher, wenn du $dateiname1 ausgibst, kommt da der umagewandelte Name raus...
ich denke später verwendest du nicht dieses umgewandelten Namen, sondern wieder was von diesem superglobalem Hash $_FILES :D und zwar wieder den Namen...und dann hast du natürlich den alten nicht umgewandelten Namen drin...

aber weil wir den Code nicht haben....können wir dir das nicht sagen

also kurzzusammenfassung: An dem Code, der oben gepostet ist, liegt es nicht ;) es muss irgendwo danach kommen....schätzungsweise beim abspeichern der Datei

nuit

Cpt.Iglo am 03.10.07 00:11

Habe die Ausgaben in den Echo Befehlen mal der Überischt halbar gekürzt :).

Die Funktion wird im Quelltext schon vorher deklariert.

...
...
...
//Datei1 uploaden
$dateityp1 = $_FILES['datei1']['type'];
$dateigroesse1 = $_FILES['datei1']['size'];
$datei1 = $_FILES['datei1']['tmp_name'];
$dateiname1 = umlaute($_FILES['datei1']['name']);
if(!empty($datei1)) {
$dateiauftrag = $dateiauftrag+1;

if($dateityp1=="php" or $dateityp1=="application/octet-stream" or $dateiname1==".htaccess") {
echo "Sie haben versucht ein unerlaubtes Dateiformat hochzuladen!";
} else {
if($dateigroesse1>5200000) {
echo "Die Datei ist größer als 5MB.";
} else {
$ziel = $ordner."/".$dateiname1;
if(move_uploaded_file($datei1, $ziel)) {
$sql = "INSERT INTO `dateien` ( `id` , `username` , `dateiname` , `dateigroesse` , `erstelldatum` , `ip` , `dateipfad`)
VALUES ('','$queryname','$dateiname1','$dateigroesse1','$datum','$ip','$ordner')";
$speicherst = mysql_query($sql) or die (mysql_error());
echo"Datei ".$dateiname1." hocheladen";
$dateiuploaded = $dateiuploaded+1;
} else {
echo"Fehlermeldung halt";
}
}
}
}
...
...


PS//Ich weiß...Das mit der Dateitypüberprüfung muss ich noch richtig machen ;)...hatte da keien lsut zu, weil ich erstmal das mit den Sonderziechen gereglt haben möchte :)

hoffie hoffie am 03.10.07 16:04

WAH!
Bau da bitte ordentliche Überprüfungen ein ($_FILES[x]['type'] ist vom Client und NICHT vertrauenswürdig!). Mit dem jetzigen Code kann man Dateien mit beliebigen Dateinamen (== auch .php) hochladen. Selbst wenn das Problem behoben ist kann man noch in der DB rumpfuschen, weil dein SQL-Query falsch und anfällig für SQL-Injections ist.

Relativ schöne Zusammenfassung über SQL-Injections: http://webappsec.org/projects/articles/091007.shtml

Cpt.Iglo am 07.10.07 14:19

Quote
Original von hoffie
WAH!
Bau da bitte ordentliche Überprüfungen ein ($_FILES[x]['type'] ist vom Client und NICHT vertrauenswürdig!). Mit dem jetzigen Code kann man Dateien mit beliebigen Dateinamen (== auch .php) hochladen. Selbst wenn das Problem behoben ist kann man noch in der DB rumpfuschen, weil dein SQL-Query falsch und anfällig für SQL-Injections ist.

Relativ schöne Zusammenfassung über SQL-Injections: http://webappsec.org/projects/articles/091007.shtml


-.- ... und wie kann man das ordentlich "Überprüfen"...
Nein man kann keine .php Dateien hochladen - andere überprüfungsmehtode der dateitypen ahbe ich bereits erledigt.
Ja die SQL-Query habe ich auch schon "abgesichert" mit dem üblichen mysql_real_escape_string(). Trotzdem ist das Problem ja um das es hier geht warum die funktion nicht "wirkt"...

MFG,
Tobi

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt