Der vertrackte Upload-Button

Ein Webinterface wie für fairway stellt für mich eine ganz neue Herausforderung dar, denn mein Alltag besteht eher daraus, Neulinge in die Geheimnisse von Linux einzuführen.

Wie in unserem Beitrag „Fairway – bald verfügbar“ erzählt, habe ich fairway von Anfang an in Bash programmiert. Mir ist klar, dass ich mich hier einem dicken Feuer aussetze, weil alle sagen, Bash ist total ungeeignet für Webprogrammierung. Was mir fehlt, ist eine Begründung warum Bash ungeeignet sein soll. Bash fehlt die Eleganz einer Python und die Effizienz von Perl, aber die Entwicklung läuft einfach sehr flüssig von der Hand. Security ist für alle Scriptsprachen ein Problem, und meine Versuche, die fairway-Thematik in PHP oder Perl umzusetzen, zeigte mir sehr schnell, dass beide Sprachen (und auch Python) viele Themen sehr komplex angehen. Nun ist Komplexität niemals gut, und sie ist letztlich der Feind der Sicherheit, weil ich irgendwann den Überblick verliere. Zu einfache Lösungen sind aber oft ebenfalls unsicher, wie gesagt mir fehlen hier Argument und vielleicht auch (schlechte?) Erfahrung. Ich sag’s offen: ich weiß nicht wie sicher oder unsicher Bash ist, aber ich weiß auch nicht wie sicher oder unsicher Perl-Cgi, Python, PHP etc sind. Ich vermute aber, da Bash schon einige Jahre auf Linux existiert, dass es evtl ausreichend sicher ist?

Aber ich wollte etwas anderes erzählen: vom Alltag eines Webseiten-Programmierers. Da gibt es diesen vermaledeiten Upload-Button und das CSS-Stylesheet. Einen Tag habe ich nach einer Lösung gesucht, den „Durchsuchen“-Button an unser Stylesheet anzupassen.

Die meisten Vorschläge liefen etwa so: geht nicht, versecke das Original, peppe eine Fake drüber und ergänze die nun fehlende Funktion mit javascript. Dann stellt man fest, dass Javascript leider überhaupt nicht das macht was der originale Button macht, aus einer merkwürdigen Sicherheitsüberlegung raus: der Pfad soll nicht sichtbar werden. Aber bitte: ein Pfad c:\fakepath\ … ist doch gelinde gesagt totaler Mist. Wie wäre es, den Pfad ganz wegzulassen, wie der originale Button es macht? Das ist sicher und verwirrt nicht technisch unbegabte Anwender! Nun die Lösung, gefiel mir nicht, und die Eigenschaft von Javascript dann noch wieder raus patchen? Das wurde ganz schnell zum Rattenschwanz.

Nun muß ich sagen: shame on you, Google and Bing. Einen Tag habe ich gesucht mit Suchbegriffen wie „CSS upload button“ oder „change firefox upload button“. Um ein Uhr nachts fand ich die Lösung. Der Trick war, nicht „firefox“ sondern „mozilla“ zu sagen, außerdem muß zwingend css bei stehen, also „mozilla css upload button“. Nur leise Abweichungen und der link taucht ab ins Nirvana. Leute, eure Algorithmen sind so schlau, vielleicht zu schlau?

Man bekommt massig Lösungen aus dem Jahre 2005, aber die Lösung, die 2021 aktuell ist, taucht einfach nicht auf. Das gleiche Problem hatte ich, als ich eine Lösung für die Hybrid-Grafik meines Notebooks suchte. Mal abgesehen davon, dass am Ende ein BIOS-Schalter das Problem löste, war die originale und elegante Lösung von NVIDIA die einzige die man nie fand, 4 Wochen habe ich gesucht und sie dann in den Originaldokumenten von Nvidia gefunden. 4 Wochen mit ollen, veralteten und ungeeigneten Krücken die nie das taten was sie sollten.

Wie dem auch sei, nach 15 h suchen und Experimentieren mit in meinen Augen völlig ungeeigneten Workarounds, hatte ich die Lösung in kaum 5 Minuten umgesetzt, basierend auf pure CSS and HTML, einzige Voraussetzung: ein aktueller Browser, und absolut jeder sollte seinen Browser immer aktuell halten.

Dann der Upload: ein anderes Thema. „Macht man nicht mit bash“, „kann man nicht in bash“, „ist nicht sicher in bash“, „geht in Bash nur mit GET, nicht mit POST“. Man bekommt den Eindruck dass Menschen manchmal ein wenig faul sind. Bash liefert die POST-Daten exakt so wie der Browser sie schickt, da ist nichts sicherer oder unsicherer oder gar gar nicht möglich. Etwa 1kb Code, und ich hatte Metadaten und Binary in getrennten Datensätzen. Das ist ausreichend sicher, ich wäre gespannt wie die Skriptsprachen (inklusive meiner Billiglösung) auf manipulierte POST-Daten reagieren.

Also, Programmieren ist immer ein Abenteuer, aber die Tatsache das für Suchmaschinen auch bei technischen Themen Klicks wichtiger sind als Aktualität, dass viele Autoren einfach vergessen ein Datum an ihre Artikel zu peppen, das oft Meinungen vertreten werden, nicht Wissen, macht es einem Quasi-Einsteiger wie mir ganz und gar nicht einfach.

Allerdings wäre dem schon geholfen, wenn Autoren ehrlich wären (und viele sind das übrigens) und sagen, wenn sie es einfach nicht besser wissen, statt Kommentaren wie: „Bash cgi is insecure and will not work, don’t do it“. Guy check the facts before you come to a conclusion like that.