Beweggründe für diesen Post Anstoß für diesen Post ist ein Beitrag von heise.de: colspan=6: Über den Nachteil der Entwicklerwerkzeuge. Nach dem Lesen der Überschrift zweifelte ich doch sehr an der Sinnhaftigkeit dieses Beitrags. Doch nach lesen des Artikels wurde mir bewusst, dass noch sehr viel Wahrheit hinter dem ganzen steckt. Es ist fast selbstverständlich geworden alles so weit es geht zu automatisieren oder mit Tools zu vereinfachen. Ich selbst bin von allemdem ein sehr großer Fan. Automation and Tools everywhere Automatisierung ist gerade heute ein großes Thema, am besten den Vorgang einmal modelliert für immer autarg im Einsatz. Das ganze trifft natürlich nicht nur auf die IT-Branche zu. An dieser Stelle ist nur Industrie 4.0 zu sehen, doch auch im Kleinen, in Handwerksbetrieben. Die Maschinen übernehmen immer mehr arbeiten und manuelle Vorgänge. Damit ergeben sich natürlich enorme Zeiteinsparungen und eine höhere Effizienz unserer Arbeit. Man kann sich um die eigentliche Aufgabe kümmern statt um stupide Teilschritte. Doch für welchen Preis das alles? Machen wir uns abhängig von den Tools und dem Automatisierungswahn? Ich ertappe mich doch recht oft dabei, manche Fehler sehr oft zu wiederholen und diese anschliessend durch die IDE korrigieren zu lassen. Oft ist es …



Intro Das ist eine der wohl häufigsten Fragen die zwischen Anfängern aber auch erfahrernen Programmierern heiß diskutiert wird. Gerade im akademischen Umfeld und der Ausbildung hört man oft "die Sprache ist grundsätzlich egal". Würde eine Sprache reichen? Doch warum gibt es dann so viele von Ihnen? Warum programmieren wir dann nicht alle mit C oder C++? Gibt es vielleicht doch Unterschiede? - Natürlich gibt es Unterschiede. Ob es nun die besonderen Funktionen sind, die bei Nebenläufigkeit unterstützen oder eine bestimmte darunter liegende Architektur, wie das z. B. nur ein Kern genutzt wird oder breitere APIs mitgeliefert werden. Jede Sprache entstand aus einer Problemstellung heraus. Prominentestes Beispiel hierfür ist wohl Java. Eine Sprache die geschaffen wurde, um verschiedene Plattformen abzudecken. "Write once - Run anywhere". Ziel war die Schaffung einer einheitlichen Plattform für alle gängigen Betriebssysteme, aber am Besten für jedes. Dieses Ziel wurde sehr gut erreicht, aber es hat den Nachteil, dass man eben nicht spezifisch auf jedes Betriebssystem eingehen kann. Also eher ungeeignet für sehr auf das OS oder die Hardware ausgerichtete Einsatzzwecke. Grundsätzlich ist sie ja eine "general purpose language", zu gut Deutsch eine "Universelle Sprache". Egal ob man ne …



Einführung Zuerst einmal zum Begriff "Cross Plattform UI". Ich verstehe darunter grundsätzlich "Eine UI für alle gängigen Plattformen". Im nativen Bereich meint man hier so gut wie immer ein Betriebssystem (Windows, Linux, Mac, Android ...) oder eine Laufzeitumgebung (Java Runtime Environment, .NET Runtime, Python, ....). Oder im Web von einem Browser (Chrom[ium]/Firefox, Safari, ...). Soweit so gut, also viele Plattformen, selbe Benutzeroberfläche. Wo liegen jetzt Probleme? Nativ und doch plattformunabhängig Klingt doch toll oder? - Ich designe eine Oberfläche genau einmal und verwende sie auf allen meinen Zielplattformen. Doch nicht immer will der Nutzer auf jeder Platftorm die gleiche UI sehen, vielleicht will er nicht mal merken das er gerade eine Systemanwendung verlässt. Es soll sich heimisch anfühlen aber trotzdem ohne große Einarbeitungszeit funktionieren. Das lässt sich natürlich nicht auf jede Software anwenden und ist nicht immer eine explizite Anforderung aber doch ein indirektes Bedürfnis vieler Nutzer. Size matters Und dann wär da noch das Problem mit der Plattform. Die Anwendung soll ja relativ klein sein, wenn wir von der Dateigröße reden und natürlich möglichst wenig Abhängigkeiten haben und am besten auch auf einer neuen aufstrebendenen Plattform funktionieren. Doch natürlich hat jede Anwendung Anforderungen die sehr speziell …



