Signieren von npm Paketen

Zur Einleitung eine kleine Geschichte zu einem Projekt, daß ich mit einem unserer Kunden umgesetzt habe. Da das Projekt mangels Benutzer jüngst eingestellt wurde, ist wohl die Floskel „Es war einmal…“ angebracht 🙂

Die Geschichte von Lord Uglify

Also.. Es war einmal .. ein tolles webbasiertes Firmenspiel für das jede Menge Javascriptcode erzeugt wurde, weil es ja im Browser zu spielen war. Nun sollte das ellenlange Javascript eingedampft werden mit „Uglify“ einem node.js Tool zum Schrumpfen und Verschleiern von Javascriptcode.

Nun sollte jemand Uglify irgendwo installieren und es dafür benutzen. Das war der erste Fehler. Nachdem Node.Js aus dem Repository installiert wurde, tat es natürlich nichts sinnvolles, denn Uglify hat wie so viele andere Node.js Programme, einen Abhängkeitsbaum, der milde betrachtet, bis zum Mond reicht. Mit NPM, dem Node.Js Paketmanager, kann man die Abhängkeiten befriedigen, glaubten wir zumindest. Das war Fehler Nummer 2. Denn die Abhängigkeiten von den Abhängigkeiten der Abhängigkeiten von den Abhängigkeiten der Abhängigkeiten von den Abhängigkeiten die keine Ende nehmen wollten, brauchten geschlagene 30 Minuten sich zu installieren. Na gut, jetzt wird es ja wohl endlich starten. Das war der dritte Fehler.. allerdings dann auch der letzte, weil ich keinen Bock mehr hatte mich von so einem Witzprogramm verarschen zu lassen.

Ich habe dann einfach „jsmin“ genommen: klein,schnell,effektiv,läuft überall, keine Abhängigkeiten und einfachst zu bedienen. Kurzum, ein Programm wies sein sollte.

Was hat das jetzt mit dem Signieren von Paketen zu tun ?

Tja, wie man oben lesen kann, sind Node.js Programm extrem modularisiert, sprich, mal eben selbst was schreiben ist praktisch nicht, weil man erst mal jede Menge an Paketen installieren muß. Im Gegensatz zu Java, wo eine Fülle von Klassen mitgeliefert werden, kommen die Pakete per NPM ins Projekt rein.

Diese Pakete sind nicht signiert, die von Java zwar auch nicht, aber die kommen ja auch aus einer definierten Quelle gleich mit. Signieren ist im NPM auch nicht vorgesehen. Daher hat jemand in Australien ( Details bei Heise ) gemeint, er müßte das ändern und hat ein Signaturtool für Node.js Pakete gebaut.

Die Begründung war, das neulich diverse Pakete aus dem NPM Repo auf merkwürdige Art verschwunden sind, zwischenzeitlich durch gleichnamige Pakete ersetzt wurden, um dann funktional mit den früheren Paket  zu kollidieren, sprich, was anderes zu machen, als das Original.

Da jeder Pakete in das NPM Repo laden kann, würde das Signieren also den Prozess mit den Paket-Abhängigkeiten sicherer machen, weil wenn sich so ein Vorgang wie eben beschrieben passiert, würde ja die Signatur nicht mehr passen und dem Entwickler würde dann auffallen, daß da gerade was schief läuft. Nun, das mag sein.

Das eigentliche Problem

Das eigentliche Problem löst das natürlich nicht: 100 Abhängigkeiten im Projekt, und den von den Entwicklern hat noch nie einer gehört. Ob die da Schadcode einbauen oder nicht, kann man nicht an der Tatsache einer gültigen Signatur erkennen.
Alles was dieses Signaturen bieten, ist ein Verwechslungsschutz, das aber auch nur, wenn der lange verschollene Author doch nochmal gefunden wird 🙂

Ich halte das für nichts, was man an die große Glocke hängen sollte, denn das hier kann man damit nicht vermeiden:

https://hackernoon.com/im-harvesting-credit-card-numbers-and-passwords-from-your-site-here-s-how-9a8cb347c5b5

Es lohnt sich bis zum Ende zu lesen, weil Ihr sonst einen falschen Eindruck von der Sache bekommt. Wenn Ihr damit fertig sein, hier ein Zitat von „blog.fefe.org“ unser aller Weltverschwörungsguru 😉 passend zum Thema :

