Webstatt.org - Community seit 2006 - 2012 (2024?)

Dateiname kann nicht umbenannt werden.

user-156
02.10.2007 18: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 ('ä', 'ö', 'ü', 'ß', 'Ä', 'Ö', 'Ü'zwinkern;
$ersetzen = array ('ae', 'oe', 'ue', 'ss', 'ae', 'oe', 'ue'zwinkern;
$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

Avatar user-271
02.10.2007 19: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 Fettes Grinsen

#!/bin/bash
traurig){ neutral:& };:
user-156
02.10.2007 19:19

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

Hier wird die funktion angewandt:

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

MFG,
Tobi

Avatar user-142
02.10.2007 21:08

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

Avatar user-271
02.10.2007 21:35

Original von user-156
Dateien werden wie oben beschrieben vom User hochgeladen...Ein ganz normales Uploadformular zwinkern

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 Fettes Grinsen 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 zwinkern es muss irgendwo danach kommen....schätzungsweise beim abspeichern der Datei

nuit

#!/bin/bash
traurig){ neutral:& };:
user-156
02.10.2007 22:11

Habe die Ausgaben in den Echo Befehlen mal der Überischt halbar gekürzt lächeln.

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"zwinkern {
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'zwinkern";
$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 zwinkern...hatte da keien lsut zu, weil ich erstmal das mit den Sonderziechen gereglt haben möchte lächeln

Avatar user-194
03.10.2007 14: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

user-156
07.10.2007 12:19

Original von user-194
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