Einführung Nerd. Ein Begriff den man in der heutigen Zeit recht oft verwendet. Man kann was gut, ist vielleicht nicht so sozialfähig und zack man ist ein Nerd. Nerds kann man eigentlich überall finden. Doch die meisten verbinden damit Leuten, die Computerspiele spielen oder "Zeugs am PC machen". Als Softwareentwickler hört man sowas doch schon relativ häufig. Ob von Bekannten, Freunden oder Kunden. Das ist ja gerundsätzlich mal ganz ok. Man wird eben so bezeichnet. Man gewöhnt sich dran. Man liebt einfach was man tut. Ob man wie ich einfach die Erstellung von Softwaresystemen, Programmen und Tools oder vielleicht das rumlöten an irgendwelchen Platinen extrem gerne tut. Für jeden gibt es eine Sache die man unheimlich gerne tut und der wir uns einfach gerne vertiefen und vielleicht auch oft verlieren. Ohne diese Menschen wäre die Welt vielleicht nicht so wie sie heute ist. Wir prägen den Alltag. Ob es nun wir Softwareentwickler sind die den Alltag mit Apps, Software und Homepages erleichtern oder die Hardwaretüftler die Grundsteine für neue Maßstäbe legen. Sie sind der Teil der Gesellschaft der oft belächtet wird. Und doch sind wir so wichtig. Wir treiben Innovation. Trauen uns an neue Dinge. Und vorallem suchen …



Dieses Tutorial soll dabei helfen ein simples und rudimentäres SSO-System zu implementieren, bei dem nginx selbst die Authentifizierung übernimmt, hierbei ist der Login nur einmal für verschiedene Anwendungen möglich. Vorraussetzungen Für das Tutorial benötigst du PHP 7+ sowie nginx mit aktivierem Auth Modul Login-System mit PHP vorbereiten Zuerst benötigen wir eine öffentlich erreichbare Domain zum Login. Ich habe mich hierbei für folgende Struktur entschieden: public_html Document root |--- www Website root |--- index.php Einstiegspunkt |--- access_denied.php Fehler bei unzureichender Berechtigungen |--- change_password.php Self-Service zur Passwortänderung |--- headless_check.php Check für Nginx Loginstatus |--- login.php Login-Formular und Logik |--- logout.php Logout und deren Logik |--- util.php Hilfsfunktionen util.php Zuerst einmal die Hilfsfunktionsdummies: access_denied.php Diese Datei kann nach komplett eigen gestaltet werden, hier reicht eine statische Seite im Normalfall aus. headless_check.php Diese Datei wird aufgerufen, wenn nginx den Loginstatus abrpüft, hierbei muss entsprechend ein 403 - Access Denied, 200 - für Login ok und 401 für nicht angemeldet zurückgegeben werden. Ein optionaler Gruppencheck wird über den X-Groups-Header veranlasst der mit Komma getrennt die unterschiedlichen Gruppennamen enthält. login.php und logout.php Diese beiden Seiten können grundsätzlich auch …






Programmieren. Der Hype um IT und Programmierung ist ungebrochen. Industrie 4.0 hat wahrscheinlich jeder schon mal gehört, vielleicht sogar etwas zu oft. Ja Programmierung und Digitalisierung ist die nächste Revolution nach der Erfindung der Dampfmaschine. Und Industrie 4.0 ist das Schlagwort mit dem Manager und Steuergelder magisch angezogen werden. Das Wundermittel für die Zukunft: die IT. Viele fangen nicht direkt im Firmenumfeld mit der Programmierung an, eingeschlossen mir. Es beginnt oft ganz einsam und alleine im stillen Zimmer. Dann mausert man sich, findet Interesse und beginnt eine Ausbildung oder programmiert einfach nur privat. Man beginnt beim harmlosen Taschenrechner bis man irgendwann mit wichtigen Daten wie Passwörtern arbeiten muss. Der Umgang mit solch sensiblen Daten wird von vielen schlicht und ergreifend unterschätzt. Die sichere Speicherung von Benutzerdaten ist aber im Falle eines Angriffes die letzte Möglichkeit die Benutzerdaten vor Unbefugten noch einigermaßen sicher zu halten. So soll es wenigstens nicht leicht sein Passwörter und vieles mehr zu knacken. Persönliche Daten hingegen müssen meist in Klartext gespeichert werden. Und genau hier liegt das Problem. Man sollte sich bei jeder Erfassung von Daten fragen ob die Daten wirklich benötigt werden oder sich die Erfassung auch ersparen lässt, muss ich jede Anmeldung …



Was willst du von mir? Passwörter sind so etwas wie die digitalen Schlüssel in unsere virtuellen Häuser und Bruchbuden. Dabei sind sie genauso umstritten wie die Schlüssel in der "realen Welt". Ein beispiel für so eine Kritik mit Fakten ist hier zu finden. Ironischerweise setzt diese Website auf keine Verschlüsselung. Das aber nur am Rande. Und jetzt? Ob wir wollen oder nicht, Passwörter sind und bleiben wohl auf absehbare Zeit ein fundamentaler Bestandteil der Sicherung von Benutzerkonten. Und es werden immer mehr, am Besten für jedes Konto einzigartig, nicht zu einfach aber trotzdem leicht merkbar. Manche Dienste erfordern sogar in einem regelmäßigen Zyklus die Vergabe eines komplett neuen Passwortes, das nicht einmal ansatzweise dem Alten ähneln sollte. Und die Anzahl der Benutzerkonten und Dienste steigt täglich. Eine mögliche Lösung für dieses Problem des Spagat zwischen Sicherheit und Einfachheit will ich heute vorstellen. Sie nennt sich "Passwort-Manager". Wie funktioniert das? Bei Passwort-Managern handelt es sich um Tools/Programme. Das Prinzip von solchen Tools ist recht simpel. Man merkt sich ein Masterpasswort, dieses dient als Schlüssel zu seinen gesamten Passwörtern, für alle Konten. Das ganze funktioniert aber nur so gut, so sicher das Masterpasswort ist. Das Masterpasswort ist …