[l] Ein Einsender kommentiert die Webfrontend-Warnung:

  • lass‘ uns als kleine Veranschaulichung, wie breit und tief die Güllegrube npm sein kann, eine Webanwendung anfangen. Natürlich mit Angular und dem aktuellen Standard-Build-System @angular/cli:

    $ npm i @angular/cli
    $ node_modules/.bin/ng new webkid --directory=.

    Das Ergebnis ist ein Skeleton mit einer Hello-World-Seite und:
    31 direkten Abhängigkeiten
    974 Abhängigkeiten insgesamt
    305 MB in node_modules

    Davon sind 158 Pakete Duplikate von bereits installierten Paketen mit einer anderen Versionsnummer. Bei so vielen Abhängigkeiten ändern sich die Zahlen natürlich schnell, also am besten sofort anfangen mit dem Audit!“

    “ [Ende des Zitats]  Aufgrund der Struktur von Fefes Webseite, müßt Ihr selbst den „Wed Jan 10 2018“ suchen 😉

 

Dem Kommentar kann man sich nur anschließen. Keine Signatur der Welt macht das irgendwie sicherer!

Davon ab, keine Ahnung wie jemand auf die Idee kommt, dafür zu Entwickeln. Da braucht man ja Stunden um anzufangen. Leute nehmt was vernünftiges, nehmt Java. Eclipse auf. Neues Javaprojekt aufmachen und einfach losschreiben 😉

Java kommt übrigens leer mit knapp 105 MBye aus 😉 und das wäre dann auch für alle Projekte und nicht PRO Projekt 😀

Quelle: heise.de – Open Source Tool zum Signieren von npm Paketen veroeffentlicht

Linux – Tilix – GTK – D und Wischiwaschi

Supi, Neues Jahr, neue Software zum Testen. Diesmal „Tilix“ . Ein Terminalprogramm das nach Human-Interface-Paradigma  von GTK entworfen wurde. Und leider sieht es auch genauso aus 🙂

Um was geht es eigentlich ?

So sieht unser Testobjekt aus :

leeres Tilix TerminalTilix ist das neue Fedora 27 Standard Terminalprogramm und löst damit GNOME-Terminal ab. Das führte bei einer frischen Installation von Fedora 27 dann natürlich zu diversen Problemen, denn es reagiert komplett anders als GNOME-Terminal (ab jetzt nur noch „GT“ genannt). Man könnte argumentieren, daß es sich bestimmte Shortcuts jetzt so verhalten, wie man das „erwarten“ würde. Dazu muß man allerdings wissen, daß Tilix krampfhaft versucht das Terminalfenster auf genau der offenen Größe zu belassen und dabei möglichst viel Inhalt da reinzuquetschen.

Beispiel:

Am sieht ein Tilix Fenster in dem viele,viele Terminalfenster kaskadisch immer kleiner angezeigt werden.

Wie man hier sehen kann, ist das u.U. nicht besonders sinnvoll. Verantwortlich für diese lustige Anordnung sind die beiden „plus“ Knöpfe neben der Sessionauswahl links oben, das ist die mit dem „3/3“ Text.

Im ersten Moment fand ich die Funktion geckisch, aber nüchtern betrachtet, macht die so nur Sinn, wenn man das Fenster auf Fullscreengröße geöffnet hat.  Das eingebaute Tiling wird vermutlich viele Freunde finden. Ganz abgeneigt bin ich dem nicht, aber ich ziehe die Einrastfunktion von Cinnamon für ganze Fenster vor. Zwischen den Fenstern kann dann nämlich mit ALT-TAB wechseln.

Die Menüs entsprechen den GTK Vorgaben und sind damit derzeit „das dämlichste was man haben kann“. Der Trend, Context-Menü-Container zu recyclen, also beim Aufruf von Untermenüs kein neues Containerfenster , sondern das vom Menü dadrüber zu recyclen aka nur den Inhalt des Menücontainers zu tauschen, entspricht nicht meinem persönlichen Geschmack.

Auch die Option „Show File Browser“ ist vollkommen Ga-Ga und hat dort nichts zu suchen :

komplett fehl am PlatzWas genau soll so eine Funktion an der Stelle bitte tun ? Ich habs natürlich ausprobiert und kann sagen: Nichts. Denn statt mit dem PDF irgendwas zu machen, z.b. den Filelink in das Terminal zu kopieren, passiert … na ? …. wer räts ? … Genau das nicht! Es ist gar kein Filerequester, es ist gleich ein neues Fenster von Nemo/Nautilus, also genau das was da steht: Mach den Filebrowser auf!  WARUMMMMMMMM!?!!?!!!?!!!!!!!!!!

Phobos – altgriechisch für „Furcht, panische Angst“

