Asynchrone Prozesse im Browser als Ursache + Ups! Wirklich gefährlich!
bearbeitet von RaketenwilliHm.
Das zeigt leider nicht, ob der Upload noch stattfindet, während auf dem Server schon gezippt wird. Und die gezeigte Warnung
~~~
zip warning: file size changed while zipping
~~~
lässt genau das vermuten.
Es ist also sehr wahrscheinlich so, dass der Upload noch stattfindet, während gezippt werden soll.
Lösung:
- Initiere den Request für das Zippen erst, wenn die Uploads der Filechunks komplett „durch“ sind. (browserseitig, im JavaScript)
- Achte also auch darauf, dass der auf dem Server laufende Prozess (wohl ein **anderes** PHP-Skript!), der die Filechunks zur Datei zusammenfügt (auch das kann etwas dauern), sein „ok“ erst sendet, wenn wirklich alle Befehle darin abgeschlossen sind - insbesondere das Zusammenfügen der Datei wirklich vollständig stattgefunden hat.
~~~PHP,bad
$folder = $_POST["folder"];
~~~
Ich hab jetzt nicht gesehen, dass wirklich etwas passieren kann - aber:
Was passiert, wenn jemand
~~~
../../../../../etc
~~~
sendet? Dann hast Du
~~~
$target_path = "/srv/www/htdocs/test/upload/../../../../../etc"
~~~
oder eben:
~~~
$target_path = "/etc"
~~~
**Alarm!**
**Lege sowas auf dem Server fest und schreibe es in eine Session. Nicht per POST oder GET vom Browser nehmen! NeverEver!**
Das geht zwar hier aus einem anderen Grund schief (weil dann das zip-File nicht geschrieben werden kann) aber das Eis ist zu dünn.
Asynchrone Prozesse im Browser als Ursache + Ups! Wirklich gefährlich!
bearbeitet von RaketenwilliHm.
Das zeigt leider nicht, ob der Upload noch stattfindet, während auf dem Server schon gezippt wird. Und die gezeigte Warnung
~~~
zip warning: file size changed while zipping
~~~
lässt genau das vermuten.
Es ist also sehr wahrscheinlich so, dass der Upload noch stattfindet, während gezippt werden soll.
Lösung:
- Initiere den Request für das Zippen erst, wenn die Uploads der Filechunks komplett „durch“ sind. (browserseitig, im JavaScript)
- Achte also auch darauf, dass der auf dem Server laufende Prozess (wohl ein **anderes** PHP-Skript!), der die Filechunks zur Datei zusammenfügt (auch das kann etwas dauern), sein „ok“ erst sendet, wenn wirklich alle Befehle darin abgeschlossen sind - insbesondere das Zusammenfügen der Datei wirklich vollständig stattgefunden hat.
~~~PHP,bad
$folder = $_POST["folder"];
~~~
Ich hab jetzt nicht gesehen, dass wirklich etwas passieren kann - aber
was wenn jemand
~~~
../../../../../etc
~~~
sendet? Dann hast Du
~~~
$target_path = "/srv/www/htdocs/test/upload/../../../../../etc"
~~~
oder eben:
~~~
$target_path = "/etc"
~~~
**Lege sowas auf dem Server fest und schreibe es in eine Session. Nicht per POST oder GET vom Browser nehmen! NeverEver!**
Das geht zwar hier aus einem anderen Grund schief (weil dann das zip-File nicht geschrieben werden kann) aber das Eis ist zu dünn.
Asynchrone Prozesse im Browser als Ursache + Ups! Wirklich gefährlich!
bearbeitet von RaketenwilliHm.
Das zeigt leider nicht, ob der Upload noch stattfindet, während auf dem Server schon gezippt wird. Und die gezeigte Warnung
~~~
zip warning: file size changed while zipping
~~~
lässt genau das vermuten.
Es ist also sehr wahrscheinlich so, dass der Upload noch stattfindet, während gezippt werden soll.
Lösung:
- Initiere den Request für das Zippen erst, wenn die Uploads der Filechunks komplett „durch“ sind. (browserseitig, im JavaScript)
- Achte darauf, dass der auf dem Server laufende Prozess, der die Filechunks zur Datei zusammenfügt (auch das kann etwas dauern), sein „ok“ erst sendet, wenn wirklich alle Befehle darin abgeschlossen sind - insbesondere das Zusammenfügen der Datei wirklich vollständig stattgefunden hat.
~~~PHP,bad
$folder = $_POST["folder"];
~~~
Ich hab jetzt nicht gesehen, dass wirklich etwas passieren kann - aber
was wenn jemand
~~~
../../../../../etc
~~~
sendet? Dann hast Du
~~~
$target_path = "/srv/www/htdocs/test/upload/../../../../../etc"
~~~
oder eben:
~~~
$target_path = "/etc"
~~~
**Lege sowas auf dem Server fest und schreibe es in eine Session. Nicht per POST oder GET vom Browser nehmen! NeverEver!**
Das geht zwar hier aus einem anderen Grund schief (weil dann das zip-File nicht geschrieben werden kann) aber das Eis ist zu dünn.
Asynchrone Prozesse im Browser als Ursache + Ups! Wirklich gefährlich!
bearbeitet von RaketenwilliHm.
Das zeigt leider nicht, ob der Upload noch stattfindet, während auf dem Server schon gezippt wird. Und die gezeigte Warnung
~~~
zip warning: file size changed while zipping
~~~
lässt genau das vermuten.
Es ist also sehr wahrscheinlich so, dass der Upload noch stattfindet, während gezippt werden soll.
Lösung:
- Initiere den Request für das Zippen erst, wenn die Uploads der Filechunks komplett „durch“ sind. (browserseitig, im JavaScript)
- Achte darauf, dass der auf dem Server laufende Prozess, der die Filechunks zur Datei zusammenfügt (auch das kann etwas dauern), sein „ok“ erst sendet, wenn wirklich alle Befehle darin abgeschlossen sind - insbesondere das Zusammenfügen der Datei wirklich vollständig stattgefunden hat.
~~~PHP,bad
$folder = $_POST["folder"];
~~~
Ich hab jetzt nicht gesehen, dass wirklich etwas passieren kann - aber
was wenn jemand
~~~
../../../../../etc
~~~
sendet? Dann hast Du
~~~
$target_path = "/srv/www/htdocs/test/upload/../../../../../etc"
~~~
oder eben:
~~~
$target_path = "/etc"
~~~
Lege das auf dem Server fest und schreibe es in eine Session. Nicht per POST oder GET vom Browser nehmen.
Das geht zwar aus einem anderen Grund schief, weil dann das zip-File nicht geschrieben werden kann - aber das Eist ist dünn.
Ups. Gefährlich!
bearbeitet von RaketenwilliHm.
Das zeigt leider nicht, ob der Upload noch stattfindet, während auf dem Server schon gezippt wird. Und die gezeigte Warnung
~~~
zip warning: file size changed while zipping
~~~
lässt genau das vermuten.
Es ist also sehr wahrscheinlich so, dass der Upload noch stattfindet, während gezippt werden soll.
Lösung:
- Initiere den Request für das Zippen erst, wenn die Uploads der Filechunks komplett „durch“ sind. (browserseitig, im JavaScript)
- Achte darauf, dass der auf dem Server laufende Prozess, der die Filechunks zur Datei zusammenfügt (auch das kann etwas dauern), sein „ok“ erst sendet, wenn wirklich alle Befehle darin abgeschlossen sind - insbesondere das Zusammenfügen der Datei wirklich vollständig stattgefunden hat.