Weil ich, wenn ich etwas "starten" kann, auch die bash starten könnte
„Kasus Knacktus“ ist nach meiner Ansicht das „ich“. Wie ich es sehe, geht es darum, dass Dateien, die ein (nicht sorgfältig authentifizierter) Benutzer der Website hinterlassen kann, nicht von einem anderen (Prozess wie Apache oder deren Kindprozesse oder einem Shell-Nutzer) ausgeführt werden können. Dieses Oster-Szenario(¹) ist viel weniger abstrakt als manche glauben.
Der Satz von Tom …
Es müssen daher ALLE Scriptausführungen für das Upload-Verzeichnis ausgeschaltet sein!
… mag überzogen klingen und kann es durchaus auch auch sein, weil er bei kleinlicher Auslegung ein Szenario beschreibt, welches bei begrenztem Mehrwert nur schwierig zu erreichen ist. Für mich würde es, so man die Kirche im Dorfe lassen will, genügen, wenn die Uploads in einem Verzeichnis landen, auf welches der Webserver keinen direkten Zugriff hat (also außerhalb des Document-Root liegt) - oder, wenn das doch sein soll, wenigstens nichts davon ausführt. Sei es nun als Skript - oder wie im Falle von PHP und Python - durch ein Modul. Außerdem sollte ein nicht durch sorgfältig authentifizierte Nutzer getriggertes Upload-Skript natürlich nichts an bestehenden Dateien verändern.
¹) Oster-Szenario: Der Hase legt die Eier aber die Kinder finden und essen sie. Man kann (außerhalb geschlossener und kontrollierter Umgebungen) nur hoffen, dass es der echte Osterhase war… Also kontrolliert man die Funde, bevor diese zum Essen frei gegeben werden.