ProFinal but not final

Im Zeitraum vom 20.08. bis 03.09.2021 habe ich an einem Jam Event, auf dem Discord Server des Entwicklers und YouTubers Vitalij Mik, teilgenommen. Pünktlich zum Start wurde das Thema "Single Form Application" bekannt gegeben.

Passend dazu kamen mir mehrere Ideen in den Sinn. Zum einen wäre es eine Option einen Kurz-URL-Dienst zu schreiben. Diese Art von Dienst hatte ich allerdings schon mehrfach implementiert. Eine alternativ wäre ein SSL-Checker gewesen, dazu wollten mit aber nicht genug Erweiterungen einfallen.

Schlussendlich habe ich mich für etwas anderes entschieden, was mir am schlüssigsten erschien und viel Flexibilität bei der Planung ermöglichte.

Die Projektidee

Nach einem kurzen Brainstorming, kam mir die Idee, eine Art automatisierte Checkliste für die Liveschaltung eines neuen Webprojekts zu entwickeln. Es würden verschiedene Kriterien überprüft werden, beispielsweise ob die Seite über eine robots.txt verfügt oder ob die Loginseite von WordPress abgesichert wurde.

Damit war die Idee für "progressive finalisation" geboren, kurz ProFinal. Die Grundidee schien mir durch die beliebige Anzahl an Kriterien zur Prüfung beliebig skalierbar genug. Wichtig wäre es nur einen allgemeinen Mechanismus zu implementieren, welcher beliebig viele Kriterien prüfen kann.

Queues

Viele Kriterien bedeutet möglicherweise eine sehr lange Scriptlaufzeit und oft auch höhere Memory Nutzung. Aus diesem Grund und der wirklich guten Skalierbarkeit lag es nahe auf Queues zu setzen. Um dabei nicht den Überblick zu verlieren habe ich ein Sequenzdiagramm angelegt.

diagramm

Der Ablauf startet, indem der Nutzer eine URL über ein Formular eingibt, welche getestet werden soll. Dieser Auftrag landet als Task in der Queue und wird später abgearbeitet. In diesem Task wird der Quellcode hinter der eingegebenen URL abgerufen und zwischengespeichert. Anschließend wird geprüft, welche Kriterien aktuell in ProFinal getestet werden. Für jedes Kriterium wird ein Task in die Queue geworfen. Diese Tasks werden dann Stück für Stück abgearbeitet und deren Ergebnisse werden wiederum in der Datenbank gespeichert und mit dem ursprünglichen Auftrag verknüpft.

erm

Kriterien

Die Auswahl der Kriterien geschah relativ frei. Ich wollte gerne aus verschiedenen Bereichen etwas prüfen. Um den Bereich SEO nicht zu sehr aufzublähen, habe ich mich entschiedenen einen weiteren Bereich für Metadaten einzuführen. Zusätzlich wollte ich auf jeden Fall noch den Bereich für Security.

Inspirationen

Nachdem ich bereits angefangen hatte mir erste Kriterien zu überlegen, musste ich schnell feststellen, dass es sehr viele ähnliche Tools dort draußen gibt, die ähnliche Aspekte abdecken. Offensichtlich war "progressive finalisation" nicht der gebräuchliche Name, sondern Keywords wie "SEO Checker".

Bad Files Pattern

Ein Kriterium, in welches ich wohl etwas zu viel Zeit investiert habe, sind die "Bad Files Pattern". Die Idee dahinter war es verschiedene URLs einer Domain zu prüfen, ob Dateien wie .env oder auch composer.json öffentlich einsehbar sind. Dazu habe ich eine Liste mit über 100 Kombinationen erstellt. Inspiration für viele der Einträge waren Logfiles aus dem privaten oder Arbeitsumfeld. Wirklich erstaunt wie viel auf Servern herumgehackt wird, welche im Internet aufrufbar sind, war ich allerdings nicht.

Ideen

Ich hatte mehr Ideen für Kriterien als am Ende zeitlich umsetzbar waren und vielleicht findet sich auch noch etwas Zeit dafür in der Zukunft. Eine Idee war es zum Beispiel noch die von Google angebotene "Web Risk API" anzubinden. Auch hätte ich mir gerne noch angesehen welche Informationen manche Server über die Response Header ausgeben. Unter anderem Informationen über den verwendeten Webserver oder sogar über die genaue Version sind über Header abgreifbar.

Mein Fazit

ProFinal war, wie erwähnt ein Projekt im Kontext eines Jam Events und hatte für mich speziell die Hoffnung etwas zu lernen. Mir ging es zu keiner Zeit darum der beste zu sein. Der Lerneffekt ist nicht ausgeblieben, da ich bei der Recherche zum Thema SEO und Security etwas lernen konnte. Bei der Entwicklung selbst war es nicht ganz so effektiv, ich konnte zwar etwas dazu lernen, aber nicht in dem vorher gedachten Maßstab.

Trotzdem habe ich mich sehr gefreut teilnehmen zu können und natürlich habe ich mich auch über den ersten Platz gefreut.

Abschließend möchte ich gerne noch auf den Artikel eines anderen Teilnehmers verweisen. Robin hat im Jam Event einen Kurz-URL-Dienst entwickelt und für seinen Wissensstand eine beachtliche Leistung erbracht.

Genauso möchte ich noch das Abschlussvideo des Jams von Vitalij erwähnen.

Den Code von ProFinal findet ihr auf Gitlab und eine Demo gibt es auch.