phpbar.de logo

Mailinglisten-Archive

[php] Prüfung nach Dateiupload per Formular

[php] Prüfung nach Dateiupload per Formular

Yannik Hampe yannik at cipher-code.de
Don Nov 15 16:06:03 CET 2007



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