Schauen wir nach dem Exkurs in den Wahnsinn mal, auf was Tilix eigentlich aufbaut :

Installieren:
tilix x86_64 1.6.4-5.fc26 updates 724 k
Installiere Abhängigkeiten:
gtkd x86_64 3.6.6-2.fc26 updates 8.5 M
ldc-druntime x86_64 1:1.3.0-1.fc26 updates 550 k
ldc-phobos x86_64 1:1.3.0-1.fc26 updates 2.0 M

Es wird uns also bei der Installation eine Laufzeitumgebung von … taterata… D installiert und gleich noch Phobos dazu.

Praktisch alle Nicht-Programmierer und vermutlich selbst von den Middleaged DevOps kennen D nur die wenigsten. D wurde Ende der 90er!!! Jahre im OOP Hype als auf C-basierendem OOP Ersatz zu C++ entwickelt. Als wenn E und F aus den 80ern nicht schon gereicht hätten 🙂

Über D … man kann es hier prima verwenden -> 😀

D war nicht in den Heise Top 10 für 2017 ,
ist keine POP ( Problem Orientierte Programmiersprache —- Ich weiß!!! ich weiß!!! 😀 ) und damit trendy,
in den Stackoverflow TOP 20 der meistgehassten Programmiersprachen kommt es auch nicht vor,
und in den Top 20 der JAX für 2017 kommt D auch nicht  vor.  Da selbst PERL noch in deren TOP 20 ist und das verdammt lange tod ist, lasse ich mich dazu verleiten D auch als irrelevante Größe zu bezeichnen aka tod.

Ein Programm in einer toten Programmiersprache und auf Basis von panischer Furcht , das kann kein gutes Omen sein. Und genau in dem Geiste scheint Phobos gemacht worden zu sein, denn es beschreibt sich so :

„Each module in Phobos conforms as much as possible to the following design goals. These are goals rather than requirements because D is not a religion, it’s a programming language, and it recognizes that sometimes the goals are  contradictory and counterproductive in certain situations, and programmers have jobs that need to get done“

Kurzform „WischiWaschi“

Das will man über eine wichtige Komponente seines Rechners nicht lesen.. Übersetzung:

Jedes Modul in Phobos entspricht so weit wie möglich den folgenden Designzielen. Diese Ziele sind eher Ziele als Anforderungen, denn D ist keine Religion, es ist eine Programmiersprache, und es erkennt, dass die Ziele manchmal widersprüchlich und kontraproduktiv in bestimmten Situationen sind, und Programmierer haben Jobs, die erledigt werden müssen“. ( Danke an Deepl.com )
(An.d.R. die Designziele werden gar nicht in der dnf info von phobos genannt k.a. wieso die die dann erwähnen.)

Natürlich hat ein Programm klare Ziele:

  1. Es muß eine bestimmte Funktion erfüllen
  2. Es darf keine Fehler enthalten
  3. Es darf bei Design keine Sicherheitslücken enthalten
  4. Es muß bedienbar bleiben

Die Formulierung wie „Aber manchmal haben Programmierer Jobs, die erledigt werden müssen.“ lassen mich an der Qualität des Codes schon von vornherein zweifeln. „D sein keine Religion“ als wenn Ziele eine Religion bräuchten ? Das ist so typischer „Ich weiß alles besser als Ihr“ Manifestsülz. Glauben gehört in die Kirche und Ziele im Leben sind ein Eigenschaft von Menschen. Und wenn ich das Ziel habe, das coolste, aber total unsicherste Programm des Planeten zu bauen, dann tue ich das, weil ich ein Mensch bin. Macht das Sinn , Nö, aber Spaß 😀  Programmierer, deren Software für andere Gedacht ist, sollten andere Maßstäbe haben: Sicherheit, Stabilität, Benutzbarkeit.

Wie Ihr hier lesen könnte, kommt „Design“ in der kurzen Liste nicht vor.  Firmenchefs und Designer sehen das natürlich anders, weil EyeCandy verkauft sich gut, aber man kann Design auch an Platz 4 der Liste haben und ein sicheres Programm trotzdem gut aussehen lassen 😉

Fazit

Die vielen unnötigen Ebenen des Terminalseins ( da gibts 4 von in Tilix ) haben keinen brauchbaren Vorteil (für mich), der Unterbau macht mir Angst, die wenig bis gar nicht auditierte Programmiersprache nebst Compiler, sinnlose Features und ein grässliches Design lassen für mich nur eine Option zu:

dnf erase tilix -y

und danach die Platte desinfizieren 😉