Mailinglisten-Archive |
Armin Briatta wrote:
> Hallo Yannik,
>
> Yannik Hampe schrieb:
>
>> Nein, denn:
>> Wenn der Dateiname vom Client ein null-Byte enthält (xyz.php%00.txt)
>> Dann wird dir php bestätigen, dass der Dateiname auf .txt endet. Beim
>> verschieben der Datei geht alles ab dem nullbyte verloren.
>> Um das mal zu verdeutlichen:
>> ----
>> %php -a
>> Interactive shell
>>
>> php > echo bin2hex("a\0b");
>> 610062
>> php > var_dump(file_exists("a"));
>> bool(false)
>> php > touch("a\0b");
>> php > var_dump(file_exists("a"));
>> bool(true)
>> ----
>> Wenn du kannst solltest du die Dateien in einem Ordner speichern, der
>> für den Webserver nicht zugänglich ist und die Datein umbenennen (zum
>> Beispiel mit Hilfe einer id aus einer DB oder mit uniqid. Oder du
>> wendest einmal rawurlencode() auf die Funktion an:
>> ----
>> php > echo rawurlencode("a\0b");
>> a%00b
>> ----
>
>
> das mit dem null-Byte habe ich jetzt hoffentlich verstanden. Den
> Vorschlag mit rawurlencode() noch nicht. Geht es nicht darum, das
> null-Byte zu entfernen?
Ja, oder eben das null-Byte durch etwas anderes zu ersetzen.
Gleichzeitig werden bei urlrawencode natürlich auch noch so unpraktische
Sachen wie Leerzeichen eliminiert.
>
> Könnte ich nicht auch den string aus $_FILES['filename']['name'] in
> einer Variaben speichern, diese daraufhin abklopfen, ob ein solches
> null_Byte enthalten ist und dann entsprechend die weitere Verarbeitung
> mit move_uploaded_file untersagen?
Natürlich :-).
>
> Liebe Grüße
> Armin
Yannik
php::bar PHP Wiki - Listenarchive