Vorwort Gerade für Beginner ist oft nicht leicht erkennbar ob es sich bei dem durch die Suchmaschine seines geringsten Misstrauens gefundenen Ergebnisse um seriöse handelt oder nicht. Das kann so pauschal auch nicht einfach beantwortet werden. Grundsätzlich sollte darauf geachtet werden ob die Antwort Quellen auf offizielle Dokumentation etc. der Sprache oder des Frameworks handelt. Entspricht der Inhalt der Quelle dem der Antwort ist diese meist als seriös einzustufen. Stackoverflow.com Eine der wohl wichtigsten Plattformen für Fragen und Probleme von Entwicklern ist stackOverflow.com. Hierbei ist es möglich als registrierter Benutzer mit gewisser Aktivität Antworten hoch- und runter zu voten. Hiermit sind die Antworten, die Nutzer für am sinnvollsten halten weit oben und unglaubwürdigere Antworten weiter unten. Sollte einen Antwort sogar im Minus sein, wird diese entsprechend ausgegraut. Das ist schon einmal eine grobe Vorsortierung. Die richtige Frage ist zudem mit einem grünen Haken als solche erkennbar. Das heißt aber nicht automatisch das diese auch "richtig" ist, denn sie wurde vom Fragesteller als solche markiert. Gerade für Anfänger stellt das aber eine gute Orientierung dar. Oft lohnt sich auch ein Blick in die Kommentare, dort werden oft Ungereimtheiten angesprochen. Ansonsten lohnt sich auch immer ein Blick in …



Vorwort Nachdem im Internet ziemlich viel komische Tutorials und schlechte YouTube-Videos kursieren und es viele PHP-Entwickler gibt, die schlecht entwickeln, hab ich mich entschieden einfach mal nen kleinen Crashkurs zu schreiben. Ziel ist es, nach diesem kleinen Crashkurs eine Ahnung zu haben wie PHP funktioniert und damit sauber arbeiten zu können. Zudem weißt du danach welchen Quellen du vertrauen solltest und welchen eher nicht. Hierzu werde ich aber nochmal irgendwann einen seperaten Post verfassen und dann hier verlinken. Bei dem Crashkurs hier gehe ich davon aus, das du einen PC bedienen kannst und der englischen Sprache mächtig bist. Ein halbwegs solides Verständnis für PCs ist auch von Vorteil. Geschichsstunde Zuerst einmal etwas Historisches. Nein, ich fange jetzt nicht wieder bei Lochkarten an. PHP wurde 1995 von Rasmus Lerdorf geschaffen. Ursprünglich war es ein Set von Perl-Scripts für die Erfassung von Zugriffen auf Webauftritte. Mit der Zeit war es ein riesiger Haufen von Skripts. Also hat er alles in C umgeschrieben um mit Datenbanken zu interagieren usw. Diesen Code stellte er dann frei zur Verfügung (heute würde man sagen Open Source). 1997 gabs dann nochmal ne kleine Überarbeitung allerdings immer noch ein One-Man-Project. Im Laufe der Zeit wurde das ganze dann …



Viele Entwickler wissen oft nicht wie sie Passwörter richtig speichern sollen. Dabei kommen dann leider oft Eigenimplementierungen heraus, die alles andere als sicher sind. Viele basieren auf dem Geheimhaltungsprinzip, welches schon längst als veraltet gilt. Oder im schlimmsten Fall gar eine Speicherung in Klartext! Dabei gibt es viele Möglichkeiten, Passwörter sicher zu speichern. Heutzutage gibt es dafür für nahezu jede Sprache passende Implementierungen. Hierbei gibt es zwei gängige Möglichkeiten Passwörter zu sichern. Die erste Möglichkeit besteht darin die Passwörter mit einem Einweg-Hashalgorithmus zu schützen. Dies kommt allerdings nur in Frage, wenn die Passwörter nicht mehr im Klartext benötigt werden. Dies ist in der Mehrzahl der Anwendungen der Fall. Ansonsten gibt es noch diverse Verschlüsselungsverfahren, bei denen das Passwort mit einem geheimen Schlüssel verschlüsselt wird. In diesem Artikel werde ich allerdings mehr auf die Hashverfahren eingehen. Diese sind oberflächlich gesehen ersteinmal Algorithmen, die eine relativ schnelle Unkenntlichmachung des Passwortes erlauben. Die Errechnung eines Hashes ohne den Wert zu kennen, sollte dabei sehr schwer möglich, am Besten nur durch Raten möglich sein. Hierbei ist zu beachten, das diese Hashverfahren mit zunehmender Rechenleistung entsprechend unsicher werden. So sollte man regelmäßig prüfen, ob das Hashverfahren noch den aktuellen Standard entspricht. Hier ist als Beispiel …